2014-11-07 2 views
0

Я пытаюсь драйвер для пользовательских аппаратных компонентов, исходный код можно найти здесь:Не удается получить сообщения ядра от модуля

https://github.com/godspeed1989/zedboard/blob/master/led_drv/driver/myled.c

проблема заключается в том, что когда я делаю:

insmod myled.ko 

ничего не отображается на консоли или в журнале dmesg. Читаю Linux Device Driver 3 и на нем написано, что вы всегда должны делать:

module_init(init_function); 
module_exit(exit_function); 

в исходном коде нет ни одного из них, вместо этого есть:

module_platform_driver(myled_driver); 

Но когда я загрузить модуль с этой функцией ничего не печатает, вместо этого, если я буду использовать сообщения module_init и module_exit, в чем разница между этими двумя типами istructions?

+0

Взгляните на https://www.kernel.org/doc/Documentation/driver-model/platform.txt и http://stackoverflow.com/questions/22722520/who-calls-probe-function-in -driver-code Также может быть файл платы, который перечисляет ресурсы по имени. В этом случае параметр .name важен, поскольку он будет использоваться для привязки ресурсов. –

+1

Последний оператор (или макрос) может заменить первые два: см. Lxr.free-electrons.com/source/include/linux/platform_device.h#L214 – sawdust

+0

ok, но почему последнее утверждение не работает, в то время как первое ОК? – Luca

ответ

0

«но почему последнее утверждение не работает, в то время как первое в порядке?» Первый metond зарегистрирует драйвер для системы и шины по модулю module_platform_driver. Последнее заявление не будет регистрировать ваш драйвер для системы и шины. Для этого вам нужно установить драйвер register в функции init_function(), вызвав platform_device_register().

+0

Как вы можете утверждать, что * «первый метод» * делает, когда вы не знаете, что аргументы для ** module_init() ** и ** module_exit() ** как используется OP? – sawdust

+0

Обратите внимание на ссылку, которую вы ввели: http://lxr.free-electrons.com/source/include/linux/platform_device.h#L214. Module_platform_driver() marcro вызовет platform_driver_register(). – Hunter

+0

Вы, кажется, смущены как то, что является «первым методом» *, к которому относятся OP и я, который является 'module_init (init_function); module_exit (exit_function); '. 'module_platform_driver()' назывался вторым методом. В любом случае, ваша догадка неверна, и ОП решила проблему. – sawdust

Смежные вопросы