В linux-source -... есть модуль, который отключен в config /boot/config-3.4-trunk-686-pae, так что он не является частью linux-image -... (Это в Debian, но решение должно быть одинаковым для Ubuntu или?), например
# CONFIG_CAN_PEAK_USB is not set
Как можно скомпилировать только этот модуль ядра, чтобы его можно было использовать с распределенным ядром?
Соответствующий пакет linux-source -... уже установлен, распакован и связан с / usr / src / linux. /boot/config-3.4-trunk-686-pae копируется в /usr/src/linux/.config и изменяется с
CONFIG_CAN_PEAK_USB=m
С
make
make modules
есть возможность скомпилировать ядро и все модули. Но как компилировать только этот конкретный модуль?
(Примечание: также потребности ядра должны быть собраны до того , в противном случае вы получите следующее сообщение об ошибке: no symbol version for module_layout
)
depmod -a
раньшеmodbrobe
?Ответы:
У меня такая же проблема. Я предполагаю, что вам нужно не только скопировать .config, но и Module.symvers
мои шаги по компиляции модуля ft1000 (работает Debian Wheeze 7.1.0; ядро 3.2.0-4-686-pae):
источник
make M=/path/to/module
который, кажется, работал.Из исходного каталога верхнего уровня просто укажите make путь к имени модуля или каталогу модуля, например:
или для более простого примера (драйвер Intel e1000 Ethernet):
источник
make drivers/net/can/usb/peak_usb/pcan_usb.ko
делал только сборку pcan_usb.o. Doingmake drivers/net/can/usb/peak_usb/ && make drivers/net/can/usb/peak_usb/pcan_usb.ko
компилирует это, но insmod жалуетсяError: could not insert module drivers/net/can/usb/peak_usb/peak_usb.ko: Invalid module format
. dmesg:peak_usb: no symbol version for module_layout
modprobe
также.make modules SUBDIRS=drivers/net/can/usb/peak_usb
или любой другой subdir. Здесь отлично работает.Просто: (этот пример иллюстрирует драйвер ft1000, это может занять несколько минут, если не мгновение)
Затем вы можете загрузить модуль
modprobe
послеdepmod
Примечание: в зависимости от зависимости от модуля вам может потребоваться полностью перестроить ядро
источник