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

Z Milan Kerslager
Přejít na: navigace, hledání
m (Externí odkazy: +link)
(Překlad modulu mimo jádro: doplnění)
Řádka 14: Řádka 14:
 
  yum install kernel-devel
 
  yum install kernel-devel
  
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:
+
Po instalaci balíčku se přesvědčte, že aktuální používané jádro je shodné s nainstalovanou verzí balíčku <code>kernel-devel</code>, 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ů:
  
  mkdir ovladac
+
$ '''uname -r'''
  cd ovladac
+
2.6.35.9-64.fc14.x86_64
  wget ...
+
$ '''rpm -q kernel-devel'''
  tar xvzf ...
+
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 <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řeklad modulu ===
 +
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):
 +
 
 +
  mkdir broadcom
 +
  cd broadcom
 +
  wget <nowiki>http://www.broadcom.com/docs/linux_sta/hybrid-portsrc_x86-64_v5.60.246.6.tar.gz</nowiki>
 +
  tar xvzf hybrid-portsrc_x86-64_v5.60.246.6.tar.gz
 
  make
 
  make
 +
su
 +
cp -a wl.ko /lib/modules/$(uname -r)/updates/drivers
 +
depmod -a
 +
modprobe -r wl b43 ssb
 +
modprobe wl
 +
dmesg
 +
lspci -k
  
TODO
+
Ve výše uvedeném příkladu se předpokládá, že výše uvedené kapitoly o aktualizaci distribuce a instalaci balíčku <code>kernel-devel</code> byly splněny. Zde pak  byl nejprve vytvořen adresář, ve kterém bude probíhat překlad a příkazem <code>cd</code> jsme se do něj přepnuli. Pak byl stažen balíček se zdrojovými kódu modulu a rozbaleny (příkaz <code>tar</code>). Vlastní překlad zajišťuje příkaz <code>make</code> (je řízen souborem <code>Makefile</code>, který je součástí zdrojových kódů modulu). Poté je aktuální uživatel změněn na správce (root) příkazem <code>su</code> a výsledný modul je nakopírován do adresáře s moduly aktuálního jádra (zajišťuje příkaz <code>uname&nbsp;-r</code>, v době psaní to byl adresář <code>/lib/modules/2.6.35.9-64.fc14.x86_64</code>). 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 <code>kernel/drivers/net/wireless</code>). Poté je příkazem <code>depmod&nbsp;-a</code> provedena aktualizace databáze závislostí mezi moduly. Poté jsou z jádra odstraněny případné aktuální ovladače (příkaz <code>modprobe&nbsp;-r&nbsp;wl&nbsp;b43&nbsp;ssb</code>) a zaveden právě přeložený modul (příkaz <code>modprobe&nbsp;wl</code>). Zavedení modulu je zkontrolováno výpisem ladících hlášení jádra (příkaz <code>dmesg</code>) a též výpisem zařízení na PCI sběrnici a jejich ovladačů (příkaz <code>lspci&nbsp;-k</code>).
  
 
== Překlad celého jádra ==
 
== Překlad celého jádra ==

Verze z 21. 12. 2010, 13:26

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řekladač pro jádro

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 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č a hlavičkové soubory jádra, pro které

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:

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.

Příklad překlad modulu

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):

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

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).

Překlad celého jádra

Při celého jádra je nutné stáhnout celé zdrojové kódy jádra, které jsou k dispozici ve zdrojovém balíčku. Nejprve se přesvědčte, že máte aktuální systém:

yum update

Pak nainstalujte zdrojové kódy jádra:

yum...

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