информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
За кого нас держат?Spanning Tree Protocol: недокументированное применениеПортрет посетителя
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
 Зловреды выбирают Lisp и Delphi 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / beginners
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
Господа, будьте снисходительны, не бросайтесь сразу штрафовать за, как вам кажется, глупые вопросы - beginners на то и beginners.
Попробую 21.12.03 17:01  Число просмотров: 2260
Автор: 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 в Линуксе что ?
А ничего. Для разработки модулей ядра нужно поставить исходники ядра и читать документацию.
<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
лежат сырцы от того ядра на котором ты сейчас работаешь?
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach