Як створити єдиний модуль ядра дерева?


37

У 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)


будь ласка, закрийте як дублікат 14627. Відповідь користувача "Radu C" відповідає на питання.
маб

Ви пробували depmod -aраніше modbrobe?
Надя

1
розгляньте і наступну статтю: stackoverflow.com/questions/8744087/…
Олег Кокорін

Відповіді:


38

У мене була така ж проблема. Я припускаю, що вам потрібно скопіювати не лише .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

4
Я не впевнений, чи SUBDIRS все-таки правильний. Для мене це було проігноровано. Прочитавши kernel.org/doc/Documentation/kbuild/modules.txt, я спробував використовувати, make M=/path/to/moduleщо, здавалося, працює.
шкідливий

Я намагаюся змінити інший модуль (це просто додавання USB-ідентифікатора до існуючого модуля), коли я компілюю його, я не отримую помилок, але коли я вставляю, я отримую неправильний формат модуля, чому ?!
Зібрі

14

У вихідному каталозі верхнього рівня просто дайте зробити шлях до імені модуля або до каталогу модуля, наприклад:

make drivers/net/can/usb/peak_usb/

або для більш простого прикладу (драйвер Ethernet Intel e1000):

make drivers/net/ethernet/intel/e1000/e1000.ko

Просто роби: make drivers/net/can/usb/peak_usb/pcan_usb.koбудував лише pcan_usb.o. Doing make 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також.
останнє

Я запускаю упаковане ядро. Складання повного ядра працює. але я намагаюся не збирати повне ядро, а лише конкретний модуль ядра. Чи є цільова мета, яка "готує" компіляцію одного модуля? modprobe показує ту ж помилку.
маб

6
Відповідно до stackoverflow ви можете просто скористатися make modules SUBDIRS=drivers/net/can/usb/peak_usbбудь-яким іншим підкаталогом. Тут прекрасно працює.
Тревіньо

0

Настільки ж просто: (цей приклад ілюструє драйвер 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

Примітка: залежно від залежності модуля вам може знадобитися повністю відновити ядро

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.