HOWTO Compile a Kernel Manually

Uit Gentoo Linux Wiki

Ga naar: navigatie, zoeken

Inhoud

[bewerken] De bronnen kiezen:

Ga eerst en vooral op de Kernel Sources pagina kijken en zoek uit welke kernel je wilt installeren.

De meest gebruikte bronnen zijn vanilla en gentoo sources:

  • vanilla-sources: bron rechtstreeks van kernel.org (niet gepatched)
  • gentoo-sources: bron gepatched voor foutcorrecties en eigenschappen door de Gentoo Ontwikkelaars
  • mm-sources: bron voor de ontwikkelaarversie, onderhouden door Andrew Morton. Gebruik deze als wilt helpen om de kernel te testen of als echt het recentste van het recentste wilt hebben.
  • ck-sources: bevat de standaard gentoo patchset alsook de patches onderhouden door Con Kolivas voor een low-latency desktop of server systeem. De ck-server use flag optimaliseert voor server toepassingen.

[bewerken] Kernel bronnen installeren

Download en pak de bronnen van de kernel van jouw keuze uit. Ik zal verder veronderstellen dat je de gentoo-sources gebruikt, maar dat maakt verder geen verschil uit.

emerge gentoo-sources

Als je de tarball, bv 2.6.14.2, direct van kernel.org download, pak het uit in /usr/src/linux-2.6.14 :

cd /usr/src
mkdir linux-2.6.14.2
cd linux-2.6.14.2
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.14.2.tar.bz2
tar xjvf linux-2.6.14.2.tar.bz2

[bewerken] Hardware detecteren:

Een woord van dank voor de auteur van HOWTO Detect your Hardware.

Het commando lspci zal je basisinformatie geven over jouw systeem, voor het geval je die nog niet kent. De output van lspci ziet er als volgt uit:

Code: lspci
0000:00:00.0 Host bridge: Intel Corp. 82845G/GL[Brookdale-G]/GE/PE DRAM Controller/Host-Hub Interface (rev 01)
0000:00:01.0 PCI bridge: Intel Corp. 82845G/GL[Brookdale-G]/GE/PE Host-to-AGP Bridge (rev 01)
0000:00:1d.0 USB Controller: Intel Corp. 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #1 (rev 01)
0000:00:1d.1 USB Controller: Intel Corp. 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #2 (rev 01)
0000:00:1d.2 USB Controller: Intel Corp. 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #3 (rev 01)
0000:00:1d.7 USB Controller: Intel Corp. 82801DB/DBM (ICH4/ICH4-M) USB 2.0 EHCI Controller (rev 01)
0000:00:1e.0 PCI bridge: Intel Corp. 82801 PCI Bridge (rev 81)
0000:00:1f.0 ISA bridge: Intel Corp. 82801DB/DBL (ICH4/ICH4-L) LPC Bridge (rev 01)
0000:00:1f.1 IDE interface: Intel Corp. 82801DB/DBL (ICH4/ICH4-L) UltraATA-100 IDE Controller (rev 01)
0000:00:1f.3 SMBus: Intel Corp. 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) SMBus Controller (rev 01)
0000:01:00.0 VGA compatible controller: ATI Technologies Inc RV350 NJ [Radeon 9800 XT]
0000:01:00.1 Display controller: ATI Technologies Inc RV350 NJ [Radeon 9800 XT] (Secondary)
0000:02:08.0 Ethernet controller: Intel Corp. 82801BD PRO/100 VE (LOM) Ethernet Controller (rev 81)
0000:02:0c.0 Multimedia audio controller: Creative Labs SB Audigy (rev 04)
0000:02:0c.1 Input device controller: Creative Labs SB Audigy MIDI/Game port (rev 04)
0000:02:0c.2 Firewire (IEEE 1394): Creative Labs SB Audigy FireWire Port (rev 04)

Je zal vooral het type moeten te weten van de processor (IDE Chipset : [Intel] 8xx series in het voorbeeld), de geluidskaart (Audio Controller : Creative Labs SB Audigy), en de netwerkkaart (Ethernet Controller : Intel PRO/100 VE). Normaal hoef je het VGA Controller type niet te kennen als je de kernel compileert.

Je kunt ook met lsusb kijken naar wat er op jouw computer is aangesloten voor het geval je dit niet weet (...):

Code: lsusb
Bus 004 Device 001: ID 0000:0000
Bus 003 Device 001: ID 0000:0000
Bus 002 Device 005: ID 043d:007b Lexmark International, Inc.
Bus 002 Device 004: ID 043d:007c Lexmark International, Inc.
Bus 002 Device 003: ID 043d:007a Lexmark International, Inc.
Bus 002 Device 001: ID 0000:0000
Bus 001 Device 001: ID 0000:0000

[bewerken] Kernel Configureren

cd naar de kernel bron map in /usr/src. Typ:

make menuconfig

in terminal (commando regel). Je een hoop tekst zien voorbij vliegen vooraleer je het ncurses kernel configuratie scherm krijgt.


Als je een '[M]' naast een optie ziet betekent dit dat het als een module zal worden gecompileerd. Als je een '[*]' naast een optie ziet betekent dit dat het in de kernel zal worden gecompileerd. Het verschil is dat “modules” geen onderdeel van de kernel zijn; ze zijn gelijkaardig aan wat Windows gebruikers aanzien als `drivers`. Modules moeten manueel geladen worden. De in de kernel ingebouwde opties moeten niet manueel geladen worden.

Meestal zijn de menuconfig voorinstellingen geschikt voor de meeste gebruikers. Niettemin zijn er enkele opties die speciale aandacht vragen :

(De)selecteer eerst de voor Gentoo vereiste opties:

Linux Kernel Configuratie: Gentoo required option
Code maturity level options --->
  [*] Prompt for development and/or incomplete code/drivers


Processor type and features --->
  Subarchitecture Type (PC Compatible) --->
  (Change according to your system)
  Processor family (Athlon/Duron/K7) --->


File systems --->
  Pseudo filesystems --->
    [*] /proc file system support
    [*] /dev file system support (OBSOLETE)
    [*] Automatically mount at boot

Zorg dat deze optie niet aangevinkt is om udev te gebruiken (als je niet weet wat udev is, ga er van uit dat je zal het gebruiken):

    [ ] /dev file system support (OBSOLETE)

In dezelfde submenu:

    [*] Virtual memory file system support (former shm fs)

Kies een of meerdere van de volgende bestandsformaten. _Jouw_ bestandsysteem, het systeem waar nu Gentoo op aan het lopen is, MOET IN DE KERNEL GECOMPILEERD ZIJN, NIET als een module. Om uit te vissen met welk bestandssysteem je aan het werken bent open je het bestand /etc/mtab in jouw favoriete teksteditor. De regel waar het tweede element / is zal jouw root bestandssysteem zijn en je kan hier zien welk type bestandssysteem het is. Bijvoorbeeld :

File: /etc/mtab
/dev/hda8 / reiserfs rw,noatime 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
...

Dit wil zeggen dat het hoofd bestandsysteem van het type ReiserFS is.

Als je nog steeds onzeker bent over jouw bestandssysteem kan je al de meest gangbare types aanduiden. Dit is perfect veilig maar zal een grotere kernel opleveren.

Linux Kernel Configuratie: File systems
File systems --->
  <*> Reiserfs support
  <*> Ext3 journalling file system support
  <*> JFS filesystem support
  <*> Second extended fs support # this is the ext2 filesystem
  <*> XFS filesystem support

Herinner je jouw processor info ? Je hebt die misschien niet nodig omdat het menuconfig programma, standaardmatig, de meest gangbare processoren automatisch aanduidt. De processoren (IDE Chipset Controller Drivers) staan onder:

Linux Kernel Configuratie: IDE Chipset Controller Drivers
Device Drivers  --->
  ATA/ATAPI/MFM/RLL support  --->
    <*>         SiS5513 chipset support (example, check your chipset)

Volgende is geluid. Je kan de drivers voor Advanced Linux Sound Architecture (de standaard; OSS wordt niet langer meer gebruikt) onder:

Linux Kernel Configuratie: Audio: ALSA (Advanced Linux Sound Architecture)
Device Drivers  --->
  Sound  --->
    Advanced Linux Sound Architecture  --->
      Generic devices  --->
        PCI devices  ---> # de meeste geluidkaarten staan hier
        ALSA USB devices  ---> # sla deze opti over tenzij jouw geluidskaart extern is

Je mag slechts “een van deze” aanduiden. Compileer jouw geluidskaart IN de kernel, niet als module zodat je die niet manueel moet opstarten. Als je bijvoorbeeld een Audigy 1, 2, of 4 kaart hebt selecteer dan de`emu10k1` driver.

Volgende is de netwerkkaart (Ethernet Controller), die jouw computer met jouw kabel of DSL modem verbindt. Ik veronderstel dat je een 10/100 kaart hebt (bijna iedereen heeft die). Kies jouw driver onder :

Linux Kernel Configuratie: Ethernet Controller
Device Drivers  --->
  Networking support  --->
    Ethernet (10 or 100Mbit)  --->
      EISA, VLB, PCI and on board controllers
      <*>   RealTek RTL-8139 PCI Fast Ethernet Adapter support

De netwerkkaart kan als module of in de kernel worden gecompileerd, maar opnieuw is het aan te raden om de kaart in de kernel de compileren voor de eenvoud.

Als jouw netwerk PPP (inbellen) gebruikt zal het volgende moeten selecteren :

Linux Kernel Configuratie: PPP (inbellen)
Network device support --->
  <*> PPP (point-to-point protocol) support
  <*>   PPP support for async serial ports
  <*>   PPP support for sync tty ports

Je bent klaar met de kernelconfiguratie tenzij je nog speciale opties wilt selecteren of je de ATI Driver handleiding volgt. Blijf <Exit> kiezen totdat je de vraag ziet o je de kernel configuratie wenst op te slaan. Kies uiteraard ja !

[bewerken] Kernel Compileren

Voer het volgende in de kernel bronmap.

make clean modules modules_install bzImage

Voila! Jouw kernel is gecompileerd en je bent klaar om te installeren.

[bewerken] Kernel installeren

Goed gewerkt ! Je bent bijna klaar. Kopieer de kernel en systeemmap naar /boot. Dit kan manueel via de commandoregel (terminal) op volgende wijze : mount /boot

cp arch/i386/boot/bzImage /boot/linuxrocksdude
# zoals je ziet kan je de kernel image gelijk welke naam geven :P 
# het is echter aan te raden een versie specificatie toe te voegen 
cp System.map /boot/System.map
cp .config /boot/config

Een eenvoudigere methode is :

mount /boot
make install

Dit zal een backup van de oude kernel maken on de name /boot/vmlinuz.old en een copy maken van de nieuwe kernel onder de naam /boot/vmlinuz. Je kan jouw bootloader behouden(GRUB of LILO) altijd naar /boot/vmlinuz en naar /boot/vmlinuz.old als backup verwijzend. Als er dan toch iets fout gegaan is kan je de oude kernel (vmlinuz.old) nog booten.

Om precies te zijn voeg een regel toe zoals:

kernel /boot/vmlinuz ...

in /boot/grub/grub.conf als je GRUB gebruikt, of

image=/boot/vmlinuz
  ...

in /etc/lilo.conf als je LILOgebruikt ,

waarbij je in beide gevallen "..." vervangt door de vereiste opties, die reeds in de huidige grub.conf of lilo.conf (dus voor de aanpassing) hun diensten bewezen hebben.

Aparte menutitels om kunnen in elk bestand worden gecre-eerd voor /boot/vmlinuz.old om op terug te vallen als de nieuwe kernel het niet doet. Raaadpleeg de documentatie van jouw bootloader voor verdere details.

[bewerken] Modules automatisch starten tijdens het booten

Als je kernel drivers als modules hebt gecompileerd moet je de modulenaam aan /etc/modules.autoload.d/kernel-2.6 toevoegen. Bijvoorbeeld:

echo "nvidia" >> /etc/modules.autoload.d/kernel-2.6

De driver naam kan gevonden worden in de menuconfig help file van de desbetreffende driver (typ "SHIFT" + "/" op de driver, een toetsencombinatie dat anders het vraagteken geeft).


[bewerken] Modules herbouwen

Modules zoals nvidia of ipw2200 kunnen herbouwd worden door het volgende commando te typen:

module-rebuild rebuild


[bewerken] Kernel symlink updaten en reboot

Vergeet tenslotte niet de symbolische link te updaten naar /usr/src/linux, die moet verwijzen naar de kernel die nu in gebruik is. Dit kan alsvolgt:

cd /usr/src
ln -sf linux-2.6.14.2 linux

(vervang linux-2.6.14.2 door de map waar jeinstalled the kernel sources).

En dat is het. Reboot.


[bewerken] Zie ook:

Afkomstig van de Nederlandstalige Gentoo Wiki, het vrije Gentoo handboek. "http://nl.gentoo-wiki.com/HOWTO_Compile_a_Kernel_Manually"
Persoonlijke instellingen