Добавить модуль HID ядра insmod - PullRequest
0 голосов
/ 15 июля 2009

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

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

Теперь я хочу загрузить тот же модуль ядра в ядре v 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

**

С уважением,

Ответы [ 3 ]

3 голосов
/ 15 июля 2009

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

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

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

0 голосов
/ 15 июля 2009

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

MAKEFILE

obj-m: = myhid.o

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

KDIR: = / lib / modules / $ (shell uname -r) / build

PWD: = $ (shell pwd)

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

$(MAKE) -C $(KDIR) M=$(PWD) modules
0 голосов
/ 15 июля 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.

...