Olej писал(а):Olej писал(а):
Диагноз :
- так у вас модуль (Makefile) для
нативной сборки, там нет никакой
кросс-компиляции!
- конечно он не станет на ядро с другой сигнатурой.
Я никогда не задавался вопросами:
- кросс-сборки модуля под другое ядро
вручную...
- попыток загрузки модуля в обход контроля сигнатур
(вот то, что в названной ссылке
описывается как опция
--force-vermagic, что, как я сильно подозреваю, вообще не работает ... или всё не так просто и работает, но не так)
Вопрос состоит в том, чтоб:
- кросс-скомпилировать простейший модуль для загрузки
под другое ядро, но той же полностью архитектуры процессора + сделать это вручную.
Крос-компиляция, вообще то, дело непростое...
Всё, что пишут авторы
The Linux Kernel Module Programming Guide на этот счёт, что нужно просто в Makefile определить:
VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = 5
EXTRAVERSION = -1.358custom
...
- это,
по моему мнению, откровенная херня, и они сами это не делали и не проверяли.
Почему я так думаю?
Да потому, что все символы (имена) в модуле связываются тупо по
абсолютным адресам размещения в ядре, и стоит ядро чуть-чуть поменять (попатчить, строчку добавить) и все абсолютные адреса поплывут, и такой модуль мгновенно завалит систему!
Собрать модуль под другое ядро я могу так, поменяв в Makefile всего одну строчку:
Код: Выделить всё
#CURRENT = $(shell uname -r)
CURRENT = 2.6.35.14-106.fc14.i686.PAE
- это при том, что сигнатура моего текущего ядра - 2.6.42.12-1.fc15.i686.PAE (отличается).
И сборка моего элементарного ядра:
Код: Выделить всё
[olej@notebook cross]$ make
make -C /lib/modules/2.6.35.14-106.fc14.i686.PAE/build M=/home/olej/2012_WORK/OWN.BOOKS/examples.DRAFT/cross modules
make[1]: Вход в каталог `/usr/src/kernels/2.6.35.14-106.fc14.i686.PAE'
CC [M] /home/olej/2012_WORK/OWN.BOOKS/examples.DRAFT/cross/cross.o
Building modules, stage 2.
MODPOST 1 modules
CC /home/olej/2012_WORK/OWN.BOOKS/examples.DRAFT/cross/cross.mod.o
LD [M] /home/olej/2012_WORK/OWN.BOOKS/examples.DRAFT/cross/cross.ko
make[1]: Выход из каталога `/usr/src/kernels/2.6.35.14-106.fc14.i686.PAE'
[olej@notebook cross]$ modinfo cross.ko
filename: cross.ko
author: Oleg Tsiliuric <olej@front.ru>
license: GPL
srcversion: 1C7ED44CA3899A79D36310E
depends:
vermagic: 2.6.35.14-106.fc14.i686.PAE SMP mod_unload 686
- модуль собрался ... и я так сильно предполагаю, что он будет загружаемый и всё ОК...
Но здесь есть хитрость ...
я вас слегка обманул :
- у меня установлены все хэдер файлы (build-каталог) для этого ядра
Код: Выделить всё
[olej@notebook ~]$ ls -l /lib/modules
итого 12
drwxr-xr-x 6 root root 4096 марта 25 00:37 2.6.35.14-106.fc14.i686.PAE
drwxr-xr-x 6 root root 4096 марта 31 02:13 2.6.42.12-1.fc15.i686.PAE
drwxr-xr-x 3 root root 4096 марта 14 23:05 3.0.9
- и
ни для какого иного ядра, кроме тех, что установлены в процессе обновлений, собрать модуль не получится.