Tek bir ağaç içi çekirdek modülünü nasıl oluşturabilirim?


36

Linux-source -..., config /boot/config-3.4-trunk-686-pae dosyasında devre dışı bırakılmış bir modül içerir, böylece linux-image -...'nin bir parçası olmaz. (Bu Debian'da çözüm Ubuntu için aynı olmalı mı?

# CONFIG_CAN_PEAK_USB is not set

Kişi nasıl dağıtılmış çekirdekle kullanılabilsin diye sadece çekirdek modülünü derleyecekti?

İlgili linux-source -... paketi zaten kurulmuş, sıkıştırılmamış ve / usr / src / linux ile bağlantılı. /boot/config-3.4-trunk-686-pae, /usr/src/linux/.config dosyasına kopyalanır ve

CONFIG_CAN_PEAK_USB=m

İle

make
make modules

Çekirdeği ve tüm modülleri derlemek mümkündür. Ancak, yalnızca bu belirli tek modülü nasıl derleyelim?

(Not: Ayrıca çekirdek ihtiyaçlarını önce derlenmiş olan, aksi takdirde aşağıdaki hatayı alıyorum: no symbol version for module_layout)


Lütfen 14627'nin kopyası olarak kapatın. Kullanıcının 'Radu C' cevabı soruyu cevaplar.
mab

Daha depmod -aönce denedin modbrobemi
Nadia

1
aşağıdaki makaleyi de göz önünde bulundurun: stackoverflow.com/questions/8744087/…
Oleg Kokorin

Yanıtlar:


37

Ben de aynı problemi yaşadım. Sadece .config dosyasını değil, Module.symvers dosyalarını da kopyalamanız gerektiğini varsayalım.

ft1000 modülünü derleme adımlarım (Debian Wheeze 7.1.0 çalıştıran; çekirdek 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'ın hala doğru olup olmadığından emin değilim. Benim için göz ardı edildi. Kernel.org/doc/Documentation/kbuild/modules.txt dosyasını okuduktan sonra make M=/path/to/moduleişe yaramış gibi kullanmaya çalıştım .
harmic 17:14

Derlediğimde farklı bir modülü değiştirmeye çalışıyorum (sadece varolan bir modüle bir USB kimliği ekliyor) hata alamıyorum ama eklediğimde geçersiz modül formatı alıyorum neden ?!
Zibri

13

En üst düzey kaynak dizini içinden, modül adına veya modül dizinine yol açmanız yeterlidir, örneğin:

make drivers/net/can/usb/peak_usb/

veya daha basit bir örnek için (Intel e1000 Ethernet sürücüsü):

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

Sadece yapıyorum: make drivers/net/can/usb/peak_usb/pcan_usb.kosadece pcan_usb.o dosyasını yaptım. Bunu yapmak make drivers/net/can/usb/peak_usb/ && make drivers/net/can/usb/peak_usb/pcan_usb.koderler, ancak insmod şikayetçi 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

Bu belirli çekirdeği mi işletiyorsunuz ve çekirdeği bir kez daha derlediniz mi? Lütfen modprobeayrıca dene .
imsi

Paketlenmiş çekirdeği çalıştırıyorum. Komple çekirdek eserlerin derlenmesi. ama tam çekirdeği, sadece belirli çekirdek modülünü derlemeye çalışmıyorum. Tek bir modül derlemesini 'hazırlayan' bir makyaj hedefi var mı? modprobe aynı hatayı gösterir.
mab

6
Stackoverflow'a göre sadece make modules SUBDIRS=drivers/net/can/usb/peak_usbveya başka bir subdir kullanabilirsiniz. Burada iyi çalışıyor.
Treviño

0

Şunlar kadar basit: (bu örnek ft1000 sürücüsünü gösterir, bunun için yerleşik değil ise sadece birkaç dakika alması gerekir)

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

Daha sonra birlikte modülü yükleyebilirsiniz modprobesonradepmod

Not: Modül bağımlılığına bağlı olarak, çekirdeği tamamen yeniden oluşturmanız gerekebilir

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.