Jak zbudować pojedynczy moduł jądra w drzewie?


37

Linux-source -... ma moduł, który jest wyłączony w config /boot/config-3.4-trunk-686-pae, więc nie jest częścią linux-image -... (To jest na Debianie, ale rozwiązanie powinno być takie samo dla Ubuntu lub?), np

# CONFIG_CAN_PEAK_USB is not set

Jak skompilować tylko ten moduł jądra, aby można go było używać z rozproszonym jądrem?

Odpowiedni pakiet linux-source -... jest już zainstalowany, nieskompresowany i połączony z / usr / src / linux. /boot/config-3.4-trunk-686-pae jest kopiowany do /usr/src/linux/.config i modyfikowany za pomocą

CONFIG_CAN_PEAK_USB=m

Z

make
make modules

możliwe jest skompilowanie jądra i wszystkich modułów. Ale jak skompilować tylko ten konkretny pojedynczy moduł?

(Uwaga: również potrzeby jądra zostać skompilowane wcześniej, w przeciwnym razie pojawia się następujący błąd: no symbol version for module_layout)


proszę zamknąć jako duplikat 14627. odpowiedź użytkownika „Radu C” odpowiada na pytanie.
— mab

Próbowałeś depmod -awcześniej modbrobe?
— Nadia

1
rozważ również następujący artykuł: stackoverflow.com/questions/8744087/…
— Oleg Kokorin

Odpowiedzi:


38

Miałem ten sam problem. Zakładam, że musisz nie tylko skopiować .config, ale także Module.symvers

moje kroki w celu skompilowania modułu ft1000 (z systemem Debian Wheeze 7.1.0; jądro 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
Nie jestem pewien, czy SUBDIRS jest nadal poprawny. Zostało to dla mnie zignorowane. Po przeczytaniu kernel.org/doc/Documentation/kbuild/modules.txt spróbowałem użyć tego, make M=/path/to/moduleco wydawało się działać.
— harmic

Próbuję zmodyfikować inny moduł (po prostu dodajeam identyfikator USB do istniejącego modułu) podczas jego kompilacji nie otrzymuję żadnych błędów, ale po wstawieniu otrzymuję nieprawidłowy format modułu, dlaczego ?!
— Zibri

14

Z poziomu katalogu źródłowego najwyższego poziomu po prostu podaj ścieżkę do nazwy modułu lub katalogu modułu, np .:

make drivers/net/can/usb/peak_usb/

lub dla prostszego przykładu (sterownik Intel e1000 Ethernet):

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

Po prostu robię: make drivers/net/can/usb/peak_usb/pcan_usb.kozbudowałem tylko pcan_usb.o. Robi make drivers/net/can/usb/peak_usb/ && make drivers/net/can/usb/peak_usb/pcan_usb.koto kompiluje, ale insmod narzeka 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
— mab

Czy używasz tego konkretnego jądra i czy już raz go skompilowałeś? Spróbuj modproberównież z .
— ish

Używam spakowanego jądra. Kompilacja kompletnych jąder działa. ale staram się nie kompilować całego jądra, tylko konkretny moduł jądra. Czy istnieje cel make, który „przygotowuje” kompilację z pojedynczym modułem? Modprobe pokazuje ten sam błąd.
— mab

6
Według stackoverflow możesz po prostu użyć make modules SUBDIRS=drivers/net/can/usb/peak_usbdowolnego innego podkatalogu. Tutaj działa dobrze.
— Treviño

0

Tak proste jak: (ten przykład ilustruje sterownik ft1000, powinno to zająć tylko kilka minut, jeśli nie wystąpi natychmiast)

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

Następnie możesz załadować moduł modprobepodepmod

Uwaga: w zależności od zależności modułu może być konieczne całkowite przebudowanie jądra

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.