▶ Kompilace jádra - podrobný návod [Aktualizováno]

Založil Roman Horník, 21. 08. 2010, 00:53:05

Předchozí téma - Další téma

Domi

Citace od: Domi kdy 24. 09. 2010, 19:11:46
Odklikal, zkompiloval, nainstaloval.... A ejhle chybka (jak necekane   :D)

Kernel panic - not syncing: VFS: Unable to mount root fs.....

Tak kdo poradi, kde jsem udelal chybu? Kompiloval jsem celkem 3x. Poprve jsem to prolezl poradne, podruhe jsem to projel rychle a potreti vyhazel opravdu minimum.

Kdyz zadam: cat /boot/grub/menu.lst
...
title    Debian GNU/Linux, kernel 2.6.35.4-1
root     (hd0,0)
kernel   /boot/vmlinuz-2.6.35.4-1 root=/dev/sda1 ro quiet

a kdyz to porovnam s tim puvodnim, na kterem normalne bezim, tak tam chybi radek
initrd   /boot/initrd.img-2.6.26-2-amd64


reseni:
     mkinitramfs -o /boot/initrd.img-2.6.35.4-1 2.6.35.4-1
     update-grub

Magog

Pěkně děkuji za velice povedený návod. Už jedu na svém kernelu. Na druhý pokus funkční a menší, než ten tovární. A první pokus by byl asi taky funkční, ale ne o tolik menší.

Ota Trkola

Tak jsem asi exotický úkaz, ale ani 2.6.36 mi nefunguje. Stále praděpodobně jakýsi problém s ovladačem GK. Nicméně tovární 2.6.36-trunk-686 z experimental mi jede, tak alespoň tak.

Xgamer

Super návod :), vďaka nemu som sa naučil kompilovať kernel..:)

Chcem sa spýtať ešte čo je možne zakompilovať priamo do kernelu a čo ako moduly? Ide mi napr. o ovládače grafickej,sietovej karty. O wifi som sa dočital že je to lepšie kompilovať ako modul.
Scio me nihil scire.

poky74

Tak dá se cokoli jakkoli, pokud tam je ta možnost. Ale platí že je lepší zakompilovávat přímo do jádra, avšak věci s kterými by mohly být problémy (například třeba ta wifi bluetooth atd..) můžou zamrznout a v tu chvíli je dobré mít je jako moduly, jelikož můžeš odmodprobnout a znovu modprobnout a tím se vyhnout restartu ;-)

Drát

#50
Nevim jak se mi to povedlo, stáhnu kernel, rozbalim (do svýho domovskýho adresáře), zkompiluju v pohodě.....ale chci ho zkompilovat znova s malou obměnou a skončim na chybě:

make[1]: *** [drivers] Error 2
make[1]: Leaving directory `/home/dreit/linux-2.6.39.2'
make: *** [debian/stamp/build/kernel] Error 2


Nakonec jsem smazal adresář, rozbalil tam kernel znova...a pořád nejde. Neporadí někdo jak to nakopat takovým způsobem, aby to fungovalo správně?
Stejná chyba se mi ukazovala i když jsem kompiloval podle jinačí postupu, jen s tim rozdílem, že tam se nepovedla ani první kompilace, tady aspoň ta první.


Pokrok:
====== making target debian/stamp/build/kernel [new prereqs: vars]======
This is kernel package version 12.036+nmu1.
The changelog says we are creating 2.6.39.2-1
However, I thought the version is 2.6.39.2
exit 1
make: *** [debian/stamp/build/kernel] Error 1

vojtam

Ahoj když jsem chtěl kompilovat znova s malou obměnou tak jsem většinou dopadnul úplně stejně nebo s chybou že soubory byly upravovány v budoucnu (čas byl OK).
Takže buď zkus make clean a nebo jsem to dělal tak, že jsem .config soubor vytáhnul adresář smazal, jádro znovu rozbalil nakopíroval .config a spustil make oldconfig a pak spustil kompilaci a jel jsem (pokud by to byla i stejná verze jádra je myslím ten make-clean zbytečný)...

Drát

#52
Něco s tim zatím bez úspěchu zkoušim

  CC [M]  fs/ext3/ioctl.o
  CC [M]  fs/ext3/namei.o
  CC [M]  fs/ext3/super.o
  CC [M]  fs/ext3/symlink.o
  CC [M]  fs/ext3/hash.o
In file included from include/linux/pagemap.h:7:0,
                 from include/linux/buffer_head.h:13,
                 from include/linux/jbd.h:27,
                 from fs/ext3/hash.c:13:
include/linux/mm.h:1243:1: internal compiler error: Neoprávněný přístup do paměti (SIGSEGV)
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-4.6/README.Bugs> for instructions.
make[3]: *** [fs/ext3/hash.o] Error 1
make[2]: *** [fs/ext3] Error 2
make[1]: *** [fs] Error 2
make[1]: Leaving directory `/home/dreit/kernel/linux-2.6.39.2'
make: *** [debian/stamp/build/kernel] Error 2



Update:

Tak teď to zase háže něco jinýho
  CC      drivers/acpi/acpica/nsnames.o
  CC      drivers/acpi/acpica/nsutils.o
  CC      drivers/acpi/acpica/nsxfname.o
In file included from /home/dreit/kernel/linux-2.6.39.2/arch/x86/include/asm/apic.h:483:0,
                 from /home/dreit/kernel/linux-2.6.39.2/arch/x86/include/asm/smp.h:13,
                 from /home/dreit/kernel/linux-2.6.39.2/arch/x86/include/asm/mmzone_64.h:12,
                 from /home/dreit/kernel/linux-2.6.39.2/arch/x86/include/asm/mmzone.h:4,
                 from include/linux/mmzone.h:792,
                 from include/linux/gfp.h:4,
                 from include/linux/kmod.h:22,
                 from include/linux/module.h:13,
                 from include/acpi/platform/aclinux.h:58,
                 from include/acpi/platform/acenv.h:141,
                 from include/acpi/acpi.h:56,
                 from drivers/acpi/acpica/nsxfname.c:45:
/home/dreit/kernel/linux-2.6.39.2/arch/x86/include/asm/smp.h:1:0: internal compiler error: Neoprávněný přístup do paměti (SIGSEGV)
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-4.6/README.Bugs> for instructions.
make[4]: *** [drivers/acpi/acpica/nsxfname.o] Error 1
make[3]: *** [drivers/acpi/acpica] Error 2
make[2]: *** [drivers/acpi] Error 2
make[1]: *** [drivers] Error 2
make[1]: Leaving directory `/home/dreit/kernel/linux-2.6.39.2'
make: *** [debian/stamp/build/kernel] Error 2


Chyba bude někde mezi klávesnicí a židlí, ale nějak nechápu co s tim. Nevýhoda softwaru je ta, že do něj nejde kopnout :D


Update2:

Takže to s tim přístupem do paměti dělá naprosto náhodně. Jestli se ale nepletu, tak ovladač od nVidie vyžaduje gcc 4.6  (taknějak to aspoň vyznělo)

vojtam

Ahoj není možné že je problém pod stolem (tedy v PC) neoprávněný přístup do paměti mi v životě ještě jádro nehodilo...
A pokud to dělá naprosto náhodně, je jistě něco špatně...
Nemůžeš zkusit zkompilovat jádro na jiném stroji?
A jenom pro info kompiluješ ho pomocí make-kpkg ??

Drát

#54
Tak pravda, hardwarově to asi nemám úplně OK, řešil jsem to tady a něco se tam asi opravdu šeredně podělalo.
Rozhodně disk (umřel) jsem vyměnil, RAM jsou v pořádku....a jinde snad už cache není, takže to vypadá opravdu na smrt CPU cache. Ono když Debian nepadá tak člověk zapomene že měl kdy problémy s HW.....dík moc za připomenutí, určitě to bude tím!  ;)
[nakonec jsem zjistil že deska pouštěla do CPU větší napětí než měla]

Zkusim to na jinačim stroji.

make-kpkg samozřejmě :)


btw - čistě teoreticky, když to vyhodí chybu a já to pustim znova, zkompiluje se část kde to spadlo znova, nebo ji to přeskočí a zůstane tam zkompilovaná špatně?

Takhle to dopadá když si sedne lama k Debianu, přiznávám to a kňučim v rohu (fakt jsem si na ty chyby cache moh vzpomenout).

vojtam

To nic, hlavně že jsme to vyřešili :)
Taky HW chyba je to poslední co by člověka napadlo.

Teoreticky když to začneš kompilovat znovu mělo by se to celé překompilovat (ale myslím že se to možná kompuluje od poslední úspěšně zkompilované části.

Pak dej vedět, jak to dopadlo...
Kdyžtak zbytek vyřešíme..

Drát

U bráchy to funguje (zato mu nejdou jinačí věci ;D ), takže asi opravdu HW. Ale něco mě napadlo - nastavit cyklus co se bude opakovat dokud se v adresáři neobjeví balíčky s jádrem (jentak ze srandy jsem to zacyklil a sledoval, po chvíli a pár pípnutích PC speakeru při přerušení mi to opravdu vyplivlo balíčky...otázka je, jestli v nich nejsou chyby díky tomu přerušování).

Ota Trkola

Soudruzi, krapet to tady oživíme, když Roman celý návod zaktualizoval.

Mám dotaz. Zkompiloval jsem kernel 3.2.7 za použití distribučního konfiguráku s tím, že jsem vyhodil kernel debuging a virtualizaci. Vše proběhlo hladce, ale mám problém s kompilací wl modulu (broadcom-sta) pro Broadcom wifi. Po zadání # m-a a-i broadcom-sta to po chvíli ukončí chyba /usr/src/linux-headers-3.2.7-1/arch/x86/Makefile_32.cpu: Adresář nebo soubor neexistuje. Pokud by někdo věděl, jak tomu pomoci, ocenil bych to.

jiri

Zdravim, osobně se přikláním ke kompilaci pomocí make-kpkg --initrd --revision=2 --append-to-version=-mojejadro kernel_image
po tom, co jsem rozbalil kernel a z adresáře /boot/   zkopíroval "config" soubor do adresáře jádra, přejmenoval na ".config" spustil "make xconfig" a dal uložit. Toto fungovalo avšak s příchodem jádra řady 3.x musim vynechat volbu "lguest" (podle kompilátoru ve složce "Documentation" chybí nějaké soubory pro  "lguest") a teprve pote to funguje. Proto bych se rád zeptal, jestli o tom někdo neví něco víc. Např. jak to upravit, aby to šlo sestavit i s touto volbou. Předem děkuji Jirka

vprint

Jestli můžu, chtěl bych poradit. Jsem takovej lama, ale linux mě pořád víc a víc vtahuje, nejvíc mě nad vodou drží překlad slova Error - jseš blb. Jinak bych už to dávno vzdal.
Chtěl bych si zkompilovat jádro, mám server na specifikovanou věc, a běží to na Atomu 525, deska Mount Washington, 32GB SSD, 2MBRAM
Jelikož vím, že v jádru je neskutečná hromada zbytečností, chtěl bych je nějak obrousit, a hlavně vyhodit cosi jako exim4, má to něco s mailama, ale ty tam nepotřebuju. Běží mě to jenom v řádku, řídím to - jestli se to tak dá říct a neřídí to naopak mě - přes SSH přístup v lokálce.
A teď co mě trápí.  Nevím, jak bych vrátil zpátky instalaci zkompilovaného jádra, pokud to vůbec jde a já to svedu. Mám blbou mánii, nedělat nic, když nevim jak z toho ven.