Добавить модуль insmod Kernel HID

Я внес некоторые изменения в скрытый модуль.

Я могу это сделать и успешно загрузить (insmod) на ядро ​​​​v 2.6.27.14.

Теперь я хочу загрузить тот же модуль ядра на ядро ​​версии 2.6.27.11.

Поскольку нет разницы в исходных файлах kerbel для обеих версий ядра

Я могу сделать это успешно, но я не могу добавить / insmod в эту версию ядра .11.

**

                ERROR: Module myhid does not exist in /proc/modules

               insmod: error inserting 'myhid.ko': -1 Invalid module format

**

С уважением,


person Madni    schedule 15.07.2009    source источник
comment
Не могли бы вы добавить больше деталей? Код, Makefile, как вы его вставляете и т.д.?   -  person hyperboreean    schedule 15.07.2009
comment
Возможно, попробуйте сравнить файлы .config?   -  person Inshallah    schedule 15.07.2009
comment
Вот make-файл. Я загружаю все зависимые исходные файлы для HID.O и переименовываю их. #MAKEFILE # Составные объекты. obj-m := myhid.o myhid-objs := my-hiddraw.o my-hid-core.o my-hid-input.o my-hid-input-quirk.o KDIR := /lib/modules/$ (shell uname -r)/сборка PWD := $(shell pwd) по умолчанию: $(MAKE) -C $(KDIR) M=$(PWD) модули   -  person Madni    schedule 15.07.2009


Ответы (3)


Вы не можете загрузить модуль, скомпилированный для другой версии ядра. То, что исходный код модуля не изменился, не означает, что бинарник будет таким же для другой версии ядра. Любое изменение интерфейса внутренних API-интерфейсов ядра (даже если они не видны напрямую) приведет к поломке модуля...

Поэтому ядро ​​остается в безопасности, запрещая загрузку модулей, которые были собраны для другой версии ядра. Кроме того, вы можете установить опцию конфигурации MODVERSIONS при сборке ядра. Это встроит информацию о версии во все символы, используемые вашим модулем, и, если повезет, вы сможете загрузить ее в другую версию ядра.

Если какой-либо интерфейс, используемый вашим модулем, изменился, результат будет таким же.

person Bluehorn    schedule 15.07.2009
comment
Спасибо ! Да, это работает, если я скомпилирую свои исходные файлы для каждой версии ядра. Как мы можем установить параметр конфигурации MODVERSIONS при сборке нашего ядра. Это в MAKEFILE или в любом исходном файле? С уважением, - person Madni; 15.07.2009
comment
Он устанавливается в .config, обычно запуская make menuconfig или тому подобное. Для получения дополнительной информации взгляните на Documentation/kbuild/modules.txt в исходниках вашего ядра. - person Bluehorn; 16.07.2009
comment
Спасибо! Я все еще работаю с MODVERSIONS, но до сих пор не имею хорошего представления об этом. Не могли бы вы прислать мне его пример. С уважением - person Madni; 16.07.2009

посмотрите, что "modinfo" говорит вам о вашем модуле:

Убедитесь, что он правильно скомпилирован, связан с правильным ядром.

$ modinfo hid
filename:       /lib/modules/2.6.27.7/kernel/drivers/hid/hid.ko
license:        GPL
depends:        
vermagic:       2.6.27.7 mod_unload 486 
parm:           pb_fnmode:Mode of fn key on Apple keyboards (0 = disabled, 1 = fkeyslast, 2 = fkeysfirst) (int)

Когда вы компилируете/устанавливаете модули, не забывайте, что вы должны запустить «depmod» (от root) для перестройки зависимостей модулей перед запуском insmod/modprobe.

person wazoox    schedule 15.07.2009

Спасибо ! Вот make-файл. Я загружаю все зависимые исходные файлы для HID.O и переименовываю их

МАКФАЙЛ

obj-m := myhid.o

myhid-objs := my-hiddraw.o my-hid-core.o my-hid-input.o my-hid-input-quirk.o

KDIR := /lib/modules/$(оболочка uname -r)/сборка

PWD := $(оболочка pwd)

По умолчанию:

$(MAKE) -C $(KDIR) M=$(PWD) modules
person Madni    schedule 15.07.2009