Handbuch:MIPS/Installation/Kernel

From Gentoo Wiki
Jump to: navigation, search
This page is a translated version of the page Handbook:MIPS/Installation/Kernel and the translation is 100% complete.

Other languages:
Deutsch • ‎English • ‎español • ‎français • ‎polski • ‎português do Brasil • ‎русский • ‎українська • ‎中文(中国大陆)‎ • ‎日本語 • ‎한국어
MIPS Handbook
Installation
About the installation
Choosing the media
Configuring the network
Preparing the disks
Installing stage3
Installing base system
Configuring the kernel
Configuring the system
Installing tools
Configuring the bootloader
Finalizing
Working with Gentoo
Portage introduction
USE flags
Portage features
Initscript system
Environment variables
Working with Portage
Files and directories
Variables
Mixing software branches
Additional tools
Custom package repository
Advanced features
Network configuration
Getting started
Advanced configuration
Modular networking
Wireless
Adding functionality
Dynamic management


Installation der Quellen

Der Kern um den herum alle Distributionen gebaut sind ist der Linux Kernel. Er ist die Schicht zwischen den Benutzerprogrammen und der Systemhardware. Gentoo bietet seinen Benutzern verschiedene mögliche Kernel-Quellen. Eine komplette Liste mit Beschreibung finden Sie auf der Kernel Übersichtsseite.

Bei mips-basierten Systemen empfiehlt Gentoo das sys-kernel/mips-sources Paket.

Wählen Sie eine passende Kernel-Quelle und installieren Sie diese mit emerge:

root #emerge --ask sys-kernel/mips-sources

Dies installiert die Quellen des Linux Kernel im Verzeichnis /usr/src/, in welchem der symbolischer Link namens linux auf die installierten Kernel-Quellen zeigt:

root #ls -l /usr/src/linux
lrwxrwxrwx    1 root   root    12 Oct 13 11:04 /usr/src/linux -> linux-3.16.5-gentoo

Jetzt ist es Zeit die Kernel-Quellen zu konfigurieren und zu kompilieren. Dafür gibt es zwei Ansätze:

  1. Der Kernel wird manuell konfiguriert und gebaut.
  2. Sie verwenden das Werkzeug genkernel um den Linux Kernel automatisch zu bauen und zu installieren.
  1. The kernel is manually configured and built.
  2. A tool called genkernel is used to automatically build and install the Linux kernel.

Wir erklären hier die manuelle Konfiguration als Standardwahl, weil dies der beste Weg ist die Umgebung zu optimieren.

Standard: Manuelle Konfiguration

Einleitung

Einen Kernel manuell zu konfigurieren wird oft als die schwierigste Aufgabe gesehen, die ein Linux Benutzer jemals durchzuführen hat. Nichts ist weiter von der Wahrheit entfernt. Nach der Konfiguration einiger Kernel werden Sie sich nicht mehr daran erinnern, dass es jemals schwer war. ;)

Eine Sache ist jedoch wahr: Wenn ein Kernel manuell konfiguriert wird ist es wichtig das System zu kennen. Die meisten Informationen können Sie durch die Installation des Paketes sys-apps/pciutils sammeln. Dies enthält den Befehl lspci.

root #emerge --ask sys-apps/pciutils
Notiz
Innerhalb der chroot-Umgebung ist es sicher jegliche pcilib-Warnung (wie pcilib: cannot open /sys/bus/pci/devices) zu ignorieren, die lspci auswerfen könnte.

Eine weitere Quelle von Systeminformationen ist lsmod auszuführen, um zu sehen welche Kernel-Module die Installations-CD verwendet. Dies könnte gute Hinweise darauf liefert was zu aktivieren ist.

Gehen Sie in das Kernel Quellverzeichnis und führen Sie make menuconfig aus. Dies wird eine menübasierte Konfigurationsmaske starten.

root #cd /usr/src/linux
root #make menuconfig

Die Linux Kernel-Konfiguration hat viele, viele Abschnitte. Wir listen zunächst einige Optionen auf, die aktiviert werden müssen (ansonsten wird Gentoo nicht funktionieren, oder ohne zusätzliche Veränderungen nicht richtig funktionieren). Wir haben im Gentoo Wiki auch einen Gentoo Kernel-Konfigurationsleitfaden, der weiterhelfen könnte.

Aktivieren der benötigten Optionen

Stellen Sie sicher, dass jeder Treiber der zum Booten des Systems notwendig ist (wie z.B. SCSI-Controller, ...) direkt in den Kernel kompiliert ist (nicht als Modul). Andernfalls wird das System nicht in der Lage sein komplett zu booten.

Als Nächstes wählen Sie den genauen Prozessortyp. Es wird auch empfohlen die MCE-Funktion zu aktivieren (wenn verfügbar), so dass Benutzer bei Hardwareproblemen benachrichtigt werden können. Auf einigen Architekturen (wie z.B. X86_64) werden diese Fehler nicht über dmesg, sondern auf /dev/mcelog ausgegeben. Dies erfordert das Paket app-admin/mcelog.

Wählen Sie auch Maintain a devtmpfs file system to mount at /dev, so dass kritische Gerätedateien bereits früh im Boot-Prozess verfügbar sind.

KERNEL devtmpfs-Unterstützung aktivieren
Device Drivers --->
  Generic Driver Options --->
    [*] Maintain a devtmpfs filesystem to mount at /dev
    [ ]   Automount devtmpfs at /dev, after the kernel mounted the rootfs

Verify SCSI disk support has been activated (CONFIG_BLK_DEV_SD):

KERNEL Enabling SCSI disk support
Device Drivers --->
   SCSI device support  --->
      <*> SCSI disk support

Gehen Sie nun zu den Dateisystemen (File Systems) und aktivieren Sie die Dateisysteme die Sie verwenden. Kompilieren Sie das Dateisystem das als Root-Dateisystem verwendet wird nicht als Modul. Andernfalls wird das Gentoo-System nicht in der Lage sein die Partition einzuhängen. Wählen Sie ebenfalls Virtual memory und /proc file system.

KERNEL Auswahl notwendiger Dateisysteme
File systems --->
  <*> Second extended fs support
  <*> The Extended 3 (ext3) filesystem
  <*> The Extended 4 (ext4) filesystem
  <*> Reiserfs support
  <*> JFS filesystem support
  <*> XFS filesystem support
  <*> Btrfs filesystem support
  DOS/FAT/NT Filesystems  --->
    <*> MSDOS fs support
    <*> VFAT (Windows-95) fs support
 
Pseudo Filesystems --->
    [*] /proc file system support
    [*] Tmpfs virtual memory file system support (former shm fs)

Wenn PPPoE für die Internetverbindung, oder ein Einwahl-Modem verwendet wird, aktivieren Sie die folgenden Optionen (CONFIG_PPP, CONFIG_PPP_ASYNC, and CONFIG_PPP_SYNC_TTY):

KERNEL Auswahl der Treiber für PPPoE
Device Drivers --->
  Network device support --->
    <*> PPP (point-to-point protocol) support
    <*>   PPP support for async serial ports
    <*>   PPP support for sync tty ports

Die beiden Komprimierungsoptionen schaden nicht, aber werden definitiv nicht benötigt. Ebenso wie die PPP over Ethernet Option, die vielleicht nur PPP verwendet, wenn Kernel-Mode PPPoE verwendet wird.

Vergessen Sie nicht die Unterstützung von Netzwerkkarten (Ethernet oder Wireless-LAN) im Kernel.

Die meisten Systeme haben auch mehrere Prozessorkerne zur Verfügung. Daher ist es wichtig Symmetric multi-processing support zu aktivieren:

KERNEL SMP-Unterstützung aktivieren
Processor type and features  --->
  [*] Symmetric multi-processing support
Notiz
In Mehrkernsystemen zählt jeder Kern als ein Prozessor.

Wenn Sie USB-Eingabegeräte (wie Tastatur oder Maus) verwenden, vergessen Sie nicht diese ebenfalls zu aktivieren:

KERNEL USB-Unterstützung für Eingabegeräte aktivieren
Device Drivers --->
  HID support  --->
    -*- HID bus support
    <*>   Generic HID driver
    [*]   Battery level reporting for HID devices
      USB HID support  --->
        <*> USB HID transport layer
  [*] USB support  --->
    <*>     xHCI HCD (USB 3.0) support
    <*>     EHCI HCD (USB 2.0) support
    <*>     OHCI HCD (USB 1.1) support


Vorbereitung der Konfiguration

Wichtig
Auf dem Origin 200/2000, Indigo2 Impact (R10000), Octane/Octane2 und O2 wird ein 64-Bit Kernel zum Booten dieser Systeme benötigt. emergen Sie sys-devel/kgcc64 für diese Maschinen, um einen Cross-Compiler zum Bau von 64-Bit Kernels zu erzeugen.

Viele der unterstützten Systeme haben Beispiel .configs, die sich in den Kernel-Quellen verstecken. Nicht alle Systeme haben Konfigurationen, die auf diese Weise verteilt werden. Diejenigen bei denen das aber so ist, können durch Verwendung der in der Tabelle unten aufgeführten Befehle konfiguriert werden.

System Configure command
Cobalt Servers make cobalt_defconfig
Indy, Indigo2 (R4k), Challenge S make ip22_defconfig
Origin 200/2000 make ip27_defconfig
Indigo2 Impact (R10k) make ip28_defconfig
O2 make ip32_defconfig

All of the Gentoo installation images provide a kernel config option as part of the image itself, accessible as /proc/config.gz. This may be used in many cases. It is best though if the kernel source matches closely the kernel that is currently running. To extract it, simply run it through zcat as shown below.

root #zcat /proc/config.gz > .config
Wichtig
This kernel config is set up for a netboot image. That is, it will expect to find a root filesystem image somewhere nearby, either as a directory for initramfs, or a loopback device for initrd. When executing make menuconfig, don't forget to go into General Setup and disable the options for initramfs.

Anpassen der Konfiguration

Once a configuration is found, download it into the kernel source directory, and rename it to .config. From there, run make oldconfig to bring everything up to date according to the instructions above, and customize the configuration before compiling.

root #cd /usr/src/linux
root #cp /path/to/example-config .config
root #make oldconfig

Just press the ENTER (or Return) key at each prompt to accept the defaults for now ...

root #make menuconfig
Wichtig
In the Kernel Hacking section, there is an option named "Are You Using A Cross Compiler?". This tells the kernel Makefiles to prepend "mips-linux-" (or mipsel-linux ... etc) to gcc and as commands when compiling the kernel. This should be turned off, even if cross-compiling. Instead, if a cross-compiler needs to be called, specify the prefix using the CROSS_COMPILE variable as shown in the next section.
Wichtig
Es gibt auf Octane Systemen ein bekanntes Problem mit JFS und ALSA, auf denen ALSA nicht funktioniert. Angesichts des experimentellen Charakters von JFS auf MIPS wird zurzeit empfohlen die Nutzung von JFS zu vermeiden.

Kompilieren und installieren

Mit beendeter Konfiguration ist es an der Zeit den Kernel zu kompilieren und zu installieren. Schließen Sie die Konfiguration und starten Sie den Kompiliervorgang:

Notiz
Geben Sie auf 64-Bit Maschinen CROSS_COMPILE=mips64-unknown-linux-gnu- (oder auf Little-Endian Systemen mips64el-...) an, um den 64-Bit Compiler zu nutzen.

Um nativ zu kompilieren:

root #make vmlinux modules modules_install

Passen Sie das "mips64-unknown-linux-gnu-" zur Cross-Kompilierung für den Zielcomputer entsprechend an:

root #make vmlinux modules modules_install CROSS_COMPILE=mips64-unknown-linux-gnu-

Wenn Sie auf einer anderen Maschine kompilieren (wie beispielsweise einem x86 Rechner), verwenden Sie die folgenden Befehle um den Kernel zu kompilieren und die Module in ein bestimmtes Verzeichnis zu installieren zur Übertragung auf die Zielmaschine.

root #make vmlinux modules CROSS_COMPILE=mips64-unknown-linux-gnu-
root #make modules_install INSTALL_MOD_PATH=/somewhere
Wichtig
Wenn Sie einen 64-Bit Kernel für den Indy, Indigo2 (R4k), Challenge S und O2 kompilieren, verwenden Sie anstelle von vmlinux das vmlinux.32 Target. Ansonsten wird die Maschine nicht booten können. Dies ist ein Workaround des Problems, das das PROM nicht das ELF64 Format versteht.
root #make vmlinux.32
Notiz
It is possible to enable parallel builds using make -jX with X being the number of parallel tasks that the build process is allowed to launch. This is similar to the instructions about /etc/portage/make.conf earlier, with the MAKEOPTS variable.

Die Zeilen oben erzeugen vmlinux.32, das der finale Kernel ist.

Wenn der Kernel mit dem Kompilieren fertig ist, kopieren Sie das Kernel Abbild nach /boot/.

Notiz
Der Bootloader auf Cobaltservern erwartet ein komprimiertes Kernel Abbild. Denken Sie daran die Datei mit gzip -9 zu komprimieren, sobald Sie sich im Verzeichnis /boot/ befindet.
root #cp vmlinux /boot/kernel-3.16.5-gentoo

Für Cobaltserver komprimieren Sie das Kernel Abbild:

root #gzip -9v /boot/kernel-3.16.5-gentoo


Optional: initramfs bauen

In bestimmten Fällen ist es notwendig ein initramfs (Ausgangsdateisystem im Arbeitsspeicher) zu bauen. Der häufigste Grund dafür ist wenn wichtige Dateisystemorte (wie /usr/ oder /var/) auf separaten Partitionen liegen. Mit einem initramfs können diese Partition, mit Hilfe der Werkzeuge die im initramfs Verfügbar sind, eingehängt werden.

Ohne initramfs besteht ein großes Risiko, dass das System nicht richtig bootet, da die Werkzeuge die für das Einhängen der Dateisysteme verantwortlich sind Informationen benötigen, die sich auf diesen Dateisystemen befinden. Ein initramfs zieht die notwendigen Dateien in ein Archiv, welches direkt nachdem der Kernel bootet genutzt wird, aber noch bevor die Kontrolle an das init Tool übergeben wird. Skripte auf dem initramfs stellen dann sicher, dass die Partitionen richtig eingehängt sind, bevor das System mit dem Booten fortfährt.

Zur Installation eines initramfs installieren Sie zunächst das Paket sys-kernel/genkernel. Im Anschluss daran lassen Sie dem Tool ein initramfs erzeugen:

root #emerge --ask sys-kernel/genkernel
root #genkernel --install initramfs

Um im initrafs bestimmte Unterstützung zu aktivieren, wie LVM oder RAID, fügen Sie genkernel die entsprechenden Optionen hinzu. Siehe genkernel --help für mehr Informationen. Im nächsten Beispiel aktivieren wir die Unterstützung für LVM und Software-RAID (mdadm):

root #genkernel --lvm --mdadm --install initramfs

Das initramfs wird in /boot/ gespeichert. Die resultierende Datei kann einfach durch Auflisten der mit initramfs beginnenden Dateien gefunden werden:

root #ls /boot/initramfs*

Fahren Sie nun beim Abschnitt Kernel-Module fort.

Alternative: genkernel verwenden

Wenn eine manuelle Konfiguration für Sie zu abschreckend aussieht, empfehlen wir die Nutzung von genkernel. Dies wird den Kernel automatisch konfigurieren und bauen.

genkernel konfiguriert den Kernel fast identisch zu der Art, wie ein Installations-CD Kernel konfiguriert wird. Dies bedeutet wenn genkernel verwendet wird, dass das System generell die gesamte Hardware zur Bootzeit erkennt, genau so wie die Installations-CD das macht. Weil genkernel keine manuelle Kernel-Konfiguration benötigt, ist es eine ideale Lösung für jene Benutzer denen unwohl beim Kompilieren ihres eigenen Kernels ist.

Schauen wir uns nun an, wie man genkernel verwendet. Installieren Sie als erstes das Pakel sys-kernel/genkernel:

root #emerge --ask sys-kernel/genkernel

Bearbeiten Sie dann die Datei /etc/fstab, so dass die Zeile die als zweites Feld /boot/ beinhaltet im ersten Feld auf das richtige Gerät zeigt. Wenn Sie dem Partitionierungs-Beispiel aus diesem Handbuch folgen, ist dieses Gerät wahrscheinlich /dev/sda1 mit dem ext2 Dateisystem. Dies würde den Eintrag in der Datei in etwa wie folgt aussehen lassen:

root #nano -w /etc/fstab
DATEI /etc/fstabKonfiguration des /boot Einhängepunktes
/dev/sda1	/boot	ext2	defaults	0 2
Notiz
Bei der Gentoo Installation wird die Datei /etc/fstab später nochmals konfiguriert. Die /boot Einstellung wird aber bereits jetzt benötigt, da die Anwendung genkernel aus dieser Konfiguration liest.

Kompilieren Sie jetzt die Kernel-Quellen indem Sie genkernel all ausführen. Seien Sie sich aber bewusst, dass der Vorgang einige Zeit in Anspruch nehmen wird, da genkernel einen Kernel kompiliert, der fast alle Hardware unterstützt!

Notiz
Wenn die Boot-Partition nicht ext2 oder ext3 als Dateisystem verwendet, könnte es notwendig sein den Kernel manuell mit genkernel --menuconfig all zu konfigurieren. Hierbei müssen Sie dem Kernel (also nicht als Modul) Unterstützung für dieses bestimmte Dateisystem hinzuzufügen. Benutzer von LVM2 werden vermutlich ebenfalls --lvm als Argument hinzufügen wollen.
root #genkernel all

Sobald genkernel beendet ist, wird ein Kernel, ein voller Satz Module und ein initial ram filesystem (initramfs) erstellt werden. Wir verwenden den Kernel und die initrd bei der Konfiguration des Boot-Loader später in dieser Anleitung. Schreiben Sie sich die Namen des Kernels und der initrd auf, da Sie diese Information benötigen, wenn die Boot-Loader Konfigurationsdatei bearbeitet wird. Die initrd wird sofort nach dem Booten gestartet um die automatische Hardware-Erkennung durchzuführen (wie bei der Installations-CD) bevor das "richtige" System startet.

root #ls /boot/kernel* /boot/initramfs*

Kernel-Module

Konfiguration der Module

Notiz
Hardware modules are optional to be listed manually. udev will normally load all hardware modules that are detected to be connected in most cases. However, it is not harmful for automatically detected modules to be listed. Sometimes exotic hardware requires help to load their drivers.

Listen Sie die Module, die automatisch geladen werden sollen, in der Datei /etc/conf.d/modules auf. Zusätzliche Optionen können Sie den Modulen ebenfalls hinzufügen, wenn nötig.

Um alle verfügbaren Module anzuzeigen, führen Sie den folgende find Befehl aus. Vergessen Sie nicht "<Kernelversion>" mit der Version des Kernels zu ersetzen, den Sie gerade kompiliert haben:

root #find /lib/modules/<Kernelversion>/ -type f -iname '*.o' -or -iname '*.ko' | less

Um beispielsweise automatisch das Modul 3c59x.ko zu laden (das der Treiber für eine bestimmte 3Com Netzwerkkartenfamilie ist), bearbeiten Sie die Datei /etc/conf.d/modules und geben den Modulnamen ein.

root #mkdir -p /etc/modules-load.d
root #nano -w /etc/modules-load.d/network.conf
DATEI /etc/modules-load.d/network.confForce loading 3c59x module
3c59x

Setzten Sie die Installation mit der Konfiguration des Systems fort.

Optional: Firmware installieren

Einige Treiber benötigen die Installation von zusätzlicher Firmware auf dem System, bevor sie funktionieren. Dies ist häufig bei Netzwerkkarten, im Besonderen bei WLAN Netzwerkkarten der Fall. Die meiste Firmware befindet sich im Paket sys-kernel/linux-firmware:

root #emerge --ask sys-kernel/linux-firmware