Как собрать один модуль ядра в дереве?
В 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
)
4 ответа
У меня такая же проблема. Я предполагаю, что вам нужно не только скопировать.config, но и Module.symvers
мои шаги по компиляции модуля ft1000 (работает Debian Wheeze 7.1.0; ядро 3.2.0-4-686-pae):
aptitude install linux-headers-3.2.0-4-686-pae
aptitude install linux-source-3.2
cd /usr/src/
tar xjf linux-source-3.2.tar.bz2
cd /usr/src/linux-source-3.2
cp ../linux-headers-3.2.0-4-686-pae/Module.symvers .
make oldconfig # it copies .config to ./
vi .config # enable ft1000 module: CONFIG_FT1000=m
make prepare # setup FT1000 as module
make modules_prepare
make SUBDIRS=scripts/mod
make SUBDIRS=drivers/staging/ft1000/ft1000-usb modules
cp drivers/staging/ft1000/ft1000-usb/ft1000.ko /lib/modules/3.2.0-4-686-pae/kernel
/drivers/staging/
depmod
modprobe ft1000
Из исходного каталога верхнего уровня просто укажите make путь к имени модуля или каталогу модуля, например:
make drivers/net/can/usb/peak_usb/
или для более простого примера (драйвер Intel e1000 Ethernet):
make drivers/net/ethernet/intel/e1000/e1000.ko
Просто: (этот пример иллюстрирует драйвер ft1000, это может занять несколько минут, если не мгновение)
cd /usr/src/kernel-sources
make SUBDIRS=drivers/staging/ft1000/ft1000-usb modules
# Enable the ft1000 module: CONFIG_FT1000=m on the config with
make xconfig # or "make menuconfig" then save
make prepare
make modules_prepare
make SUBDIRS=scripts/mod
make SUBDIRS=drivers/staging/ft1000/ft1000-usb modules
make SUBDIRS=drivers/staging/ft1000/ft1000-usb modules_install
Затем вы можете загрузить модуль с modprobe
после depmod
Примечание: в зависимости от зависимости от модуля вам может потребоваться полностью перестроить ядро
Чтобы собрать окончательные образы модулей в каталоге, вы можете использовать
M=
аргумент для вашей команды:сделать M=драйверы/usb/серийный
Это создаст все необходимые файлы в этом каталоге и свяжет окончательные образы модулей.
Чтобы построить только определенный файл в дереве ядра, просто передайте его в качестве аргумента
make
:сделай драйверы/usb/serial/visor.ko
Система сборки соберет все необходимые файлы для модуля ядра visor.ko и сделает последнюю ссылку для создания модуля.