Звонок другу (ubuntu, kernel, modules)

Все, что вы хотели знать о программизме, но боялись спросить.
Ответить
Аватара пользователя
dima8080
Пользователь
Сообщения: 104
Зарегистрирован: 08 мар 2007, 01:29
Откуда: Richmond BC
Контактная информация:

Звонок другу (ubuntu, kernel, modules)

Сообщение dima8080 »

По работе делаю небольшой проект - SCSI driver for virtual disk. Немного изменил кернел, перекомпилировал, написал модуль, получил ошибку и т.д.
В общем не очень работает :) Есть несколько вопросов с продолжением, в зависимости от ответов.
Если кому не влом это дело обсудить - бросьте телефон в личку, я позвоню. За мной пиво или что там сегодня котируется :)
Аватара пользователя
dima8080
Пользователь
Сообщения: 104
Зарегистрирован: 08 мар 2007, 01:29
Откуда: Richmond BC
Контактная информация:

Re: Звонок другу (ubuntu, kernel, modules)

Сообщение dima8080 »

Попытка номер 2.
Буду более детален.

Есть module который называется "scst" (scst.sourceforge.net), и который я инсталировал.

$ lsmod | grep scst
scst 172448 0

Есть module "scst_proxy" который я написал, и который пользуется scst.

Компилирую мой module, получаю ошибку:
$ make
make -C /lib/modules/2.6.28.9-scst/build M=/home/dima/Work/proj/scst_test modules
make[1]: Entering directory `/usr/src/linux-source-2.6.28'
CC [M] /home/dima/Work/proj/scst_test/scst_proxy.o
Building modules, stage 2.
MODPOST 1 modules
WARNING: "__scst_register_target_template" [/home/dima/Work/proj/scst_test/scst_proxy.ko] undefined!
WARNING: "scst_unregister_target_template" [/home/dima/Work/proj/scst_test/scst_proxy.ko] undefined!
CC /home/dima/Work/proj/scst_test/scst_proxy.mod.o
LD [M] /home/dima/Work/proj/scst_test/scst_proxy.ko
make[1]: Leaving directory `/usr/src/linux-source-2.6.28'

System call в кернеле вроде зарегистрирован:

$ cat /proc/kallsyms | grep __scst_register_target_template
f7fd6de8 r __ksymtab___scst_register_target_template [scst]
f7fd72cf r __kstrtab___scst_register_target_template [scst]
f7fd702c r __kcrctab___scst_register_target_template [scst]
f7fbbdb0 T __scst_register_target_template [scst]
2f5df621 a __crc___scst_register_target_template [scst]

Когда запускаю свой module, понятно он падает.
$ sudo insmod scst_proxy.ko
insmod: error inserting 'scst_proxy.ko': -1 Unknown symbol in module

Что я тут пропустил?
Аватара пользователя
Groundhog
Графоман
Сообщения: 5099
Зарегистрирован: 20 авг 2005, 16:36
Откуда: Vancouver

Re: Звонок другу (ubuntu, kernel, modules)

Сообщение Groundhog »

А вы его:
- проверьте совпадают ли версии кернела а то у вас 2.6.28.9 и 2.6.28.?????
- лучше скопируйте модуль в кернел трее и компилируйте непосредственно в кернеле;
- попробуйте скомпилировать как билдин в кернеле а не как модули (существуюший модуль обычно можно в конфигурационном фаиле в кернел забить).;
- компилятор вам явно намекает что у вас парочка функций неопределена
Аватара пользователя
dima8080
Пользователь
Сообщения: 104
Зарегистрирован: 08 мар 2007, 01:29
Откуда: Richmond BC
Контактная информация:

Re: Звонок другу (ubuntu, kernel, modules)

Сообщение dima8080 »

Версия кернела одна и таже. Я её сгрузил, скомпилировал и установил. Потом я скомпилировал оба модуля в этом же кернеле.
Т.е. с версиями проблем не должно быть. Намёк компилятора я понимаю. Осталась мелочь ...
Может я в Makefile должен как-то указать что модуль "scst-proxy" пользуется другим модулем "scst"?
Аватара пользователя
Groundhog
Графоман
Сообщения: 5099
Зарегистрирован: 20 авг 2005, 16:36
Откуда: Vancouver

Re: Звонок другу (ubuntu, kernel, modules)

Сообщение Groundhog »

А что modules.dep кажет?
зависит ваш модуль от исходного (посмотрите в исходном EXPORT_SYMBOL или чо там...).
Вообще ваш фраме-ворк работает? скомпилируйте простейший (типа принтк ХХХ) грузится?
Извините за вопросы не знаю на какой вы стадии копания в кернеле...
Аватара пользователя
dima8080
Пользователь
Сообщения: 104
Зарегистрирован: 08 мар 2007, 01:29
Откуда: Richmond BC
Контактная информация:

Re: Звонок другу (ubuntu, kernel, modules)

Сообщение dima8080 »

А ларчик просто ...

1. Copy the .ko file to a location beneath /lib/modules/<version>/kernel
2. Add the exported symbols to /lib/modules/<version>/build/Module.symvers
3. Reboot
4. Enjoy

Groundhog, thanks for ideas and sorry for bothering
Ответить