Na této stránce
- 1 předběžná poznámka
- 2 Vytvoření balíčku .deb jádra
- 2.1 Nainstalujte požadované balíčky pro kompilaci jádra
- 2.2 Stáhnout zdroje jádra
- 2.3 Použití oprav na zdroje jádra (volitelné)
- 2.4 Konfigurace jádra
- 2.5 Build The Kernel
- 2.6 Instalace nového jádra
- 3.1 Nainstalujte požadované balíčky pro kompilaci jádra
- 3.2 Stáhnout zdroje jádra
- 3.3 Použití oprav na zdroje jádra (volitelné)
- 3.4 Konfigurace jádra
- 3.5 Sestavení a instalace jádra
- 3.6 Kroky po instalaci
Každá distribuce má nějaké specifické nástroje k sestavení vlastního jádra ze zdrojů. Tento článek je o kompilaci jádra na systému Debian (Etch). Popisuje, jak vytvořit vlastní jádro pomocí nejnovějších neupravených zdrojů jádra z www.kernel.org (vanilla kernel), abyste byli nezávislí na jádrech dodávaných vaší distribucí. Také ukazuje, jak opravit zdrojové kódy jádra, pokud potřebujete funkce, které tam nejsou.
Neposkytuji žádnou záruku, že to pro vás bude fungovat!
1 předběžná poznámka
Popíšu dva způsoby kompilace nového jádra. Při použití první metody získáte balíček .deb jádra, který lze nainstalovat do systému a který můžete sdílet s ostatními a nainstalovat na jiné systémy Debian Etch.
Druhou metodou je kompilace jádra "tradiční" cestou. Tento způsob funguje na jakékoli distribuci Linuxu, ale samozřejmě neskončíte s balíčkem .deb jádra.
2 Sestavení balíčku .deb jádra
Tato kapitola ukazuje, jak sestavit jádro a skončit s balíčkem .deb, který můžete nainstalovat a sdílet s ostatními.
2.1 Instalace požadovaných balíčků pro kompilaci jádra
Nejprve aktualizujeme naši databázi balíčků:
apt-get update
Poté nainstalujeme všechny potřebné balíčky takto:
apt-get install kernel-package ncurses-dev fakeroot wget bzip2 build-essential
2.2 Stáhnout zdroje jádra
Dále si stáhneme požadované jádro do /usr/src. Přejděte na www.kernel.org a vyberte jádro, které chcete nainstalovat, např. linux-2.6.21.3.tar.bz2 (všechna jádra 2.6 najdete zde:http://www.kernel.org/pub/linux/kernel/v2.6/). Poté si jej můžete stáhnout do /usr/src takto:
cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.3.tar.bz2
Poté rozbalíme zdrojové kódy jádra a vytvoříme symbolický odkaz linux do adresáře zdrojů jádra:
tar xjf linux-2.6.21.3.tar.bz2
ln -s linux-2.6.21.3 linux
cd /usr/src/linux
2.3 Použití oprav na zdroje jádra (volitelné)
Někdy potřebujete ovladače pro hardware, který nové jádro ve výchozím nastavení nepodporuje, nebo potřebujete podporu pro virtualizační techniky nebo nějakou jinou převratnou technologii, která se ještě nedostala do jádra. Ve všech těchto případech musíte opravit zdrojové kódy jádra (za předpokladu, že je k dispozici oprava...).
Nyní předpokládejme, že jste si stáhli potřebný patch (v tomto příkladu tomu říkám patch.bz2) do /usr/src. Takto jej použijete na zdroje jádra (musíte být stále v adresáři /usr/src/linux):
bzip2 -dc /usr/src/patch.bz2 | patch -p1 --dry-run
bzip2 -dc /usr/src/patch.bz2 | patch -p1
První příkaz je pouze test, nedělá nic s vašimi zdroji. Pokud neukazuje chyby, můžete spustit druhý příkaz, který opravu skutečně aplikuje. Nedělejte to, pokud první příkaz ukazuje chyby!
Můžete také použít předzáplaty jádra na zdroje jádra. Pokud například potřebujete funkci, která je dostupná pouze v jádře 2.6.22-rc3, ale pro toto jádro ještě nebyly vydány úplné zdrojové kódy. Místo toho je k dispozici patch-2.6.22-rc3.bz2. Tuto opravu můžete použít na zdroje jádra 2.6.21, ale ne na jádro 2.6.21.1 nebo 2.6.21.2 atd. To je vysvětleno na http://kernel.org/patchtypes/pre.html:
Přípravné opravy jsou ekvivalentem alfa verzí pro Linux; žijí v testovacích adresářích v archivech. Měly by být aplikovány pomocí obslužného programu patch(1) na zdrojový kód předchozího plného vydání s číslem 3dílné verze (například předzáplata 2.6.12-rc4 by měla být aplikována na zdroje jádra 2.6.11, nikoli , například 2.6.11.10.)
Pokud tedy chcete zkompilovat jádro 2.6.22-rc3, musíte si stáhnout zdrojové kódy jádra 2.6.21 (http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21. tar.bz2) v kroku 3 namísto jádra 2.6.21.3!
Takto aplikujete opravu 2.6.22-rc3 na jádro 2.6.21:
cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.22-rc3.bz2
cd /usr/src/linux
bzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p1 --dry-run
bzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p1
2.4 Konfigurace jádra
Jako základ pro vaše nové jádro je dobré použít konfiguraci vašeho aktuálního fungujícího jádra. Proto zkopírujeme stávající konfiguraci do /usr/src/linux:
make clean && make mrproper
cp /boot/config-`uname -r` ./.config
Pak spustíme
make menuconfig
který vyvolá konfigurační menu jádra. Přejděte na Načíst alternativní konfigurační soubor a jako konfigurační soubor vyberte .config (který obsahuje konfiguraci vašeho aktuálního pracovního jádra):
Poté procházejte nabídku konfigurace jádra a proveďte své volby. Až budete hotovi a vyberete Konec, odpovězte na následující otázku (Přejete si uložit novou konfiguraci jádra?) Ano:
2.5 Sestavení jádra
Chcete-li sestavit jádro, spusťte tyto dva příkazy:
make-kpkg clean
fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers
Za --append-to-version=můžete napsat libovolný řetězec, který vám pomůže identifikovat jádro, ale musí začínat mínus (-) a nesmí obsahovat mezery.
Nyní buďte trpěliví, kompilace jádra může trvat několik hodin v závislosti na konfiguraci jádra a rychlosti procesoru.
2.6 Instalace nového jádra
Po úspěšném sestavení jádra můžete najít dva balíčky .deb v adresáři /usr/src.
cd /usr/src
ls -l
Na mém testovacím systému se jmenovaly linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb (který obsahuje skutečné jádro) a linux-headers-2.6.21.3-custom_2.6.21.3- custom-10.00.Custom_i386.deb (který obsahuje soubory potřebné, pokud chcete později zkompilovat další moduly jádra). Nainstaluji je takto:
dpkg -i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg -i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
(Nyní můžete dokonce přenést dva soubory .deb do jiných systémů Debian Etch a nainstalovat je tam úplně stejným způsobem, což znamená, že tam nemusíte znovu kompilovat jádro.)
A je to. Konfigurační soubor bootloaderu GRUB /boot/grub/menu.lst byl automaticky upraven a v /boot byl vytvořen ramdisk pro nové jádro.
Nyní restartujte systém:
shutdown -r now
V zaváděcím řádku vyberte své nové jádro (ve výchozím nastavení by mělo být vybráno):
Pokud vše půjde dobře, mělo by přijít s novým jádrem. Zda skutečně používá vaše nové jádro, můžete zkontrolovat spuštěním
uname -r
Mělo by se zobrazit něco jako
2.6.21.3-custom
Pokud se systém nespustí, restartujte jej a na zaváděcí výzvě vyberte své staré jádro. Nyní se můžete znovu pokusit zkompilovat funkční jádro. Nezapomeňte odstranit stanzy nefunkčního jádra z /boot/grub/menu.lst.
3 Sestavení jádra tradičním způsobem
Tato kapitola popisuje jiný přístup, který lze použít na libovolném systému Linux (kromě podrobností, jako je vytvoření ramdisku nebo aktualizace zavaděče). Samozřejmě neskončíte s balíčkem .deb jádra.
3.1 Instalace požadovaných balíčků pro kompilaci jádra
Nejprve aktualizujeme naši databázi balíčků:
apt-get update
Poté nainstalujeme všechny potřebné balíčky takto:
apt-get install kernel-package libncurses5-dev fakeroot wget bzip2 build-essential
3.2 Stáhnout zdroje jádra
Dále si stáhneme požadované jádro do /usr/src. Přejděte na www.kernel.org a vyberte jádro, které chcete nainstalovat, např. linux-2.6.21.3.tar.bz2 (všechna jádra 2.6 najdete zde:http://www.kernel.org/pub/linux/kernel/v2.6/). Poté si jej můžete stáhnout do /usr/src takto:
cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.3.tar.bz2
Poté rozbalíme zdrojové kódy jádra a vytvoříme symbolický odkaz linux do adresáře zdrojů jádra:
tar xjf linux-2.6.21.3.tar.bz2
ln -s linux-2.6.21.3 linux
cd /usr/src/linux
3.3 Použití oprav na zdroje jádra (volitelné)
Někdy potřebujete ovladače pro hardware, který nové jádro ve výchozím nastavení nepodporuje, nebo potřebujete podporu pro virtualizační techniky nebo nějakou jinou převratnou technologii, která se ještě nedostala do jádra. Ve všech těchto případech musíte opravit zdrojové kódy jádra (za předpokladu, že je k dispozici oprava...).
Nyní předpokládejme, že jste si stáhli potřebný patch (v tomto příkladu tomu říkám patch.bz2) do /usr/src. Takto jej použijete na zdroje jádra (musíte být stále v adresáři /usr/src/linux):
bzip2 -dc /usr/src/patch.bz2 | patch -p1 --dry-run
bzip2 -dc /usr/src/patch.bz2 | patch -p1
První příkaz je pouze test, nedělá nic s vašimi zdroji. Pokud neukazuje chyby, můžete spustit druhý příkaz, který opravu skutečně aplikuje. Nedělejte to, pokud první příkaz ukazuje chyby!
Můžete také použít předzáplaty jádra na zdroje jádra. Pokud například potřebujete funkci, která je dostupná pouze v jádře 2.6.22-rc3, ale pro toto jádro ještě nebyly vydány úplné zdrojové kódy. Místo toho je k dispozici patch-2.6.22-rc3.bz2. Tuto opravu můžete použít na zdroje jádra 2.6.21, ale ne na jádro 2.6.21.1 nebo 2.6.21.2 atd. To je vysvětleno na http://kernel.org/patchtypes/pre.html:
Přípravné opravy jsou ekvivalentem alfa verzí pro Linux; žijí v testovacích adresářích v archivech. Měly by být aplikovány pomocí obslužného programu patch(1) na zdrojový kód předchozího plného vydání s číslem 3dílné verze (například předzáplata 2.6.12-rc4 by měla být aplikována na zdroje jádra 2.6.11, nikoli , například 2.6.11.10.)
Pokud tedy chcete zkompilovat jádro 2.6.22-rc3, musíte si stáhnout zdrojové kódy jádra 2.6.21 (http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21. tar.bz2) v kroku 3 namísto jádra 2.6.21.3!
Takto aplikujete opravu 2.6.22-rc3 na jádro 2.6.21:
cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.22-rc3.bz2
cd /usr/src/linux
bzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p1 --dry-run
bzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p1
3.4 Konfigurace jádra
Jako základ pro vaše nové jádro je dobré použít konfiguraci vašeho aktuálního fungujícího jádra. Proto zkopírujeme stávající konfiguraci do /usr/src/linux:
make clean && make mrproper
cp /boot/config-`uname -r` ./.config
Pak spustíme
make menuconfig
který vyvolá konfigurační menu jádra. Přejděte na Načíst alternativní konfigurační soubor a jako konfigurační soubor vyberte .config (který obsahuje konfiguraci vašeho aktuálního pracovního jádra):
Poté procházejte nabídku konfigurace jádra a proveďte své volby. Až budete hotovi a vyberete Konec, odpovězte na následující otázku (Přejete si uložit novou konfiguraci jádra?) Ano:
3.5 Sestavení a instalace jádra
Chcete-li sestavit jádro, spusťte tyto příkazy:
make all
make modules_install
make install
Nyní buďte trpěliví, kompilace jádra může trvat několik hodin v závislosti na konfiguraci jádra a rychlosti procesoru.
3.6 Kroky po instalaci
Nové jádro je nyní nainstalováno, ale stále potřebujeme ramdisk pro naše nové jádro (jinak systém s největší pravděpodobností nenabootuje!) a musíme o našem novém jádře informovat zavaděč GRUB.
Nejprve uděláme toto:
depmod 2.6.21.3
apt-get install yaird
Poté vytvoříme ramdisk pomocí následujícího příkazu:
mkinitrd.yaird -o /boot/initrd.img-2.6.21.3 2.6.21.3
Konfigurace GRUB je v Debian Etch velmi snadná. Vše, co musíme udělat, je spustit
update-grub
To detekuje nové jádro a ramdisk a aktualizuje /boot/grub/menu.lst za nás.
Nyní restartujte systém:
shutdown -r now
Na zaváděcí výzvě vyberte své nové jádro (mělo by být vybráno ve výchozím nastavení). Pokud vše půjde dobře, mělo by přijít s novým jádrem. Zda skutečně používá vaše nové jádro, můžete zkontrolovat spuštěním
uname -r
Mělo by se zobrazit něco jako
2.6.21.3
Pokud se systém nespustí, restartujte jej a na zaváděcí výzvě vyberte své staré jádro. Nyní se můžete znovu pokusit zkompilovat funkční jádro. Nezapomeňte odstranit stanzy nefunkčního jádra z /boot/grub/menu.lst.
4 odkazy
- Debian:http://www.debian.org
- Archiv jádra Linuxu:http://www.kernel.org