Kompilace modulu pro více jader

Kompilace modulu pro více jader
« kdy: 06. 09. 2012, 10:23:40 »
Na čem závisí kompatibilita kernelového modulu s konkrétním kernelem. Našel jsem toto:
* Architektura procesoru (asi se rozlišují i podarchitektury, u Gentoo si vzpomínám, že asi po změně z x86_64 na Core2 jsem musel moduly překompilovat)
* Typ a případně verze použitého kompilátoru, např. GCC (upgrade GCC pamatuju z Gentoo)
* Verze kernelu (někde jsem dohledal)
Patří sem ještě něco?

Samozřejmostí je podpora modulů a případné závislosti, to teď neřeším.

Cílem je zkompilovat moduly pro větší množství Androidích telefonů. Je to reálné?
« Poslední změna: 06. 09. 2012, 16:41:39 od Petr Krčmář »


Pavouk106

  • *****
  • 2 395
    • Zobrazit profil
    • Můj blog
    • E-mail
Re:Kompilace modulu pro spektrum jader
« Odpověď #1 kdy: 06. 09. 2012, 15:13:15 »
Je to z mojí strany jen dohad, ale i tak si myslím, že na druhém bodě to až tak nestojí. A i podarchitektura se dá podlě mě nahradit nějakým generic. Když už je pak nějaká konkrétně vybraná, může to na ní být jen optimalizováno, ale měla by vždy být i nějaká generic, která pojede (ne až tak optimalizovaně) na čemkoliv (z dané architektury).

Na verzi kernelu to bude posle mě stát dost pevně a to by mohl být problém. Asi bude taky záležet na čem to budeš stavět - přece jen je v kernelu hafo věcí, který se už nemění a pojedou v různých verzích kernelu stejně...

Vše jsou jen nepodložený věci, je to prostě jen můj názor/pohled na věc.

V.

Re:Kompilace modulu pro spektrum jader
« Odpověď #2 kdy: 06. 09. 2012, 15:38:11 »
Ohledně gentoo ... nastavení procesoru = optimalizace se dělá definicí hodnoty CFLAGS (v man:gcc je to vypsáno u -mtune).
Víc nebudu hádat, počkam si na odpovědi zkušenějších.

Re:Kompilace modulu pro více jader
« Odpověď #3 kdy: 06. 09. 2012, 19:21:33 »
U Gentoo jsem kdysi změnil jen config a moduly nejely. Byly potřeba zkompilovat znovu. Nevím, jestli to bylo změnou a amd64 na core2, ale dělal jsem to zhruba tehdy. Což by ale asi znamenalo, že bych musel řešit všecny podarchitektury. Pokud ne, budu rád.

Pavouk106

  • *****
  • 2 395
    • Zobrazit profil
    • Můj blog
    • E-mail
Re:Kompilace modulu pro více jader
« Odpověď #4 kdy: 07. 09. 2012, 11:49:51 »
U Gentoo mi nejedou moduly jen pokud je nepřekompiluju po změně verze jádra. Prostě když přecházím na novější jádro. Samozřejmě taky nepojedou, pokud jsou odminula závislé na něčem, co v jádře už není (klidně i ve stejné verzi jádra)...


RDa

Re:Kompilace modulu pro více jader
« Odpověď #5 kdy: 07. 09. 2012, 12:39:01 »
Kdyz uz sem tahate to Gentoo - tak nastaveni z make.conf se neaplikuje na kompilaci jadra:

Citace
# Genkernel uses an independent configuration for MAKEOPTS, and does not source
# /etc/make.conf . You can override the default setting by uncommenting and
# tweaking the following line. Default setting is set up by
# ${GK_SHARE}/${ARCH_OVERRIDE}/config.sh . The recommended value for -j
# argument is: <number of processors>*<number of cores per processor>+1
#MAKEOPTS="-j2"

A pro puvodniho tazatele - urcity kernel vezme jen urcite moduly - a to zda je to kompatibilni se urcuje dle version magic:

Kód: [Vybrat]
$ strings /lib/modules/3.4.4-gentoo/kernel/crypto/aes_generic.ko | grep vermagic
vermagic=3.4.4-gentoo SMP preempt mod_unload CORE2

Nekolikrat se me stalo ze jsem musel prepsat verzi jadra - pak se modul natahne. Pokud ale vyvojari udelali zmenu v ABI, tak je mozne ze funkce ktere byly predtim dostupne jiz dostupne nejsou a modprobe/insmod nahlasi ze to nejde zlinkovat - modul se nenatahne. Horsi je kdyz se zmenil jen vyznam argumentu funkci - to pak muzete brzo cekat segfault (v lepsim pripade) nebo kernel panic.

Re:Kompilace modulu pro více jader
« Odpověď #6 kdy: 07. 09. 2012, 12:46:46 »
Takže teoreticky asi bude bezpečné, když budu kontrolovat verzi kernelu a obecnou architekturu (např. použiju ARMv6 pro ARMv6 a novější)?

S vecpáním problém asi nebude. Kdybych měl modprobe, bylo by tu --force. Když mám jen insmod, pomůže tento trik: http://linux.derkeiler.com/Mailing-Lists/Kernel/2007-02/msg03381.html

Pavouk106

  • *****
  • 2 395
    • Zobrazit profil
    • Můj blog
    • E-mail
Re:Kompilace modulu pro více jader
« Odpověď #7 kdy: 07. 09. 2012, 13:02:59 »
Do technických věcí (druhá část příspěvku) nemůžu mluvit, to jde už mimo.

S tou verzí bych to tak viděl. Co pojede na ARMv6, čekal bych, že pojede i na ARMv8 a dál. Vždyť dodnes spousta balíků v Linuxu nese přívlastek i386, proč asi? :-)

Sám jsem Gentoo (brutálně optimalizované na 32-bit Intel a konkrétní HW) nabootoval i na AMD 64-bit mašině. Stačilo mu říct, že bude generic CPU, překompilovat jádro a nazdar - jelo to. Samozřejmě to dál byl 32bit systém (64-bit CPU nemá s exekucí 32-bit kódu problém) a přišel i o výhody optimalizace (pokud nějaké praktické byly), ale v nouzi to prostě fungovalo. Balíky jsem nepřekompilovával, pouze jádro a v něm i důležité ovladače (síťovka, zvukovka, grafika, ...).

Trident

Re:Kompilace modulu pro více jader
« Odpověď #8 kdy: 07. 09. 2012, 14:02:15 »
Na čem závisí kompatibilita kernelového modulu s konkrétním kernelem. Našel jsem toto:
* Architektura procesoru (asi se rozlišují i podarchitektury, u Gentoo si vzpomínám, že asi po změně z x86_64 na Core2 jsem musel moduly překompilovat)
* Typ a případně verze použitého kompilátoru, např. GCC (upgrade GCC pamatuju z Gentoo)
* Verze kernelu (někde jsem dohledal)
Patří sem ještě něco?

Samozřejmostí je podpora modulů a případné závislosti, to teď neřeším.

Cílem je zkompilovat moduly pro větší množství Androidích telefonů. Je to reálné?

Primarnim duvodem ktery cekam ze tu zazni ale nezaznel je casto se menici ABI.
Linux NEMA STABILNI ABI ani API!  A proto i mezi minor verzemi jadra se modul nemusi jit natahnout. Proto k stoprocentni funkcnosti je nutne modul vzdy prekompilovat proti jadru ktere s nim chceme pouzit. Casto je treba upravovat i zdrojaky modulu protoze se meni i struktury prave kvuli API ktere taky neni pevne.
Verze jadra a verze obsazena v modulu se musi shodovat jinak nedojde natazeni. Da se to zamozrejmne u insmodu obejit parametrem "-f" a obcas to u jednoduchych modulu jistou dobu nez dojde k zasadnejsi zmene ABI funguje.

Jeden modul na spoustu androidu je proto kravovina.

BTW: Proc myslite ze se pri instalaci noveho jadra vzdycky musi vyrobit novy kernel modul pro nvidia drivery,virtualbox,vmware a dalsi.

Re:Kompilace modulu pro více jader
« Odpověď #9 kdy: 07. 09. 2012, 14:06:30 »
Právě proto bych řešil různé verze.

Trident

Re:Kompilace modulu pro více jader
« Odpověď #10 kdy: 07. 09. 2012, 14:07:38 »
Takže teoreticky asi bude bezpečné, když budu kontrolovat verzi kernelu a obecnou architekturu (např. použiju ARMv6 pro ARMv6 a novější)?

S vecpáním problém asi nebude. Kdybych měl modprobe, bylo by tu --force. Když mám jen insmod, pomůže tento trik: http://linux.derkeiler.com/Mailing-Lists/Kernel/2007-02/msg03381.html

Ta obezlicka tu je a dokonce se da checkovani vyhodit uz pri configu jadra, ale vrazdil bych za ni. Neni to systemove a je to spinavy hotfix v pripade nejvyssi nouze pred finalnim resenim. Meli jsme tu takoveho kolegu ktery takto "latal" nekolik stabilni releasu naseho image pro jedno embedded zarizeni.