Děvčátka a chlapci,
níže naleznete dostatečně podrobný návod, jak si zkompilovat vlastní jádro. Konfigurací a kompilací jádra lze do jisté míry měnit jeho vlastnosti, povolit funkce, které nejsou v distribučním jádru povoleny, upravit jejich chování a zakázat ty, které nepotřebujete, včetně stovek ovladačů, pro vás jistě zbytečných. Tak lze jádro výrazně zmenšit, aby mělo co nejmenší dopad na systémovou paměť, může mít například jen čtvrtinovou velikost oproti jádru distribučnímu, přičemž o nic nepřijdete, ba naopak, váš systém může být o něco svižnější. Navíc můžete mít nejnovější jádro, které se může dostat ve standardní konfiguraci do repozitáře systému až za dlouhé týdny, takže nemusíte čekat, až bude váš nový hardware podporován.
Nutno dodat, že se pravděpodobně málokomu může podařit korektně zkonfigurovat jádro napoprvé, zvláště, když je v něm provedena spousta zásahů, proto buďte velice trpěliví. Raději provádějte spoustu kompilací s malými a opatrnými modifikacemi, než jednu velkou, stačí jen malá chybička kvůli nepozornosti, jádro či systém pak nemusí fungovat správně.
Nainstalovaná jádra hned neodinstalovávejte, mějte v zásobě alespoň jedno funkční ze stejné verze, z nějž pak můžete nabootovat a použít jeho konfiguraci. To se hodí tehdy, když naposledy zkompilované jádro odmítá poslušnost, kdy vám nefunguje klávesnice, nebo když se vám rozblikají LEDky na klávesnici, znamenající tzv. kernel panic, nebo tehdy, když budete muset disk zapojit na jiném hardwaru, který osekané jádro podporovat téměř jistě nebude.
Po většinu času budete pracovat v terminálu (to je ta ošklivá věc s písmenky a blikající kostičkou), nebo v konzoli. Jakmile ho spustíte, mějte ho až do finální instalace stále otevřený.
Není to žádná hrůza, kdyby to bylo příliš složité, tak o tom nepíšu.
Příprava
Základní ingrediencí je nepochybně zdrojový kód jádra Linux. Jedná se (v případě verze 5.12.12) o 76227 souborů a složek (starší jádra mají zpravidla méně), především textových, úhledně zabalených v archívu, majících po rozbalení dohromady zhruba 800MiB a po zaneřádění kompilací kolem 4-5GiB, takže ujistěte se, že máte na konkrétním oddílu minimálně 5GiB volného místa.
Ten si stáhneme ze serveru kernel.org (http://www.kernel.org/), přičemž volíme raději stabilní jádro (v současnosti 5.12.12), s nestabilním občas mohou být problémy, nicméně to vůbec neznamená, že vždy a všude, takže se ho nebojte. Uložíme ho například na plochu, do domovské složky, nebo rovnou do /usr/src.
Protože budeme pracovat s právy roota (česky kořena), v terminálu přijmeme jeho identitu:
su -
Dále budeme potřebovat mít nainstalované dodatečné balíky, nainstalujeme si je pomocí:
apt install build-essential libncurses6 libncurses-dev cpp gcc libssl-dev libelf-dev bison flex
místo apt můžete použít aptitude, nebo apt-get (syntaxe je totožná).
Jdeme na to!
1. Rozbalíme si stažený archiv s jádrem. Předpokládejme, že je uložené na ploše (~/Desktop) a že je pro verzi 5.12.12, tedy že si nechá říkat linux-5.12.12.tar.xz.
Nejprve, jestliže jste tak dosud neučinili, si otevřeme terminál (gnome-terminal, xterm,...) a převtělíme se v roota:
su -
Poté přejdeme do složky, v níž chceme pracovat, například /usr/src (tam končí zdrojáky jádra stažené přes správce balíků), a rozbalíme do ní archív se zdrojáky jádra. Tato operace bude pár minut trvat, musí se extrahovat několik desítek tisíc souborů:
cd /usr/src
tar xf ~/Desktop/linux-5.12.12.tar.xz
Nyní potřebujeme konfiguraci aktuálně běžícího jádra. Nejdříve přejdeme do složky s rozbaleným jádrem:
cd linux-5.12.12
Použijeme konfiguraci jádra, na němž momentálně běžíme. Je to rozsáhlý textový soubor, bude uložen ve složce se zdrojáky pod názvem .config:
cp /boot/config-`uname -r` .config
Pochopitelně místo config-`uname -r` můžete použít název konfiguráku z jiného jádra, například config-4.15.0-1-amd64
Teď se pustíme do nejsložitější fáze, do konfigurace, kterou je možné přeskočit tehdy, kdy na konfiguraci jádra nic měnit nechcete, pouze toužíte po novější verzi jádra.
Chcete-li konfigurovat, maximalizujte si raději okno terminálu, poté můžete začít:
make menuconfig
Pokud vám nic nechybí, v okně terminálu uvidíte takové krásné menu na modrém pozadí, jinak, jestliže by vám něco chybělo, měla by se zobrazit chybová hláška, podle níž byste se měli řídit, jestliže ji nerozumíte, máme tady fórum :).
TIP!
Při štelování vám pomohou tyto příkazy, lsmod (seznam běžících modulů), dále potom lspci, lsusb, lshw... (seznam HW)
Ovládání pomocí kláves
↑/↓ Nahoru/dolu
Enter Zvolit
Y Povolit
N Zakázat
M Modul
Esc + Esc Konec
?, H Nápověda
/ Hledat
Stavy položek
[*] Napevno vestavěno
[M] Odnímatelný modul
[ ] Zakázáno
-?- Nelze změnit
[?] Pouze povoleno/zakázáno, nelze použít jako modul
<?> Povoleno, zakázáno i modul NEBO modul, zakázáno
{?} Pouze povoleno a modul
(ABC) Lze zadat hodnotu
---> Submenu
--- Prázdné submenu
TIP!
Položky označené jako EXPERIMENTAL, pakliže o některou z nich nestojíte, můžete klidně zakázat
Seznámím vás s důležitými položkami:
Pozn.: Pokud si s něčím nebudete jisti, nesahejte na to, nechte to tak, jak to je. Téměř u každé položky je k dispozici nápověda (H), jinak UTFG
General setup (obecné nastavení): Tady si můžete nastavit třeba podporu pro swap, kompresní režim kernelu (doporučuji XZ), podpora pro initramfs/initrd, optimalizace kernelu pro velikost, typ alokátoru (SLAB, SLUB, SLOB, SLQB...) aj.
Enable loadable module support: Zda povolit přidávání/odebírání modulů jádra za chodu + pár dalších voleb s touto věcí souvisejících- doporučuji povolit, nebo raději nehrabat
Enable the block layer: povolit blokovou vrstvu + volby související především s disky (třeba volba I/O plánovače, typů oddílů aj.). Raději nesahat.
Processor type and features: Typ procesoru, jeho vlastnosti. Tam se dá celkem slušně vyřádit, je možné zvolit si vhodnou rodinu procesorů, do níž váš křemíkový mozek spadá, podpora SMP (pro víceprocesorové systémy) i SMT (pro procesory s podporou hyperthreadingu), typ preempce, frekvence přerušení (100, 250, 300 a 1000Hz; čím vyšší frekvence, tím plynulejší chod a rychlejší reakce, ALE nižší vámi využitelný výpočetní výkon (kvůli příliš častým přerušením); dá se zvolit jiná frekvence, ale je potřeba upravit soubor kernel/Kconfig.hz), podpora pro <4GiB RAM (nebo až 64GiB RAM pro 32-bity s PAE), emulace matematického koprocesoru (pro archivní procesory nemající FPU) atd. Zde se dá jednak trochu zmenšit jádro a jeho velikost v RAM, ale hlavně se takto dá optimalizovat pro výkon.
Power management and ACPI options: Nastavení správy napájení a ACPI, povolení/zakázání uspání a hibernace, nastavení změny frekvence CPU atd.
Bus options (PCI, etc.): Nastavení sběrnic PCI(e), ISA, PCMCIA...
Executable file formats / Emulations: Podpora pro ELF aj., nuda, nesahat
Networking support: Tady se dají poštelovat různá síťová zařízení. Už v prvním submenu je spousta zbytečností (CAN, IrDA, CAIF aj.), dají se beztrestně vypnout.
Device drivers: Jó, tak u tohohle se zapotíte, to si pište! Pokud někdo z vás stále tvrdí, že Linux podporuje málo železa, nechť si poctivě proleze tenhle chlívek a spočítá si ovladače. Je to přímo bludiště! A právě v tomhle bludišti se dá jádro opravdu dobře zmenšit. Stačí znát důkladně střeva svého stroje, ovladače na ně nechat a zbytek, stovky, ne-li tisíce nepotřebných ovladačů, jednoduše zahodit, zrušit, zlikvidovat. Ale bacha, u čeho si nejste jisti (třeba RTC hodiny), to raději ignorujte. Je dobré si k jednotlivým položkám číst nápovědu, jak je tam něco jako "if unsure, say N" a ta položka vám není nijak povědomá, můžete ji zakázat. Jestli tam ale bude "...just say Y", raději poslechněte.
Firmware drivers: Koukám, že už jste z bludiště venku, na ksichtě vrásky a šedej vous, oči barvy krve, ale to nejhorší už máme opravdu za sebou. Nekecám. Třeba v tomhle chlívku nalezneme akorát pár speciálních ovladačů, zejména pro noteknihy.
File systems: Podpora různých souborových systémů. Doporučuju povypínat všelijaké ty rozšířené vlastnosti, pokud je nevyužíváte.
Kernel hacking: Koutek pr h4x0ry, různá dolaďování jádra, možnosti debuggingu.
Security options: Bezpečnostní udělátka - většina uživatelů nepotřebuje upravovat.
Cryptographic API: Různé šifrovací algoritmy.
Virtualization: Virtualizace; kdo nevirtualizuje (KVM a spol.), toto nepotřebuje. Zahodit, spálit.
Library routines: Nechat radši na pokoji, pokud nevíte, co činíte.
Load an Alternate Configuration File: Načíst alternativní konfigurák (asi jen pokud se jmenuje jinak než .conf).
Save an Alternate Configuration File: Uložit nastavení.
Až budete mít hotovo, uložte nastavení a zvolte dole položku <Exit>
TIP!
Pokud v tom umíte plavat a znáte svůj stroj dostatečně dobře, je tady ještě jedna fičura - připojte všechna vámi používaná zařízení a před konfigurací spusťte:
make localmodconfig
Tím na základě aktuálně použitých modulů deaktivujete většinu (nikoliv všechny) nepotřebných (ale bohužel někdy i potřebných) položek. Není to příliš dokonalé, takže si celou konfiguraci zkontrolujte.
3. Teď budete odpočívat, zatímco váš stroj zažije horoucí peklo. Správně, jde se kompilovat, půjde-li vše podle plánu, v /usr/src očekávejte dva deb balíky- linux-headers-blablabla.deb a linux-image-blablabla.deb.
Rovnou se pustíme do kompilace samotné (nedoporučuje se mít přetaktovaný procesor, během kompilace se mnohem více zahřívá a hrozí zatuhnutí systému či nevratné poškození procesoru):
make -jY deb-pkg LOCALVERSION=-sid KDEB_PKGVERSION=$(make kernelversion)-X
... kde -X je číslo "pokusu", např. -1 (5.12.12-1) a -jY je počet procesů, které se mají při kompilaci vykonávat naráz- toto je vhodné spíše pro víceprocesorové stroje a/nebo stroje s funkčním hyperthreadingem (SMT).
Kdo má jednojádro, může tuto volbu vynechat.
4. Hotovo? Vytvořily se balíky? Zbývá je pouze nainstalovat, pro jistotu oba (hlavičky jsou potřeba např. pro ovladače nVidia). Někdo preferuje klikátko Gdebi, ale když už máme otevřený terminál...
dpkg -i /usr/src/nazev_baliku.deb
Někdy se stane, že se neaktualizuje GRUB, to se dá napravit snadno:
update-grub
No a máme hotovo, teď jen stačí pomodlit se ke sv. Tuxovi a sv. Rootovi, modlitbu ukončit slovem "Enter", a rebootovat. Poté, pokud to bude fungovat, ladit dle systémových logů k dokonalosti, jestli se to nepovede, nezoufejte, můj první pokusný králík mi v počátku bootování rozblikal klávesnici v rytmu Kernel panic.
Hodně štěstí!
Aktualizováno 19. 6. 2021
Romane, díky moc! Až budu mít chvilku, hned vyzkouším.. :)
Fajn, pak podej hlášení, abych to doladil ;)
Tak jsem zkoušel 2x kompilovat 2.6.35.3 a ani jednou jsem neuspěl. Nenaběhla mi grafika. Nicméně abych mohl zkusit další kompilaci, musím nějak vyčistit systém, páč mi za ty dvě kompilace narostl o 2,5GB a to jsem kernel odinstaloval a odstranil položky v /usr/src. Kam se teda ještě cosi ukládá při kompilaci a instalaci kernelu?
Co máš za grafiku? Jakej ovladač k ní používáš a odkud? Nejde mi ovladač z balíku nvidia-glx, ale ovladač 256.44 mi funguje normálně.
2.5GiB? Kde jsi to pro Satana splašil ;D? Vždyť i zdrojáky kernelu mají sotva 400MiB. Jinak seznam souborů, který se při instalaci balíku rozbalej a posléze rozutečou po disku, jsou vidět ve vlastnostech balíku např. v Gdebi nebo v Synapticu.
Já mám Ati HD2600XT a používám otevřený ovladač radeon. Ale to zabrané místo je docela problém, páč mi jaksi došlo...:-\ Jinak těžko už to zjistím, když jsem balíky odstranil...
Můžeš někam pastnout konfigurák svýho kernelu? (bacha, je docela velkej)
S tím místem Ti moc neporadím, ale jestli máš GNOME, koukni se na Baobab- ten Ti ukáže takovej koláč, v němž uvidíš, jak je která složka velká ;).
Konfigurák, kterej jsem použil je tady (http://dl.dropbox.com/u/8263058/config-2.6.32-5-686). Jiank to místo jsem samozřejmě zkoumal přes baobab, ale na nic jsem nepřišel. Ale budu s tím muset cosi učinit, nemám už skoro žádné prázdné místo.
Co trochu pročistit disk BleachBitem? Jak velkej disk vlastně máš?
Nevím, zkus to (http://www.2shared.com/file/R1ZK5jAE/configtar.html).
BleachBit byl dobrej tip. Uvolnil mi místa víc než bych čekal. / mi slezlo z 5.2GB na 2.6GB, doufám, že mi tam ještě něco systémových souborů zbylo.. ;D Jinak hlavní problém v místě byl ve složce /root/.local/share/Trash/files, kde byly schovaný hromady pozůstatků po kompilaci.
Takže jsi to měl nalámaný v koši Roota :)
Já špatný nápady nemám, nebyl jsem k tomu naprogramován 8) :P
Citace od: Roman Horník kdy 22. 08. 2010, 19:08:13
Nevím, zkus to (http://www.2shared.com/file/R1ZK5jAE/configtar.html).
Toto jsi nějak upravoval? Našel jsi tam nějakej zásadní průser?
Upravoval, něco jsem tam snad našel, ale radši to zkus, ATInu nemám. Vysekal jsem z toho pár exotických ovladačů, který s největší pravděpodobností nepotřebuješ. Ten předchozí konfigurák jsi nějak u ovladačů modifikoval?
Ne je to tovární konfigurák ze současnýho jádra 2.6.32-5.
Ono je taky možný, že se ovladač z xserver-xorg-video-ati (nebo co používáš) nesnese s kernelem. Máš něco v logu Xorg.*.log?
Zkoušel jsi proprietární ovladač?
Právě jsem odstartoval kompilaci, tak uvidíme. Používám
xserver-xorg-video-radeon a problém by být neměl, uvidím.
Citace od: Roman Horník kdy 22. 08. 2010, 19:57:15Zkoušel jsi proprietární ovladač?
V poslední době ne a ani se na to nechystám.
Japato? :)
Jsem spokojenej s open source ovladačem, takže není důvod.
Šťastná to žena... :D
Citace od: Ota Trkola kdy 22. 08. 2010, 20:04:52
Právě jsem odstartoval kompilaci, tak uvidíme. Používám xserver-xorg-video-radeon a problém by být neměl, uvidím.
Jak to dopadlo?
Aktualizováno, pár chyb opraveno
Citace od: Roman Horník kdy 22. 08. 2010, 23:22:58
Citace od: Ota Trkola kdy 22. 08. 2010, 20:04:52
Právě jsem odstartoval kompilaci, tak uvidíme. Používám xserver-xorg-video-radeon a problém by být neměl, uvidím.
Jak to dopadlo?
Dopadlo to úplně stejně jako předtím. Obrazovka plná barevných bodů. No nic, zkusím to jindy. Teď řeším nákup mininoteknihy na který bude běhat debian, tak nemám čas.
Ahoj. Dá se samotná kompilace provádět i pod normálnim uživatelem, a ne rootem?
Teoreticky by to mělo jít.
Tak jsem chtěl zkompilovat kernel (vybral jsem kernel 2.6.35.3) podle návodu od Romana (mimochodem moc pěkně a přehledně napsané ;-) ), ale ještě bych do toho návodu doplnil, že je potřeba mít nainstalované všechny tyto věci:
build-essential bin86 kernel-package libncurses5 libncurses5-dev fakeroot
Já totiž defaultně od instalace v Lennym neměl libncurses5-dev, fakeroot, bin86 a kernel-package. Bez nich mi nechtěla kompilace začít a házelo to chyby (i když s tím bin86 si nejsem jist, jestli je potřeba - assemblerovský překladač či co to je).
Nakonec jsem teda zatím skončil neúspěchem a zastavilo se to s chybou při snaze o kompilaci driveru lguest, ale nevzdám to :-)
Jinak jsem se ještě někde dočetl, že pokud nechci, aby kernel měl třeba 40MB a moduly 700MB, tak v menu Kernel Hacking se má vypnout Kernel Debugging (zatím jsem nezkoušel, ale protože mě čekají další pokusy, tak to určo vyzkouším).
Nu a teď mám ještě dotaz.
Četl jsem, že možná bude potřeba před kompilací nového kernelu odstranit starý link k linux adresáři a vytvořit nový (např.):
# rm -rf linux && ln -s linux-2.6.35 linux
Je toto vůbec nutné dělat? Zřejmě se ti to, Romane, podařilo úspěšně zkompilovat i bez tohoto kroku, když ho tu neuvádíš...
Díky! Balík bin86 není potřeba (16-bitovej x86 assembler), ale ostatní jsem do návodu doplnil + GCC +CPP (kdyby náhodou).
Ani rm -rf linux && ln -s linux-2.6.35 linux[/size] nemusí bejt, přece v návodu nepoužívám žádný linkování. Pracuje se jenom v jedný složce, a tou je linux-2.6.3x.x, můžeš v ní pracovat kolikrát chceš. Z 2.6.35.4 jsem už udělal 6 balíků a funguje to bezchybně (naposledy včera; to mi pes zlikvidoval webkameru, tak jsem z jádra sebral její ovladač).
Co se Ti zobrazí za chybu při kompilaci lguest? Hoď to sem, uvidíme ;)
Edit Ota Trkola: odstranění citace předchozího příspěvku.
Supr, už rozumím, proč nepotřebujeme odstraňovat link na linux adr. Díky.
Tak jsem zkoušel kompilovat kernel 2.6.35.4 a skončilo to chybou:
...
CC mm/memory.o
mm/memory.c:2796: error: redefinition of 'check_stack_guard_page'
mm/memory.c:2770: error: previous definition of 'check_stack_guard_page' was here
make[2]: *** [mm/memory.o] Error 1
make[1]: *** [mm] Error 2
make[1]: Leaving directory `/usr/src/linux-2.6.35.4'
make: *** [debian/stamp/build/kernel] Error 2
V menuconfig jsem nic neměnil a i když změnil, tak to skončilo touto chybou. Zkusím ještě jiný kernel...
Je mi to trochu povědomý. Nesnažil ses jádro opatchovat? Jednou jsem to udělal, ale nejspíš blbě, pak jsem zjistil, že v oněch souborech byly duplicitní řádky, schválně se podívej do /usr/src/linux-2.6.35.4/mm/memory.c na řádky 2770 a 2796. Tyhle řádky a řádky pod nimi by měly bejt stejný. Jestli jo, můžeš se pokusit duplicitní řádky smazat.
jj je to tak, opatchovával jsem to (a asi taky blbě). Díky, podívám se na ty řádky.
Nicméně teď jsem zkusil starší kernel 2.6.34.6 a opět jsem skončil chybou s lguestem:
make[1]: Entering directory `/usr/src/linux-2.6.34.6/Documentation/lguest'
cc -m32 -Wall -Wmissing-declarations -Wmissing-prototypes -O3 -I../../include -I../../arch/x86/include -U_FORTIFY_SOURCE lguest.c -o lguest
lguest.c:21:25: error: sys/eventfd.h: No such file or directory
lguest.c: In function 'create_thread':
lguest.c:1026: warning: implicit declaration of function 'eventfd'
make[1]: *** [lguest] Error 1
make[1]: Leaving directory `/usr/src/linux-2.6.34.6/Documentation/lguest'
make: *** [debian/stamp/build/kernel] Error 2
Na řádky se ani nedívej, neboť to nebude z daleka jedinej zmrvenej soubor, kterej bys musel opravovat. Za chvíli jsou Vánoce, tak ať je nezmeškáš ;D
Můžeš to zkusit s čistým 2.6.35.4 (hlavně bez patchování)? Tý chybě zas tak dokonale nerozumím, akorát lguest.c na řádku 21 požaduje sys/eventfd.h, ale to tam jaksi není (ani já nikde nevidím složku sys).
Budu si s tím ještě hrát, ale už ted je mi divný, že kompilace dvou ruzných kernelů skončí stejnou chybovou hláškou, takže je zřejmě zakopán pes někde v menuconfig a já tam mám prostě něco blbě zaškrtlé anebo právě něco nemám. Po víkendu zkusím ještě neopatchovanou 2.6.35.4. Holt v nejhorším případě to udělám jako dřív - 2.6.32 z backports repo.
Ohledně toho lguestu, UTFGnul jsem tohle:
Below "Virtualization" unselect "Linux hypervisor example code"
or
if you need lguest you can also fix the compilation error by removing "#include <sys /eventfd.h>" (line 21) from lguest.c.
Aha, tak díky a pořeším to, protože ted mi na jiném stroji (úplně jiný HW)) při kompilaci neopatchované 2.6.35.4 vyběhla úplně stejná chybka.
Below "Virtualization" unselect "Linux hypervisor example code"
Takže jestli nevirtualizuješ, odznač Processor type and features → Paravirtualized guest support → Lguest guest support a klidně i Virtualization (to mezi Cryptographic API a Library routines).
Virtualizuju, takže zkusím nejdřív tu druhou verzi s editací lquest.c
Protože jsem opět pokročil ve zjišťování a dolaďování chyb při kompilaci, tak se zde podělím o jednu pro mě zcela zásadní věc, bez které mi kompilace nedoběhla:
proto, aby u mě kompilace doběhla až do zdárného konce a nezasekávala se na různých chybách (tu nemáme soubor compile.h nebo zase ve version.h nesedí udaná verze apod.), jsem musel upgradovat balíček kernel-package na verzi 12.036 (měl jsem starší verzi 11.015).
Takže už jedeš na vlastním? Jestli jo, gratuluju!
Zatím nejedu na vlastním, páč po sice úspěšné kompilaci a instalaci nového kernelu, se vyskytl problém, že strašně dlouho nabíhá a pak to skončí černou obr. a nic se neděje (při bootu na starý kernel to jede v pohodě), takže ještě budu dolaďovat. Už si zjišťuju další info, co by to mohlo být a jakmile to vyřeším, opět sem dám doplnění.
Výborně, držím palce!
Ahoj lidicky :) Je tu nejaka dobra duse, ktera by mi pomohla trochu osekat to jadro? Moc tomu nehovim :( Pro moje pouziti by toho tam ani byt moc nemuselo. Nebo by stacilo odkazat nekam kde se da jednodusejc nez z helpu pochopit co se da bez starosti vyhodit.
Pocitac/server chci aby bezel jako DHCP server a fileserver.
Jinak musim pochvalit autora! Pekny navod ;-)
Díky za pochvalu :)
Ono ani není kam Tě odkázat, budeš muset tunit asi sám. Ale neboj se toho, není to zas tak moc těžký, musíš ale znát svůj hardware.
Dejme tomu, že máš CPU Intel. Tak proč tam mít povolený položky pro AMD a další? Vypnout.
Grafika je taky intelácká, takže co smrdí konkurencí (SiS, ATI, nVidia, VIA,...), dát pryč.
Síťovka- máš 10/100Mbit? Gigabitovky a desetigigabitovky nepotřebuješ podporovat.
Že nemáš LED zařízení, WiFinku, PPP, ISDN, I2O, SPI, InfiniBand, FireWire a další? Pryč s nima!
Zkus to!
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
V general setup sem ve vsech trech kompilacich odebral jen experimental veci, jinak sem na to nesahal. Jeste jedna vec. Pri kompilaci mi to nejdrive hazelo chybu. Nekde jsem nasel, ze pomuze novejsi kernel-package. Mam 12.036, predtim jsem mel 11.015.
A jeste jedna vec. Jak se kompletne zbavim tech mych vytvoru? :D
Za kazdy napad a radu budu moc rad :)
Uploadni někam konfigurák.
Tady to je. Pribalil jsem k tomu i lshw, lspci, lsusb a oba konfiguraky
http://uloz.to/5954720/config.zip (http://uloz.to/5954720/config.zip)
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
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ší.
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.
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.
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 ;-)
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
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ý)...
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)
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 ??
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).
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..
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í).
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.
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
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.
Zdravím, tak jsem si sosnul vanillu linux-3.4.7, trošku to osekal, po troše úprav se to zdařilo i zkompilovat. Nicméně nejde to nainstalovat. Píše to:
root@PC:/usr/src# dpkg -i linux-image-3.4.7-2_3.4.7-2-10.00.Custom_i386.deb
Instaluji balík linux-image-3.4.7-2.
(Čtu databázi ... nyní je nainstalováno 168753 souborů a adresářů.)
Rozbaluji linux-image-3.4.7-2 (z linux-image-3.4.7-2_3.4.7-2-10.00.Custom_i386.deb) ...
Examining /etc/kernel/preinst.d/
Done.
Nastavuji balík linux-image-3.4.7-2 (3.4.7-2-10.00.Custom) ...
Running depmod.
Examining /etc/kernel/postinst.d.
run-parts: executing /etc/kernel/postinst.d/dkms 3.4.7-2 /boot/vmlinuz-3.4.7-2
dkms: running auto installation service for kernel 3.4.7-2:
nvidia (96.43.18)...failed.
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 3.4.7-2 /boot/vmlinuz-3.4.7-2
update-initramfs: Generating /boot/initrd.img-3.4.7-2
run-parts: executing /etc/kernel/postinst.d/pm-utils 3.4.7-2 /boot/vmlinuz-3.4.7-2
run-parts: executing /etc/kernel/postinst.d/zz-update-grub 3.4.7-2 /boot/vmlinuz-3.4.7-2
Generating grub.cfg ...
Found background image: /usr/share/images/desktop-base/desktop-grub.png
Found linux image: /boot/vmlinuz-3.4.7-2
Found initrd image: /boot/initrd.img-3.4.7-2
Found linux image: /boot/vmlinuz-3.4.7-1
Found initrd image: /boot/initrd.img-3.4.7-1
Found linux image: /boot/vmlinuz-2.6.32-5-686
Found initrd image: /boot/initrd.img-2.6.32-5-686
done
root@PC:/usr/src# dpkg -i linux-headers-3.4.7-2_3.4.7-2-10.00.Custom_i386.deb
Instaluji balík linux-headers-3.4.7-2.
(Čtu databázi ... nyní je nainstalováno 170265 souborů a adresářů.)
Rozbaluji linux-headers-3.4.7-2 (z linux-headers-3.4.7-2_3.4.7-2-10.00.Custom_i386.deb) ...
Nastavuji balík linux-headers-3.4.7-2 (3.4.7-2-10.00.Custom) ...
Examining /etc/kernel/header_postinst.d.
run-parts: executing /etc/kernel/header_postinst.d/dkms 3.4.7-2 /boot/vmlinuz-3.4.7-2
dkms: running auto installation service for kernel 3.4.7-2:
nvidia (96.43.18)...failed.
root@PC:/usr/src#
Proč se mu nelíbí ovladač nvidia 96.43.18? Díky za odpověď
Debian 6 "Squeeze"
Linux 2.6.32-5-686
AMD Athlon XP2800+
1GB RAM
GPU: nVidia GeForce2 MX/MX400 64MB
Návod byl upraven. Navíc, tohle je můj 666. příspěvek. Najdete mě pod oltářem z mrtvých těl :D
Dobrý den
Je z té kompilace někde log?
Jsem linuxí nováček a najít se mi ho nepodařilo a vygooglit taky ne.
Děkuji
Logovat to asi neumí, teda nikdy jsem to nezkoušel, jen scrolluju v terminálu. Ale dalo by se to přesměrovat do souboru:
prikaz_pro_kompilaci > /cesta_pro_soubor/log_kompilace.txt
Pre logovanie (obzvlast kompilacie) odporucam skor:
prikaz_pro_kompilaci 2>&1 | tee /cesta_pro_soubor/log_kompilace.txt
Ale v pripade make-kpkg by som asi ako prve skusil:
find /cesta_k_build_adresaru/ -name \*build\*.log -print
(make-kpkg som nespustil uz niekolko rokov, tak si presne nepamatam, ci ten log niekde nie je vytvoreny automaticky)
Tak sem se vrhnul do kompilace nejnovějšího jádra (3.19.2) a při pokusu o kompilaci mi to vypsalo toto /usr/bin/fakeroot: řádek 178: make-kpkg: příkaz nenalezen
To by měl zajistit balík kernel-package
Aktualizováno (přidán tip na localmodconfig, upraveny závislosti). Kdyby něco, pište.
Malá, ale důležitá aktualizace - při instalaci ovladače skrze DKMS jsem dostal chybovou hlášku, že chybí, tuším, config.h - vyřešil jsem to spuštěním make prepare před samotnou kompilací.
Další aktualizace - protože nám zmizel balík kernel-package, a tedy i příkaz make-kpkg, sestavování nyní spouštíme příkazem make - tím si vytvoříme (konkrétně pro aktuální verzi 5.11.2) následující soubory:
linux-image-5.11.2-sid_5.11.2-1_amd64.deb
linux-headers-5.11.2-sid_5.11.2-1_amd64.deb
linux-libc-dev_5.11.2-1_amd64.deb
linux-image-5.11.2-sid-dbg_5.11.2-1_amd64.deb
linux-5.11.2-sid_5.11.2-1.dsc
linux-5.11.2-sid_5.11.2-1_amd64.changes
linux-5.11.2-sid_5.11.2-1.diff.gz
linux-5.11.2-sid_5.11.2.orig.tar.gz
linux-5.11.2-sid_5.11.2-1_amd64.buildinfo
Obvykle budete potřebovat první jeden, dva, zbytek můžete smazat.