| 
 
 
 
 Легенда:
  новое сообщение 
  закрытая нитка 
  новое сообщение 
  в закрытой нитке 
  старое сообщение   | 
Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
Новичкам также крайне полезно ознакомиться с данным документом.
Господа, будьте снисходительны, не бросайтесь сразу штрафовать за, как вам кажется, глупые вопросы - beginners на то и beginners. 
|  |  | Всем спасибо. 
  20.12.03 14:52  Число просмотров: 2152 Автор: руд Статус: Незарегистрированный пользователь
 |  
| Всем спасибо. Заменил 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 в Линуксе что ?
 |  | <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 лежат сырцы от того ядра на котором ты сейчас работаешь?
 |  
 
 
 |  |