Comments 8
UFO just landed and posted this here
Для начала — неплохо, но!
Как пытавшийся освоить написание ядерных модулей с год-два назад задам пару вопросов, возникающих у новичков, вроде меня:
- откуда взялось
register_chrdev
и "с чем его есть"? Понять, как регистрировать своё устройство из документации и книг по ядру 2.6 (привет "библии" LDD3) довольно сложно - у пишущего модуль ядра НЕТ всяких операций с плавающей точкой, некоторых оптимизаций под процессор и т.п. — желание, например, включить armhf опции, закономерно приводит к ошибке загрузки модуля или зависанию
- мне, как "новичку" (ибо была проба 'for fun' и дальше не возился) до сих пор непонятно, как, например, прицепить свой датчик тока на I2C к hwmon, thermal, fan или к чему-то, что увидит (опять же — например) lm-sensors
- ну и хотелось бы хоть названий, чего почитать про написание драйверов под более-менее современные ядра. По мне — начиная с 3.х и сравнивая с 4.х — есть одноплатники с 3.х ядром, но есть и желание пользоваться "плюшками" более новых...
+2
Я всё понимаю, но на современном x86_64 ring0 — это очень малопривилегированный режим. Есть ring -1 — гипервизор, есть SMM режим, и есть ring -2, использующийся MEI. Таким образом, если мы перенормируем циферки, то будет так:
ring0 — MEI
(где-то тут SMM)
ring1 — hypervisor
ring2 — kernel
ring3 — userspace
ring0 — MEI
(где-то тут SMM)
ring1 — hypervisor
ring2 — kernel
ring3 — userspace
0
В примере ошибка, закольцовка должна быть внутри while.
0
mkdir -p ~/src/lkm_example
Так получше будет…
0
dmesg пишет…
module verification failed: signature and/or required key missing — tainting kernel
Как побороть?
module verification failed: signature and/or required key missing — tainting kernel
Как побороть?
0
но зато на невероятной скорости
А разве скорость выполнения кода в разных кольцах отличается?
0
А кто нибудь знает, как завести эту kernel-mode сборку в отдельной сборочной директории?
0
Sign up to leave a comment.
Пишем простой модуль ядра Linux