Překlad jádra Linuxu: Porovnání verzí

Z Milan Kerslager
Přejít na: navigace, hledání
m (Překlad celého jádra: doplnění)
(Externí odkazy: link fix)
 
(Není zobrazeno 12 mezilehlých verzí od stejného uživatele.)
Řádka 1: Řádka 1:
'''Překlad jádra Linuxu''' není běžnou činností, kterou by uživatel vykonával, protože jádro je dodáváno spolu s distribucí v předem připraveném modulárním tvaru. V některých případech však může uživatel potřebovat přeložit doplňující ovladač nebo upravit nastavení jádra, případně do něj začlenit opravu.
+
'''Překlad jádra Linuxu''' není běžnou činností, kterou by uživatel vykonával, protože jádro je dodáváno spolu s distribucí v předem připraveném modulárním tvaru. V některých případech však může uživatel potřebovat přeložit doplňující ovladač nebo upravit nastavení jádra, případně do něj začlenit opravu. V takovém případě se vlastnímu překladu nevyhneme.
  
== Překladač pro jádro ==
+
== Binární kompatibilita ==
Pro překlad jádra nebo ovladače je nutné mít v systému překladač (gcc). Pro překlad ovladače není potřeba stahovat celé zdrojové kódy jádra. Nejprve se ujistěte, že váš systém je aktuální a pak nainstalujte překladač a příkaz <code>make</code>:
+
Jádro Linuxu záměrně nezachovává pro ovladače binární kompatibilitu, a proto se nepředpokládá jejich distribuce v binární podobě. Každý ovladač má v sobě zaneseny informace o jádru, proti kterému byl zkompilován. Zkuste například:
 +
 
 +
$ '''modinfo parport'''
 +
filename:      /lib/modules/2.6.35.9-64.fc14.x86_64/kernel/drivers/parport/parport.ko
 +
license:        GPL
 +
srcversion:    23CB8E47CF3F437CCDA7CF5
 +
depends:       
 +
vermagic:      2.6.35.9-64.fc14.x86_64 SMP mod_unload
 +
 
 +
Výše uvedený příkaz <code>modinfo</code> vypisuje informace o modulu <code>parport</code>, který obsahuje informaci o jádře (verzi a že je přeložen pro SMP, tj. multiprocesorové systémy). Kromě toho obsahuje řetězec <code>srcversion</code>. Tyto hodnoty jsou kontrolovány při zavádění modulu do běžícího jádra a v případě, že by se lišily od hodnot uložených v době kompilace uvnitř jádra, nebude modul zaveden, protože by mohl takový pokus skončit katastrofou. Nicméně lze použít <code>insmod -f</code>, pokud víte, co děláte a chcete modul zavést do jádra „násilím“.
 +
 
 +
== Překladač pro překlad jádra ==
 +
Pro překlad jádra nebo ovladače je nutné mít v systému překladač (<code>gcc</code>). Nejprve se ujistěte, že váš systém je aktuální a pak nainstalujte balíčky s překladačem <code>gcc</code> a s příkazem <code>make</code>:
  
 
  yum update
 
  yum update
Řádka 8: Řádka 20:
  
 
== Překlad modulu mimo jádro ==
 
== Překlad modulu mimo jádro ==
K některým zařízením (zejména Wi-Fi karty) jsou k dispozici ovladače, které však nejsou součástí zdrojových kódů jádra (tzv. off-tree). Důvodem jsou buď licenční problémy (ovladač obsahuje uzavřenou část bez dostupného zdrojového kódu) nebo jen nejsou kódy zatím do oficiálního jádra začleněny. V takovém případě je ke stažení na Internetu soubor, který je potřeba stáhnout a rozbalit. Kromě toho je potřeba mít v systému překladač a hlavičkové soubory jádra, pro které  
+
K některým zařízením (zejména Wi-Fi karty) jsou k dispozici ovladače, které však nejsou součástí zdrojových kódů jádra (tzv. off-tree). Důvodem jsou buď licenční problémy (ovladač obsahuje uzavřenou část bez dostupného zdrojového kódu) nebo jen nejsou kódy zatím do oficiálního jádra začleněny. V takovém případě je ke stažení na Internetu soubor, který je potřeba stáhnout a rozbalit. Kromě toho je potřeba mít v systému překladač, jehož instalace je popsána v předchozí kapitole. Dále je potřeba mít v systému hlavičkové soubory jádra, které jsou v distribucích k dispozici jako speciální balíčky. Kromě hlavičkových souborů obsahují i další údaje o konfiguraci právě používaného jádra, které budou potřeba. V distribuci Fedora, CentOS nebo RHEL (Red Hat Enterprise Linux) je nejprve nutné zjistit, jaké jádro je používáno, protože ve 32bitovém režimu bývají k dispozici dvě jádra: obyčejné a jádro s podporou PAE.
  
V distribucích jsou k dispozici speciální balíčky, které obsahují hlavičkové soubory a další údaje o konfiguraci právě používaného jádra a které budeme potřebovat. V distribuci Fedora, CentOS nebo RHEL (Red Hat Enterprise Linux) proveďte:
+
$ '''uname -r'''
 +
2.6.35.9-64.fc14.x86_64
 +
 
 +
V tomto případě je použito 64bitové jádro (<code>x86_64</code>) a je nutné doinstalovat balíček <code>kernel-devel</code>. Kdyby bylo nainstalováno jádro s podporou PAE (s označením <code>2.6.35.9-64.fc14.i686.PAE</code>), bylo by nutné nainstalovat balíček <code>kernel-PAE-devel</code>.
  
 
  yum install kernel-devel
 
  yum install kernel-devel
Řádka 25: Řádka 40:
 
Ve výše uvedeném příkladu příkaz <code>uname -r</code> vypíše aktuálně používanou verzi jádra (zde 2.6.35.9-64.fc14.x86_64). Následující příkaz (<code>rpm -q kernel-devel</code>) vypíše všechny balíčky, které se jmenují <code>kernel-devel</code> zároveň s jejich verzemi. Pro úspěch překladu je důležité, aby v systému byl nainstalován balíček <code>kernel-devel</code> se stejnou verzí, jako je aktuálně spuštěné jádro (zde 2.6.35.9-64.fc14.x86_64), což je zde splněno.
 
Ve výše uvedeném příkladu příkaz <code>uname -r</code> vypíše aktuálně používanou verzi jádra (zde 2.6.35.9-64.fc14.x86_64). Následující příkaz (<code>rpm -q kernel-devel</code>) vypíše všechny balíčky, které se jmenují <code>kernel-devel</code> zároveň s jejich verzemi. Pro úspěch překladu je důležité, aby v systému byl nainstalován balíček <code>kernel-devel</code> se stejnou verzí, jako je aktuálně spuštěné jádro (zde 2.6.35.9-64.fc14.x86_64), což je zde splněno.
  
=== Příklad překladu modulu ===
+
V případě podpory PAE by výstup vypadal takto:
V této chvíli je možné přeložit doplňující ovladač(e). Jako příklad si uveďme překlad ovladače pro bezdrátovou kartu Broadcom BCM4313 ze zdrojových kódů na adrese http://www.broadcom.com/support/802.11/linux_sta.php (64bitová varianta):
+
 
 +
$ '''uname -r'''
 +
2.6.35.9-64.fc14.i686.PAE
 +
$ '''rpm -q kernel-PAE-devel'''
 +
kernel-PAE-devel-2.6.35.9-64.fc14.i686
 +
 
 +
=== Překlad externího modulu ===
 +
Jako příklad si uveďme překlad ovladače pro bezdrátovou kartu Broadcom BCM4313 ze zdrojových kódů na adrese http://www.broadcom.com/support/802.11/linux_sta.php (64bitová nebo 32bitová varianta podle používaného jádra, zde je stažen balíček pro 64bitové jádro). Podle výše zmíněného postupu samozřejmě potřebujeme překladač a hlavičkové soubory aktuálního jádra (viz kapitoly ''Překladač pro překlad jádra'' a ''Překlad modulu mimo jádro''. Je-li vše podle výše zmíněných kroků připraveno, lze pokračovat:
  
 
  mkdir broadcom
 
  mkdir broadcom
Řádka 47: Řádka 69:
 
Při překladu jádra je nutné nejprve vybudovat prostředí, ve kterém bude probíhat překlad jádra. Překládejte vždy jako normální uživatel (ne tedy jako root!). V příkazovém řádku terminálu zadejte příkaz:
 
Při překladu jádra je nutné nejprve vybudovat prostředí, ve kterém bude probíhat překlad jádra. Překládejte vždy jako normální uživatel (ne tedy jako root!). V příkazovém řádku terminálu zadejte příkaz:
  
 +
yum install rpmdevtools
 
  rpmdev-setuptree
 
  rpmdev-setuptree
  
Tento příkaz vytvoří v domácím adresáři právě přihlášeného uživatele adresáře ~/rpmbuild/SOURCES, ~/rpmbuild/SPECS a ~/rpmbuild/BUILD, ve kterých bude probíhat vlastní překlad (vlnovka, resp. tilda označuje domácí adresář právě přihlášeného uživatele). Pro kompilaci celého jádra je nutné stáhnout zdrojové kódy jádra, které jsou k dispozici ve zdrojovém RPM balíčku. Nejprve se přesvědčte, že máte systém aktuální (viz výše). Pak spusťte příkazy:
+
První příkaz nainstaluje balíček s nástrojem, který je spuštěn jako druhý. Příkaz <code>rpmdev-setuptree</code> vytvoří v domácím adresáři právě přihlášeného uživatele adresáře <code>~/rpmbuild/SOURCES</code>, <code>~/rpmbuild/SPECS</code> a <code>~/rpmbuild/BUILD</code>, ve kterých bude probíhat vlastní překlad (vlnovka, resp. tilda označuje domácí adresář právě přihlášeného uživatele). Zároveň vytvoří v domácím adresáři soubor <code>~/.rpmmacros</code>, který bude obsahovat nastavení cesty pro kompilaci RPM balíčků do právě vytvořené adresářové struktury (bude v něm řádek: <code>%_topdir %(echo $HOME)/rpmbuild</code>). Pro kompilaci celého jádra je pak nutné stáhnout zdrojové kódy jádra, které jsou k dispozici ve zdrojovém RPM balíčku. Nejprve se přesvědčte, že máte systém aktuální (viz výše). Pak spusťte příkazy:
  
 
  su
 
  su
 +
yum install yum-utils
 
  yumdownloader --source kernel
 
  yumdownloader --source kernel
 
  yum-builddep kernel-<verze>.src.rpm
 
  yum-builddep kernel-<verze>.src.rpm
Řádka 57: Řádka 81:
 
  rpm -Uvh kernel-<verze>.src.rpm
 
  rpm -Uvh kernel-<verze>.src.rpm
  
První příkaz (<code>su</code>) změní aktuálního uživatele na správce systému (root). Další příkaz (<code>yumdownloader</code>) stáhne zdrojové kódy aktuálního jádra v podobě RPM balíčku (přípona <code>src.rpm</code>) do aktuálního adresáře. Celý název RPM souboru s jádrem včetně verze bude vypsán na terminál. Další příkaz nainstaluje  balíčky, které jsou potřeba pro úspěšnou kompilaci právě staženého balíčku se zdrojovými kódy jádra (příkaz <code>yum-builddep</code>). Pak je opuštěn shell správce systému (příkaz <code>exit</code>) a další příkaz již bude prováděn pod běžným uživatelem (příkaz <code>rpm&nbsp;-Uvh&nbsp;kernel-<verze>.src.rpm</code>).
+
První příkaz (<code>su</code>) změní aktuálního uživatele na správce systému (root). Pak je nainstalován balíček s pomocnými nástroji, které budou dále používány. Další příkaz (<code>yumdownloader</code>) stáhne zdrojové kódy aktuálního jádra v podobě RPM balíčku (přípona <code>src.rpm</code>) do aktuálního adresáře. Celý název RPM souboru s jádrem včetně verze bude vypsán na terminál. Další příkaz nainstaluje  balíčky, které jsou potřeba pro úspěšnou kompilaci právě staženého balíčku se zdrojovými kódy jádra (příkaz <code>yum-builddep</code>). Pak je opuštěn shell správce systému (příkaz <code>exit</code>) a další příkaz již bude prováděn pod běžným uživatelem (příkaz <code>rpm&nbsp;-Uvh&nbsp;kernel-<verze>.src.rpm</code>). Varování o nemožnosti nastavit určeného uživatele můžete ignorovat.
 +
 
 +
=== Překlad z balíčku ===
 +
Zdrojové kódy z balíčku jsou umístěny do adresáře <code>~/rpmbuild/SOURCES</code>. Soubor řídící překlad je pak v <code>~/rpmbuild/SPECS/kernel.spec</code>. Pomocí něho je možné přeložit jádro stejným způsobem, jako to provedli tvůrci distribuce. Zdrojové kódy jsou v původní podobě a je k nim připadelo mnoho záplat, které je nutné aplikovat. To lze zajistit příkazy:
 +
 
 +
cd ~/rpmbuild
 +
rpmbuild -ba SPECS/kernel.spec
 +
 
 +
Po přepnutí do adresáře se strukturou pro překlad RPM balíčků je vyvolán příkaz <code>rpmbuild</code>, který připraví zdrojové kódy v adresáři <code>~/rpmbuild/BUILD/kernel-2.6.$ver/linux-2.6.$ver.$arch/</code> a pak provede podle souboru <code>~/rpmbuild/SPECS/kernel.spec</code> celý překlad tak, jako to již bylo provedeno tvůrci distribuce. Nakonec jsou vytvořeny i výsledné balíčky. Balíčky je možné běžným způsobem šířit, avšak je vhodné je pojmenovat jinak, než v původní podobě z distribuce (viz dále).
 +
 
 +
=== Překlad vlastního jádra ===
 +
Pokud bychom chtěli pozměnit průběh překladu, je potřeba poslední krok z minulého odstavce provést po částech. V tomto případě nespustíme příkaz <code>rpmbuild&nbsp;-ba&nbsp;SPECS/kernel.spec</code>, ale pouze si zdrojové kódy připravíme:
 +
 
 +
rpmbuild -bp SPECS/kernel.spec
 +
 
 +
Příkaz připraví zdrojové kódy ve výše zmíněném adresáři (<code>~/rpmbuild/BUILD/kernel-2.6.$ver/linux-2.6.$ver.$arch/</code>), avšak nezáhájí vlastní překlad, který tak můžeme provést sami.
 +
 
 +
TODO<!--
 +
 
 +
V toto chvíli je možné nakonfigurovat překlad jádra, tj. nastavit všechny možnosti překladu tak, aby překlad proběhl s žádoucím výsledkem. Jádra, která jsou součástí distribuce mají obvykle aktuální konfiguraci jádra uloženou v souboru <code>/boot/config-$(uname -r)</code>, a protože je to běžný textový soubor, můžeme ho snadno použít:-->
  
 
== Překlad části jádra ==
 
== Překlad části jádra ==
Řádka 74: Řádka 117:
  
 
== Externí odkazy ==
 
== Externí odkazy ==
* http://www.kernel.org/pub/linux/kernel/people/gregkh/lkn/lkn_pdf/ch04.pdf – Greg Kroah-Hartman: Linux kernel in a nutshell – Chapter 4: Configuring and Building
+
* hhttp://files.kroah.com/lkn/lkn_pdf/ch04.pdf – Greg Kroah-Hartman: Linux kernel in a nutshell – Chapter 4: Configuring and Building
 
* http://fedoraproject.org/wiki/Docs/CustomKernel – FedoraProject.org: Building a custom kernel
 
* http://fedoraproject.org/wiki/Docs/CustomKernel – FedoraProject.org: Building a custom kernel

Aktuální verze z 8. 2. 2017, 13:25

Překlad jádra Linuxu není běžnou činností, kterou by uživatel vykonával, protože jádro je dodáváno spolu s distribucí v předem připraveném modulárním tvaru. V některých případech však může uživatel potřebovat přeložit doplňující ovladač nebo upravit nastavení jádra, případně do něj začlenit opravu. V takovém případě se vlastnímu překladu nevyhneme.

Binární kompatibilita

Jádro Linuxu záměrně nezachovává pro ovladače binární kompatibilitu, a proto se nepředpokládá jejich distribuce v binární podobě. Každý ovladač má v sobě zaneseny informace o jádru, proti kterému byl zkompilován. Zkuste například:

$ modinfo parport
filename:       /lib/modules/2.6.35.9-64.fc14.x86_64/kernel/drivers/parport/parport.ko
license:        GPL
srcversion:     23CB8E47CF3F437CCDA7CF5
depends:        
vermagic:       2.6.35.9-64.fc14.x86_64 SMP mod_unload 

Výše uvedený příkaz modinfo vypisuje informace o modulu parport, který obsahuje informaci o jádře (verzi a že je přeložen pro SMP, tj. multiprocesorové systémy). Kromě toho obsahuje řetězec srcversion. Tyto hodnoty jsou kontrolovány při zavádění modulu do běžícího jádra a v případě, že by se lišily od hodnot uložených v době kompilace uvnitř jádra, nebude modul zaveden, protože by mohl takový pokus skončit katastrofou. Nicméně lze použít insmod -f, pokud víte, co děláte a chcete modul zavést do jádra „násilím“.

Překladač pro překlad jádra

Pro překlad jádra nebo ovladače je nutné mít v systému překladač (gcc). Nejprve se ujistěte, že váš systém je aktuální a pak nainstalujte balíčky s překladačem gcc a s příkazem make:

yum update
yum install gcc make

Překlad modulu mimo jádro

K některým zařízením (zejména Wi-Fi karty) jsou k dispozici ovladače, které však nejsou součástí zdrojových kódů jádra (tzv. off-tree). Důvodem jsou buď licenční problémy (ovladač obsahuje uzavřenou část bez dostupného zdrojového kódu) nebo jen nejsou kódy zatím do oficiálního jádra začleněny. V takovém případě je ke stažení na Internetu soubor, který je potřeba stáhnout a rozbalit. Kromě toho je potřeba mít v systému překladač, jehož instalace je popsána v předchozí kapitole. Dále je potřeba mít v systému hlavičkové soubory jádra, které jsou v distribucích k dispozici jako speciální balíčky. Kromě hlavičkových souborů obsahují i další údaje o konfiguraci právě používaného jádra, které budou potřeba. V distribuci Fedora, CentOS nebo RHEL (Red Hat Enterprise Linux) je nejprve nutné zjistit, jaké jádro je používáno, protože ve 32bitovém režimu bývají k dispozici dvě jádra: obyčejné a jádro s podporou PAE.

$ uname -r
2.6.35.9-64.fc14.x86_64

V tomto případě je použito 64bitové jádro (x86_64) a je nutné doinstalovat balíček kernel-devel. Kdyby bylo nainstalováno jádro s podporou PAE (s označením 2.6.35.9-64.fc14.i686.PAE), bylo by nutné nainstalovat balíček kernel-PAE-devel.

yum install kernel-devel

Po instalaci balíčku se přesvědčte, že aktuální používané jádro je shodné s nainstalovanou verzí balíčku kernel-devel, jinak většina skriptů pro překlad modulů nebude pracovat. Pokud je systém aktuální, stačí ho restartovat (a samozřejmě použít při startu nejnovější jádro). Shodu lze zjistit pomocí příkazů:

$ uname -r
2.6.35.9-64.fc14.x86_64
$ rpm -q kernel-devel
kernel-devel-2.6.35.6-48.fc14.x86_64
kernel-devel-2.6.35.9-64.fc14.x86_64
kernel-devel-2.6.37-0.rc6.git0.1.fc15.x86_64

Ve výše uvedeném příkladu příkaz uname -r vypíše aktuálně používanou verzi jádra (zde 2.6.35.9-64.fc14.x86_64). Následující příkaz (rpm -q kernel-devel) vypíše všechny balíčky, které se jmenují kernel-devel zároveň s jejich verzemi. Pro úspěch překladu je důležité, aby v systému byl nainstalován balíček kernel-devel se stejnou verzí, jako je aktuálně spuštěné jádro (zde 2.6.35.9-64.fc14.x86_64), což je zde splněno.

V případě podpory PAE by výstup vypadal takto:

$ uname -r
2.6.35.9-64.fc14.i686.PAE
$ rpm -q kernel-PAE-devel
kernel-PAE-devel-2.6.35.9-64.fc14.i686

Překlad externího modulu

Jako příklad si uveďme překlad ovladače pro bezdrátovou kartu Broadcom BCM4313 ze zdrojových kódů na adrese http://www.broadcom.com/support/802.11/linux_sta.php (64bitová nebo 32bitová varianta podle používaného jádra, zde je stažen balíček pro 64bitové jádro). Podle výše zmíněného postupu samozřejmě potřebujeme překladač a hlavičkové soubory aktuálního jádra (viz kapitoly Překladač pro překlad jádra a Překlad modulu mimo jádro. Je-li vše podle výše zmíněných kroků připraveno, lze pokračovat:

mkdir broadcom
cd broadcom
wget http://www.broadcom.com/docs/linux_sta/hybrid-portsrc_x86-64_v5.60.246.6.tar.gz
tar xvzf hybrid-portsrc_x86-64_v5.60.246.6.tar.gz
make
su
cp -a wl.ko /lib/modules/$(uname -r)/updates/drivers
depmod -a
modprobe -r wl b43 ssb
modprobe wl
dmesg
lspci -k
iwconfig

Ve výše uvedeném příkladu se předpokládá, že výše uvedené kapitoly o aktualizaci distribuce a instalaci balíčku kernel-devel byly splněny. Zde pak byl nejprve vytvořen adresář, ve kterém bude probíhat překlad a příkazem cd jsme se do něj přepnuli. Pak byl stažen balíček se zdrojovými kódu modulu a rozbaleny (příkaz tar). Vlastní překlad zajišťuje příkaz make (je řízen souborem Makefile, který je součástí zdrojových kódů modulu). Poté je aktuální uživatel změněn na správce (root) příkazem su a výsledný modul je nakopírován do adresáře s moduly aktuálního jádra (zajišťuje příkaz uname -r, v době psaní to byl adresář /lib/modules/2.6.35.9-64.fc14.x86_64). Modul je umístěn do adresáře, kde jsou očekávány aktualizacemi modulů, protože tento adresář má při zavádění modulu do paměti přednost před moduly na obvyklém místě (tj. podadresář aktuálního jádra kernel/drivers/net/wireless). Poté je příkazem depmod -a provedena aktualizace databáze závislostí mezi moduly. Poté jsou z jádra odstraněny případné aktuální ovladače (příkaz modprobe -r wl b43 ssb) a zaveden právě přeložený modul (příkaz modprobe wl). Zavedení modulu je zkontrolováno výpisem ladících hlášení jádra (příkaz dmesg) a též výpisem zařízení na PCI sběrnici a jejich ovladačů (příkaz lspci -k). Poté je vypsán stav bezdrátových síťových rozhraní příkazem iwconfig.

Překlad celého jádra

Při překladu jádra je nutné nejprve vybudovat prostředí, ve kterém bude probíhat překlad jádra. Překládejte vždy jako normální uživatel (ne tedy jako root!). V příkazovém řádku terminálu zadejte příkaz:

yum install rpmdevtools
rpmdev-setuptree

První příkaz nainstaluje balíček s nástrojem, který je spuštěn jako druhý. Příkaz rpmdev-setuptree vytvoří v domácím adresáři právě přihlášeného uživatele adresáře ~/rpmbuild/SOURCES, ~/rpmbuild/SPECS a ~/rpmbuild/BUILD, ve kterých bude probíhat vlastní překlad (vlnovka, resp. tilda označuje domácí adresář právě přihlášeného uživatele). Zároveň vytvoří v domácím adresáři soubor ~/.rpmmacros, který bude obsahovat nastavení cesty pro kompilaci RPM balíčků do právě vytvořené adresářové struktury (bude v něm řádek: %_topdir %(echo $HOME)/rpmbuild). Pro kompilaci celého jádra je pak nutné stáhnout zdrojové kódy jádra, které jsou k dispozici ve zdrojovém RPM balíčku. Nejprve se přesvědčte, že máte systém aktuální (viz výše). Pak spusťte příkazy:

su
yum install yum-utils
yumdownloader --source kernel
yum-builddep kernel-<verze>.src.rpm
exit
rpm -Uvh kernel-<verze>.src.rpm

První příkaz (su) změní aktuálního uživatele na správce systému (root). Pak je nainstalován balíček s pomocnými nástroji, které budou dále používány. Další příkaz (yumdownloader) stáhne zdrojové kódy aktuálního jádra v podobě RPM balíčku (přípona src.rpm) do aktuálního adresáře. Celý název RPM souboru s jádrem včetně verze bude vypsán na terminál. Další příkaz nainstaluje balíčky, které jsou potřeba pro úspěšnou kompilaci právě staženého balíčku se zdrojovými kódy jádra (příkaz yum-builddep). Pak je opuštěn shell správce systému (příkaz exit) a další příkaz již bude prováděn pod běžným uživatelem (příkaz rpm -Uvh kernel-<verze>.src.rpm). Varování o nemožnosti nastavit určeného uživatele můžete ignorovat.

Překlad z balíčku

Zdrojové kódy z balíčku jsou umístěny do adresáře ~/rpmbuild/SOURCES. Soubor řídící překlad je pak v ~/rpmbuild/SPECS/kernel.spec. Pomocí něho je možné přeložit jádro stejným způsobem, jako to provedli tvůrci distribuce. Zdrojové kódy jsou v původní podobě a je k nim připadelo mnoho záplat, které je nutné aplikovat. To lze zajistit příkazy:

cd ~/rpmbuild
rpmbuild -ba SPECS/kernel.spec

Po přepnutí do adresáře se strukturou pro překlad RPM balíčků je vyvolán příkaz rpmbuild, který připraví zdrojové kódy v adresáři ~/rpmbuild/BUILD/kernel-2.6.$ver/linux-2.6.$ver.$arch/ a pak provede podle souboru ~/rpmbuild/SPECS/kernel.spec celý překlad tak, jako to již bylo provedeno tvůrci distribuce. Nakonec jsou vytvořeny i výsledné balíčky. Balíčky je možné běžným způsobem šířit, avšak je vhodné je pojmenovat jinak, než v původní podobě z distribuce (viz dále).

Překlad vlastního jádra

Pokud bychom chtěli pozměnit průběh překladu, je potřeba poslední krok z minulého odstavce provést po částech. V tomto případě nespustíme příkaz rpmbuild -ba SPECS/kernel.spec, ale pouze si zdrojové kódy připravíme:

rpmbuild -bp SPECS/kernel.spec

Příkaz připraví zdrojové kódy ve výše zmíněném adresáři (~/rpmbuild/BUILD/kernel-2.6.$ver/linux-2.6.$ver.$arch/), avšak nezáhájí vlastní překlad, který tak můžeme provést sami.

TODO

Překlad části jádra

Postupujeme podobně, jako v předchozím případě.

TODO

make drivers/usb/serial
make drivers/usb/serial/visor.ko

Záplatování jádra

TODO

Kernel OOPS

Kernel OOPS je hlášení o chybě, která byla v jádře detekována. V některých případech tato chyba vede k zamrznutí celého jádra, ale v mnoha případech to může být pouze varování (jádro se dokáže zotavit a dál dobře fungovat), případně zpráva o chybě v ovladači (který může tímto přestat řádně fungovat).

Externí odkazy