Zkompilování pouze kernel modules

Zkompilování pouze kernel modules
« kdy: 18. 11. 2020, 11:46:15 »
Netušíte, jak si ze zdrojáků kernelu zkompiluji pouze modules a modules-extra?
U příkazu 'fakeroot debian/rules binary-modules' to vypíše, že pro to neexistuje žádné pravidlo a 'fakeroot debian/rules binary-generic' trvá hodně dlouho.


RDa

  • *****
  • 2 461
    • Zobrazit profil
    • E-mail
Re:Zkompilování pouze kernel modules
« Odpověď #1 kdy: 18. 11. 2020, 12:00:06 »
A klasicky rucni pristup nefunguje?
Kód: [Vybrat]
cd /usr/src/linux
make modules
sudo make modules_install

Re:Zkompilování pouze kernel modules
« Odpověď #2 kdy: 18. 11. 2020, 14:29:56 »
Dík, to funguje, ale ta doba kompilace je o hodně delší, než úplně celého jádra pomocí toho fakeroot, který to nakonec vše zabalí do *.deb. 
Kdybych chtěl zkompilovat jenom atheros wireless ovladače, které jsem si před tím patchnul, tak by to šlo také specifikovat?
Když totiž vjedu do drivers/net/wireless/ath, tak tam sice soubor Makefile je, ale když dám make, tak se nic nestane a stahovat všechny atheros ovladače z gitu, které mají 2.5 GB, by byl opruz.

flack

Re:Zkompilování pouze kernel modules
« Odpověď #3 kdy: 18. 11. 2020, 21:39:20 »
Ahoj ked vravis o tej rychlosti. Napada ma a kompiloval si to paralerne na vsetkych jadrach?
parameter pre make   -j(number of cores+1) a este si pamatam ze som pridaval parameter -O2

A ohladom toho ci ide iba jeden modul. Skus mrknut sem
https://yoursunny.com/t/2018/one-kernel-module/ 

Re:Zkompilování pouze kernel modules
« Odpověď #4 kdy: 18. 11. 2020, 23:09:20 »
Děkuji moc, to kompilování je aspoň o polovinu rychlejší.
Když nakopíruji ten přejmenovaný .config a Module.symvers do drivers/net/wireless/ath, tak stejně v tom adresáři je Makefile, ve kterém není vše potřebné, protože má jen 542 bajtů, tím pádem žádný make neprojde.


Re:Zkompilování pouze kernel modules
« Odpověď #5 kdy: 18. 11. 2020, 23:44:31 »
Našel jsem, že by to mohlo být tohle
Kód: [Vybrat]
make modules SUBDIRS=drivers/net/wireless/athale zkompilovalo se (velmi rychle) těhle 13 modulů
Citace
  LD [M]  drivers/thermal/intel/x86_pkg_temp_thermal.ko
  LD [M]  fs/efivarfs/efivarfs.ko
  LD [M]  net/ipv4/netfilter/iptable_nat.ko
  LD [M]  net/ipv4/netfilter/nf_log_arp.ko
  LD [M]  net/ipv4/netfilter/nf_log_ipv4.ko
  LD [M]  net/ipv6/netfilter/nf_log_ipv6.ko
  LD [M]  net/netfilter/nf_log_common.ko
  LD [M]  net/netfilter/xt_LOG.ko
  LD [M]  net/netfilter/xt_MASQUERADE.ko
  LD [M]  net/netfilter/xt_addrtype.ko
  LD [M]  net/netfilter/xt_mark.ko
  LD [M]  net/netfilter/xt_nat.ko
  LD [M]  ubuntu/xr-usb-serial/xr_usb_serial_common.ko
což nechápu.

RDa

  • *****
  • 2 461
    • Zobrazit profil
    • E-mail
Re:Zkompilování pouze kernel modules
« Odpověď #6 kdy: 19. 11. 2020, 09:48:24 »
Našel jsem, že by to mohlo být tohle
Kód: [Vybrat]
make modules SUBDIRS=drivers/net/wireless/athale zkompilovalo se (velmi rychle) těhle 13 modulů
Citace
  LD [M]  drivers/thermal/intel/x86_pkg_temp_thermal.ko
  LD [M]  fs/efivarfs/efivarfs.ko
  LD [M]  net/ipv4/netfilter/iptable_nat.ko
  LD [M]  net/ipv4/netfilter/nf_log_arp.ko
  LD [M]  net/ipv4/netfilter/nf_log_ipv4.ko
  LD [M]  net/ipv6/netfilter/nf_log_ipv6.ko
  LD [M]  net/netfilter/nf_log_common.ko
  LD [M]  net/netfilter/xt_LOG.ko
  LD [M]  net/netfilter/xt_MASQUERADE.ko
  LD [M]  net/netfilter/xt_addrtype.ko
  LD [M]  net/netfilter/xt_mark.ko
  LD [M]  net/netfilter/xt_nat.ko
  LD [M]  ubuntu/xr-usb-serial/xr_usb_serial_common.ko
což nechápu.

Podle vypisu se v tomto momente nekompiluje, jen linkuje jiz prelozena cast (by se prekladala znova pokud zmenite drasticky .config, nebo verzi prekladace/stroj kde to delate, nebo udelate make clean).

Pokud to chcete pouzit, tak je potreba pak nejak dostat tyto .ko do zive instalace (v /lib/modules/VERZE/cesta...) a jeste pustit na ten adresar prikaz depmod s nejakymi parametry.

Ohledne .config - pokud pouzivate nejake hotove binarni jadro a jen stahnete zdrojaky kernelu stejne verze, tak ten config lze rozbalit z /proc/config.gz

Re:Zkompilování pouze kernel modules
« Odpověď #7 kdy: 19. 11. 2020, 10:06:08 »
Chtěl bych jen zkompilovat atheros ovladače, depmod znám a vím že musím ovladač odebrat 'modprobe -r', nahradit .ko, použít 'depmod -a' a nahodit přes 'modprobe'.
Ono v tom /usr/src/ mi to ani zkompilovat nejde, vyhazuje to chyby. Mám Ubuntu 18.04 HWE, takže si stáhnu zdrojáky ručně, rozbalím pomocí 'dpkg-source -x *.dsc', použiji patch, vytvořím si .config 'make oldconfig' a chtěl bych jenom zkompilovat zmíněné ovladače.
Někde jsem objevil ještě tohle
Citace
make oldconfig
make prepare
make modules_prepare
make modules SUBDIRS=scripts
make modules SUBDIRS=scripts/mod
make modules SUBDIRS=drivers/net/wireless/ath
ale to také nepomáhá a zkompiluje to těch 13 modulů, které jsem již zmínil.

Re:Zkompilování pouze kernel modules
« Odpověď #8 kdy: 19. 11. 2020, 10:08:52 »
Ohledne .config - pokud pouzivate nejake hotove binarni jadro a jen stahnete zdrojaky kernelu stejne verze, tak ten config lze rozbalit z /proc/config.gz

Tohle vyžaduje zapnutý příslušný konfig. Ubuntu (20.04) jej má vypnutý, ale zase ukládá config do /boot/config-xxx.

Re:Zkompilování pouze kernel modules
« Odpověď #9 kdy: 22. 11. 2020, 14:04:10 »
Zkusím to shrnout, je to přibližná směska všeho, co tu zaznělo, takže všem zůčastněným děkuji.
Po stažení zdrojáků a rozbalení 'dpkg-source -x *.dsc', jdou (pouze) atheros ovladače zkompilovat takhle:
Kód: [Vybrat]
make clean && make mrproper
cp /lib/modules/$(uname -r)/build/Module.symvers ./
cp /boot/config-$(uname -r) ./.config
make oldconfig && make prepare
make scripts 
make M=drivers/net/wireless/ath -j 4

Re:Zkompilování pouze kernel modules
« Odpověď #10 kdy: 23. 11. 2020, 17:12:39 »
Tak jsem to zkoušel naostro, ale spuštění toho ovladače kolabuje
Citace
modprobe: ERROR: could not insert 'ath': Exec format error

Když vezmu ath.ko ze zkompilovaného .deb, tak má 37kB a ten nynější má 3,3MB. Jsem z toho pako, proč to nejde zkompilovat tou přímou metodou.

RDa

  • *****
  • 2 461
    • Zobrazit profil
    • E-mail
Re:Zkompilování pouze kernel modules
« Odpověď #11 kdy: 23. 11. 2020, 18:09:17 »
Tak jsem to zkoušel naostro, ale spuštění toho ovladače kolabuje
Citace
modprobe: ERROR: could not insert 'ath': Exec format error

Když vezmu ath.ko ze zkompilovaného .deb, tak má 37kB a ten nynější má 3,3MB. Jsem z toho pako, proč to nejde zkompilovat tou přímou metodou.

co vypise file SOUBOR - na stary a novy zpusob pripravy?

Re:Zkompilování pouze kernel modules
« Odpověď #12 kdy: 23. 11. 2020, 22:28:18 »
Netuším, co je myšleno výpisem file SOUBORu?
V dmesg mám tohle:
Citace
ath: version magic '5.4.65 SMP mod_unload ' should be '5.4.0-54-generic SMP mod_unload '
Zdrojáky používám stále stejné, ze kterých po zkompilování celého jádra do .deb vše funguje, ale na to používám tohle:
Kód: [Vybrat]
fakeroot debian/rules clean
fakeroot debian/rules binary-generic

Re:Zkompilování pouze kernel modules
« Odpověď #13 kdy: 24. 11. 2020, 09:08:05 »
Když ten svůj návod okleštím na tohle, tak to projde, ale výsledek je stejný.
Kód: [Vybrat]
make clean && make mrproper
make oldconfig && make prepare
make M=drivers/net/wireless/ath -j 4