Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Господа, будьте снисходительны, не бросайтесь сразу штрафовать за, как вам кажется, глупые вопросы - beginners на то и beginners.
|
ты точно уверен что каталоге /lib/modules/`uname... 19.12.03 12:03 Число просмотров: 2037
Автор: ZaDNiCa <indeed ZaDNiCa> Статус: Elderman
|
ты точно уверен что каталоге /lib/modules/`uname -r`/build/include
лежат сырцы от того ядра на котором ты сейчас работаешь?
|
<beginners>
|
модуль ядра Линукса 18.12.03 22:27
Автор: руд Статус: Незарегистрированный пользователь
|
Я собрал второй пример из книги Померанца
$gcc -DMODULE -D__KERNEL__ -DLINUX -O2 -W -Wall -Wstrict-prototypes -Wmissing-prototypes -isystem /lib/modules/`uname -r`/build/include -c h1.c
#insmod h1.o
h1.o: unresolved symbol module_unregister_chrdev
h1.o: unresolved symbol module_register_chrdev
h1.o:
Hint: You are trying to load a module without a GPL compatible license
and it has unresolved symbols. Contact the module supplier for
assistance, only they can help you.
Почему у меня такая ошибка ?
ЗЫ: Порекомендуйте какие-нибудь ресурсы (рус,англ) по данной тематике.
ЗЗЫ: Ось у меня мандрейк 9
|
|
Версии модулей? 19.12.03 15:02
Автор: amirul <Serge> Статус: The Elderman
|
В make menuconfig в одном из первых меню лежит
> h1.o: unresolved symbol module_unregister_chrdev > h1.o: unresolved symbol module_register_chrdev
> Почему у меня такая ошибка ? Выражается в том, что такие вот имена манглятся: в конец добавляется разный мусор. Причем мусор разный для разных версий ядра. Это приводит к тому, что динамический линкер просто не может связать модули из разных версий ядер.
Для начала попробуй включить эту опцию. Лучше всего после этого пересобрать ядро и тестировать новые модули в нем, чтобы быть уверенным, что и исходники и конфигурация те что надо.
> ЗЫ: Порекомендуйте какие-нибудь ресурсы (рус,англ) по > данной тематике. > ЗЗЫ: Ось у меня мандрейк 9
|
| |
Всем спасибо.
20.12.03 14:52
Автор: руд Статус: Незарегистрированный пользователь
|
Всем спасибо.
Заменил module_register_chrdev на register_chrdev - заработало (модуль загрузился).
2 amirul - я недоконца понял твою идею в части
/*
В make menuconfig в одном из первых меню лежит
Выражается в том, что такие вот имена манглятся: в конец добавляется разный мусор. Причем мусор разный для разных версий ядра. Это приводит к тому, что динамический линкер просто не может связать модули из разных версий ядер.
Для начала попробуй включить эту опцию.
*/
Ты об этом говоришь ?
h1.c:38: warning: implicit declaration of function `printk_R1b7d4074'
h1.c:41: warning: implicit declaration of function `sprintf_R1d26aa98'
Ты не мог бы переформулирофать/пояснить свою мысль.
ЗЫ: А типа DDK в Линуксе что ?
|
| | |
Попробую 21.12.03 17:01
Автор: amirul <Serge> Статус: The Elderman
|
> Всем спасибо. > Заменил module_register_chrdev на register_chrdev - > заработало (модуль загрузился). Тогда точно не из за версий модулей.
> 2 amirul - я недоконца понял твою идею в части > /* > В make menuconfig в одном из первых меню лежит При конфигурировании ядра в самом начале идут вопросы о поддержке модулей. Так вот кроме собственно поддержки там есть еще и Module Versioning (кажется так) который и приводит к этому эффекту
> Ты об этом говоришь ? > h1.c:38: warning: implicit declaration of function > `printk_R1b7d4074' > h1.c:41: warning: implicit declaration of function > `sprintf_R1d26aa98' Ага. В тексте программы это обычные printk/sprintf, но они подключают файл modversion.h (тоже кажется так - пишу по памяти) в котором определяются макросы препроцессора, которые и производят такую замену. Идея в том, что в разных ядрах мусор, идущий после "_R" разные. И поэтому даже если ядро одной версии экспортирует printk, а ядро другой версии импортирует ее же, то в бинарный файл printk попадет под разными именами и следовательно модули от разных версий не свяжутся
> Ты не мог бы переформулирофать/пояснить свою мысль. Надеюсь понятно выразился. Но так как проблема решилась совершенно другим способом, то скорее всего дело было не в ней. Но довольно большая вероятность, что в том, что установленное ядро отличалось от ядра сконфигурированного там, где указал ZaDNiCa
> ЗЫ: А типа DDK в Линуксе что ? А ничего. Для разработки модулей ядра нужно поставить исходники ядра и читать документацию.
|
|
ты точно уверен что каталоге /lib/modules/`uname... 19.12.03 12:03
Автор: ZaDNiCa <indeed ZaDNiCa> Статус: Elderman
|
ты точно уверен что каталоге /lib/modules/`uname -r`/build/include
лежат сырцы от того ядра на котором ты сейчас работаешь?
|
|
|