Pull to refresh

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.х ядром, но есть и желание пользоваться "плюшками" более новых...
Я всё понимаю, но на современном x86_64 ring0 — это очень малопривилегированный режим. Есть ring -1 — гипервизор, есть SMM режим, и есть ring -2, использующийся MEI. Таким образом, если мы перенормируем циферки, то будет так:

ring0 — MEI
(где-то тут SMM)
ring1 — hypervisor
ring2 — kernel
ring3 — userspace
В примере ошибка, закольцовка должна быть внутри while.
dmesg пишет…

module verification failed: signature and/or required key missing — tainting kernel

Как побороть?
но зато на невероятной скорости

А разве скорость выполнения кода в разных кольцах отличается?

А кто нибудь знает, как завести эту kernel-mode сборку в отдельной сборочной директории?

Sign up to leave a comment.

Articles