Решено: Как из исходников ядра пересобрать и установить модуль (только один а не все сразу.)

Взгляд изнутри

Модератор: Модераторы разделов

Ответить
Аватара пользователя
Denjs
Сообщения: 1685
ОС: SuSe 10.2

Решено: Как из исходников ядра пересобрать и установить модуль

Сообщение Denjs »

Сабж.
Нужно внести патч в один модуль ядра и пересобрать его. (злополучный usbhid - надо в его черный список (бан-лист?))) ) добавить id ещё одного устройства)
Ну и установить. Его.
Его и только его, дыбы не порушить чего случайно.

Исходники модуля ставятся вместе с исходниками ядра, но пересобирать все ядро как-то очень не хочется.... не сконфигурирую я его так что бы оно потом взлетело на моем EEEPC901

Вопрос как собрать только модуль?
судя по #make help, есть направление сборки вида #make modules - но там собираются все модули + #make modules_install (так кажется) устанавливает все модули.
Но как мне поставить только один модуль? я что-то пропустил?
QDroid - Среда исполнения и фреймворк для QtScript.
OTPD - Открытые драйвера промышленных принтеров чеков и этикеток (кроссплатформенная подсистема печати).
Спасибо сказали:
Аватара пользователя
BlackStar
Сообщения: 1338
Статус: We are all Kosh
ОС: Fedora 10
Контактная информация:

Re: Решено: Как из исходников ядра пересобрать и установить модуль

Сообщение BlackStar »

$ make SUBDIRS=fs/ext3 modules
LightLang Team
Спасибо сказали:
Аватара пользователя
Denjs
Сообщения: 1685
ОС: SuSe 10.2

Re: Решено: Как из исходников ядра пересобрать и установить модуль

Сообщение Denjs »

BlackStar писал(а):
29.05.2009 11:37
$ make SUBDIRS=fs/ext3 modules

а потом
$ make SUBDIRS=fs/ext3 modules_install
?
спс... попробую...
QDroid - Среда исполнения и фреймворк для QtScript.
OTPD - Открытые драйвера промышленных принтеров чеков и этикеток (кроссплатформенная подсистема печати).
Спасибо сказали:
Аватара пользователя
Denjs
Сообщения: 1685
ОС: SuSe 10.2

Re: Решено: Как из исходников ядра пересобрать и установить модуль

Сообщение Denjs »

нет, не выходит...

Код: Выделить всё

# make SUBDIRS=drivers/hid modules

  WARNING: Symbol version dump /usr/src/linux-2.6.27.21-0.1/Module.symvers
           is missing; modules will have no dependencies and modversions.

  CC [M]  drivers/hid/hid-core.o
In file included from include/linux/gfp.h:4,
                 from include/linux/kmod.h:22,
                 from include/linux/module.h:13,
                 from drivers/hid/hid-core.c:17:
include/linux/mmzone.h:18:26: error: linux/bounds.h: No such file or directory
include/linux/mmzone.h:197:5: warning: "MAX_NR_ZONES" is not defined
In file included from include/linux/gfp.h:4,
                 from include/linux/kmod.h:22,
                 from include/linux/module.h:13,
                 from drivers/hid/hid-core.c:17:
include/linux/mmzone.h:221: error: ‘MAX_NR_ZONES’ undeclared here (not in a function)
In file included from drivers/hid/hid-core.c:22:
include/linux/mm.h:450:63: warning: "NR_PAGEFLAGS" is not defined
include/linux/mm.h:498:62: warning: "NR_PAGEFLAGS" is not defined
make[1]: *** [drivers/hid/hid-core.o] Error 1
make: *** [_module_drivers/hid] Error 2
QDroid - Среда исполнения и фреймворк для QtScript.
OTPD - Открытые драйвера промышленных принтеров чеков и этикеток (кроссплатформенная подсистема печати).
Спасибо сказали:
Аватара пользователя
ormorph
Сообщения: 2645
ОС: Gentoo

Re: Решено: Как из исходников ядра пересобрать и установить модуль

Сообщение ormorph »

Хм может это поможет?
http://www.opennet.ru/tips/info/948.shtml
Ну и обратите внимание на команду depmod -a это для установки модуля
Спасибо сказали:
Аватара пользователя
Denjs
Сообщения: 1685
ОС: SuSe 10.2

Re: Решено: Как из исходников ядра пересобрать и установить модуль

Сообщение Denjs »

ormorph писал(а):
30.05.2009 00:02
Хм может это поможет?
http://www.opennet.ru/tips/info/948.shtml
Ну и обратите внимание на команду depmod -a это для установки модуля

ссылку читал. признаться так и не понял какие переменные выставлять после make в моем случае - для usbhid и yealink.
но это пол беды.

В общем пересобрал я все модули через "make modules".
Сделал бакап "/lib/modules/....." и после запустил "make modules_install"....
в общем нудный мне модуль yealink просто отказывается грузиться. (другие думаю будут аналогично, пока не перегружался - верну все обратно)
В общем в ответ на "modprobe yealink" выдает ...."бла-бла-бла ..... Invalid Module Format". в dmesg появляется "yealink: no symbol version for struct_module"..
к чему это, признаться ума не приложу...
"depmod -a" перед "modprobe yealink" вроде сделал... но без разницы...

Кроме того - размер моего модуля 170к против 15к оригинального, что вызывает у меня сильные подозрения что процесс прошел нормально....

я в общем пока в подавленном состоянии )))
в ядреные вопросы окунаюсь первый раз потому и столько вопросов....
QDroid - Среда исполнения и фреймворк для QtScript.
OTPD - Открытые драйвера промышленных принтеров чеков и этикеток (кроссплатформенная подсистема печати).
Спасибо сказали:
Аватара пользователя
ormorph
Сообщения: 2645
ОС: Gentoo

Re: Решено: Как из исходников ядра пересобрать и установить модуль

Сообщение ormorph »

ну то что достаточно большой размер это ничего, так как там на самом деле в этом модуле еще много всякого мусора, от которого оригенал подчищен, для этого с модулями помоему strip не идет может неработать после этого, я не спецал в этом и как подчищали разработчики незнаю.

по мусором понимается всякая информация, в каком каталоге компилировалось и т.д.

посмотрите с помощью команды modinfo данные в оригенального и собранного вновь модуля, чем нибудь они отличаются?
в частности обратите внимание на данные vermagic:
что там будет прописанно.

пример использования:

Код: Выделить всё

modinfo модуль.ko
Спасибо сказали:
Аватара пользователя
ormorph
Сообщения: 2645
ОС: Gentoo

Re: Решено: Как из исходников ядра пересобрать и установить модуль

Сообщение ormorph »

опс на счет strip обшибся, как раз там strip и подчищает инфу в модулях, только с оприделенными опциями.
на счет ошибки все таки посмотрите вывод команды modinfo.
так как обычно такие ошибки происходят когда кнофигурация новых модулей отличная от конфигурации ядра.
например процессор и т.д. при компиляции берет свою инфу из файла .config
обычно производители выкладывают свой конфиг в /boot/config-x.x.x
так как ядро можетбыть еще сконфигурированно с заданной еще одной опцией в конфиге CONFIG_LOCALVERSION="" в кавычках прописанно еще название, котрое добавляется к общему названию версии ядра это видно как раз в vermagic:
можно просто сделать

Код: Выделить всё

cp /boot/config-x.x.x /usr/src/linux-x.x.x/.config

затем можно доконфигурировать что недостает, например make xconfig
Спасибо сказали:
Аватара пользователя
Denjs
Сообщения: 1685
ОС: SuSe 10.2

Re: Решено: Как из исходников ядра пересобрать и установить модуль

Сообщение Denjs »

"Пейте дети молоко - будете здоровы.... и читайте маны...."

В общем после внимательного вкуривания @README.SUSE из /usr/src/linux удалось собрать модуль который не ругается типа "yealink: no symbol version for struct_module"...

В общем, этот самый символ-вершн содержится в пакете kernel-syms.
После его установки удалось собрать модуль yealink по второму рецепту из руководства.
Оно -же и решение проблем (рецепт) пересбоки отдельного модуля.
The second method involves the following steps:

(1) Install kernel-source.$ARCH.rpm.

(2) Install kernel-syms.$ARCH.rpm. This package is necessary for
symbol version information (CONFIG_MODVERSIONS).

(3) Compile the module(s) by changing into the module source directory
and typing ``make -C /usr/src/linux-obj/$ARCH/$FLAVOR M=$(pwd)''.
Substitute $ARCH and $FLAVOR with the architecture and flavor
for which to build the module(s).

If the installed kernel sources match the running kernel, you
can build modules for the running kernel by using the path
/lib/modules/$(uname -r)/build as the -C option in the above
command. (build is a symlink to /usr/src/linux-obj/$ARCH/$FLAVOR).

Starting with SuSE Linux 9.2 / SLES9 Service Pack 1, the
modversion information for the running kernel is also
contained in the kernel-$FLAVOR packages, and so for building
modules for the running kernel, the kernel-syms package is no
longer required.

(4) Install the module(s) with
``make -C /usr/src/linux-obj/$ARCH/$FLAVOR M=$(pwd) modules_install''.

И хотя там написано что кернел-$FLAVOR все должен содержать - ничего подобного у меня не наблюдалось.

Т.е. что я сделал:
1) установил пакеты исходников ядра ( пакет kernel-source в yast)
2) установил пакет с "символьной информацией" (kernel-syms в yast)
3) взял конфиг текущего ядра из /boot/config-2.6.27.21-0.1-pae (подставьте то что у вас сюда) и в "$make menuconfig" загрузил его в конфиг текущего ядра и сохранл в .config (думаю можно просто скопировать с заменой имени... не проверял)
4) (этого думаю не обязательно, это хвост от первого рецепта. пропустите это в первую попытку) в корне исходников сделал "$make scripts" и "$make prepare"
5) перешел в каталог с нужным мне модулем и там сделал "$make -C /usr/src/linux-obj/i386/pae M=$(pwd)" (подставьте ваше вместо "i386/pae". обратите внимание на начало пути : /usr/src/linux-obj )
- система собрала мне модули из данного каталога. потом я руками скопировал нужные мне модули в /lib/modules/...... и загрузил его с помошью modprobe . (естественно, забакапил старый модуль ;) )

в общем вотЪ) пока все хорошо. пойду usbhid пересобирать.
QDroid - Среда исполнения и фреймворк для QtScript.
OTPD - Открытые драйвера промышленных принтеров чеков и этикеток (кроссплатформенная подсистема печати).
Спасибо сказали:
Аватара пользователя
ormorph
Сообщения: 2645
ОС: Gentoo

Re: Решено: Как из исходников ядра пересобрать и установить модуль

Сообщение ormorph »

Вот немного другой рецепт

Код: Выделить всё

cd /usr/src/linux
cp /boot/config-x.x.x .config
make xconfig   # и сохраняем конфигурацию
make include/
make CONFIG_INPUT_YEALINK=m M=drivers/input/misc/


далее драйвер будет собран
параметр CONFIG_INPUT_YEALINK=m берется из файла .config так как название модуля yealink.ko то делаем так:

Код: Выделить всё

cat .config|grep YEALINK

обязательно заглавными буквами название.
надеюсь некоторые сходства написанного находите со ссылкой которую я давал.

make include/ - это аналогично вышему 4 пункту.
ну и для сборки модулей в опредиленном каталоге, реально работает команда

Код: Выделить всё

make M=drivers/input/misc/
Спасибо сказали:
Аватара пользователя
Denjs
Сообщения: 1685
ОС: SuSe 10.2

Re: Решено: Как из исходников ядра пересобрать и установить модуль

Сообщение Denjs »

Всем СПС) помечаю тему решенной )
QDroid - Среда исполнения и фреймворк для QtScript.
OTPD - Открытые драйвера промышленных принтеров чеков и этикеток (кроссплатформенная подсистема печати).
Спасибо сказали:
Ответить