Сабж.
Нужно внести патч в один модуль ядра и пересобрать его. (злополучный usbhid - надо в его черный список (бан-лист?))) ) добавить id ещё одного устройства)
Ну и установить. Его.
Его и только его, дыбы не порушить чего случайно.
Исходники модуля ставятся вместе с исходниками ядра, но пересобирать все ядро как-то очень не хочется.... не сконфигурирую я его так что бы оно потом взлетело на моем EEEPC901
Вопрос как собрать только модуль?
судя по #make help, есть направление сборки вида #make modules - но там собираются все модули + #make modules_install (так кажется) устанавливает все модули.
Но как мне поставить только один модуль? я что-то пропустил?
Решено: Как из исходников ядра пересобрать и установить модуль (только один а не все сразу.)
Модератор: Модераторы разделов
-
- Сообщения: 1685
- ОС: SuSe 10.2
-
- Сообщения: 1338
- Статус: We are all Kosh
- ОС: Fedora 10
Re: Решено: Как из исходников ядра пересобрать и установить модуль
$ make SUBDIRS=fs/ext3 modules
LightLang Team
-
- Сообщения: 1685
- ОС: SuSe 10.2
Re: Решено: Как из исходников ядра пересобрать и установить модуль
а потом
$ make SUBDIRS=fs/ext3 modules_install
?
спс... попробую...
-
- Сообщения: 1685
- ОС: SuSe 10.2
Re: Решено: Как из исходников ядра пересобрать и установить модуль
нет, не выходит...
Код: Выделить всё
# 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
-
- Сообщения: 2913
- ОС: Gentoo
Re: Решено: Как из исходников ядра пересобрать и установить модуль
Хм может это поможет?
http://www.opennet.ru/tips/info/948.shtml
Ну и обратите внимание на команду depmod -a это для установки модуля
http://www.opennet.ru/tips/info/948.shtml
Ну и обратите внимание на команду depmod -a это для установки модуля
-
- Сообщения: 1685
- ОС: SuSe 10.2
Re: Решено: Как из исходников ядра пересобрать и установить модуль
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к оригинального, что вызывает у меня сильные подозрения что процесс прошел нормально....
я в общем пока в подавленном состоянии )))
в ядреные вопросы окунаюсь первый раз потому и столько вопросов....
-
- Сообщения: 2913
- ОС: Gentoo
Re: Решено: Как из исходников ядра пересобрать и установить модуль
ну то что достаточно большой размер это ничего, так как там на самом деле в этом модуле еще много всякого мусора, от которого оригенал подчищен, для этого с модулями помоему strip не идет может неработать после этого, я не спецал в этом и как подчищали разработчики незнаю.
по мусором понимается всякая информация, в каком каталоге компилировалось и т.д.
посмотрите с помощью команды modinfo данные в оригенального и собранного вновь модуля, чем нибудь они отличаются?
в частности обратите внимание на данные vermagic:
что там будет прописанно.
пример использования:
по мусором понимается всякая информация, в каком каталоге компилировалось и т.д.
посмотрите с помощью команды modinfo данные в оригенального и собранного вновь модуля, чем нибудь они отличаются?
в частности обратите внимание на данные vermagic:
что там будет прописанно.
пример использования:
Код: Выделить всё
modinfo модуль.ko
-
- Сообщения: 2913
- ОС: Gentoo
Re: Решено: Как из исходников ядра пересобрать и установить модуль
опс на счет strip обшибся, как раз там strip и подчищает инфу в модулях, только с оприделенными опциями.
на счет ошибки все таки посмотрите вывод команды modinfo.
так как обычно такие ошибки происходят когда кнофигурация новых модулей отличная от конфигурации ядра.
например процессор и т.д. при компиляции берет свою инфу из файла .config
обычно производители выкладывают свой конфиг в /boot/config-x.x.x
так как ядро можетбыть еще сконфигурированно с заданной еще одной опцией в конфиге CONFIG_LOCALVERSION="" в кавычках прописанно еще название, котрое добавляется к общему названию версии ядра это видно как раз в vermagic:
можно просто сделать
затем можно доконфигурировать что недостает, например make xconfig
на счет ошибки все таки посмотрите вывод команды 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
-
- Сообщения: 1685
- ОС: SuSe 10.2
Re: Решено: Как из исходников ядра пересобрать и установить модуль
"Пейте дети молоко - будете здоровы.... и читайте маны...."
В общем после внимательного вкуривания @README.SUSE из /usr/src/linux удалось собрать модуль который не ругается типа "yealink: no symbol version for struct_module"...
В общем, этот самый символ-вершн содержится в пакете kernel-syms.
После его установки удалось собрать модуль yealink по второму рецепту из руководства.
Оно -же и решение проблем (рецепт) пересбоки отдельного модуля.
И хотя там написано что кернел-$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 пересобирать.
В общем после внимательного вкуривания @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 пересобирать.
-
- Сообщения: 2913
- ОС: Gentoo
Re: Решено: Как из исходников ядра пересобрать и установить модуль
Вот немного другой рецепт
далее драйвер будет собран
параметр CONFIG_INPUT_YEALINK=m берется из файла .config так как название модуля yealink.ko то делаем так:
обязательно заглавными буквами название.
надеюсь некоторые сходства написанного находите со ссылкой которую я давал.
make include/ - это аналогично вышему 4 пункту.
ну и для сборки модулей в опредиленном каталоге, реально работает команда
Код: Выделить всё
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/
-
- Сообщения: 1685
- ОС: SuSe 10.2
Re: Решено: Как из исходников ядра пересобрать и установить модуль
Всем СПС) помечаю тему решенной )