Kernel 2.6
Initrd
Kernel SysRequest
Kernel 2.4
Kernel Patch einspielen
Framebuffer-Console einrichten
Kernel Konfigurationsdatei
/etc/kernel-pkg.conf oder /etc/kernel-img.conf
Optionen
"debian revision number" bei jedem neuen Kernel erhöhen
- debian := 1.0 - Revisionsnummer des paketes, standardwert ist 1.00. es kann
die Umgebungsvariable debian_revision benutzt werden
- image_in_boot: - wenn sie diese Variable auf TRUE setzen, wird der Kernel im
Verzeichnis /boot/ abgelegt und ein entsprechender symbolischer Link angelegt,
anstatt wie sonst üblich den Kernel direkt in das „root-“Verzeichnis
(/) zu kopieren. Dies kann auch über die umgebungsvariable image_in_boot
gesetzt werden.
- kimage: typ des kernel-images, zum Beispiel zImage oder bzImage, standardwert
ist bzImage. dieser Wert kann über die Umgebungsvariable image_type gesetzt
werden
zusätzliche Pakete, um einen neuen Kernel zu übersetzen, dies sind:
gcc libc6-dev binutils make gzip shellutils grep bin86 gawk libncurses5-dev
Wenn das Kommando make menuconfig zur Kernel-Konfiguration benutzt werden soll muss das Paket libncurses5-dev
installiert sein.
rdev /boot/vmlinuz | zeigt Root Partition des Kernels an |
rdev /boot/vmlinuz /dev/hdc2 | ändert die Root Partition auf hdc2 |
depmod -a | modules.dep erneuern, wenn es beim laden von Modulen zu Fehlern kommt wie z.B. »Symbole fehlen« |
lsmod | geladene Module anzeigen |
modprog "Modul" | Modul laden |
rmmod "Modul" | Modul entladen |
Kernel-Dämon "kerneld" um den Daemon nutzen zu können, muß
unter "General Setup" System V IPC und "Loadable Module Support"
Kernel Modul loader ausgewählt werden
kerneld muss dann noch in der rc-Datei gestartet werden.Wenn ein Modul nicht von
Hand, sondern durch den kerneld geladen wurde, erscheint es bei der Auflistung
mit lsmod mit dem Zusatz (autoclean). Das bedeutet, daß der kerneld das
Modul wieder entfernen wird, wenn es länger als eine Minute nicht gebraucht
wurde.
Gleiche Aufgabe wie kerneld macht auf neueren Systemen kmod
Konfigurationsdateien
/usr/src/<Kernel-Version>/.config - Kernel Konfigurationsdatei, enthält alle Parameter mit denen der neue Kernel übersetzt wird.
Kernel mit Module und Initrd erstellen und installieren.
make all && make modules_install mkinitramfs -o /boot/initrd.img-2.6.xx 2.6.xx cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinux-2.6.xx
danach noch die /boot/grub/menu.lst editieren und den neuen Kernel eintragen. Danach den Bootsector neu schreiben und der Kernel ist eingerichtet.
grub-install /dev/sda2 dd if=/dev/sda2 bs=512 count=1 of=/media/sda1/linux.sec
im Beispiel liegt der Bootsector auf /dev/sda2 und dieser wird dann in eine Datei geschrieben damit er über den Windows Bootmanager geladen werden kann.
mount -t sysfs none /sys | Gerätetreiber nach /sys mounten |
echo -n "disk" > /sys/power/disk | Rechner in Syspend-to-Disk schalten |
tune2fs -0 dir_index | ext2/ext3 Verzeichnisindex nachträglich aktivieren |
modprobe -c modul | zeigt für welches Device ein Modul verantwortlich ist |
Befehl | Beschreibung |
---|---|
Konfiguration erstellen | |
make defconfig | erstellt eine Standardkonfiguration, je nach Prozessorarchitektur |
make config | Kernel konfigurieren im Textmodus |
make menuconfig | Kernel konfigurieren im Grafik-Textmodus |
make gconfig | Kernel konfigurieren im Grafikmodus unter Gnome (GTK) |
make xconfig | Kernel konfigurieren im Grafikmodus unter KDE (QT3) |
make oldconfig | Konfiguration eines alten Kernels übernehmen |
make localmodconfig | Konfiguration auf Basis des laufenden Kernels, alle laufenden Module werden mit erzeugt, die inaktiven Module müssen von Hand in der Konfiguration aktiviert werden (ab 2.6.32) |
make localyesconfig | Konfiguration auf Basis des laufenden Kernels, alle laufenden Module werden aber in den Kernel integriert |
Kernel/Module kompilieren | |
make | erzeugt ein bzImage und ein unkomprimiertes Kernel-Image (vmlinux) sowie die Module |
make -j6 | Compiler wird bis sechsfach parallel gestartet bei einem QuadCore System werden alle Kerne ausgelastet. |
make V=1 | wie make jedoch mehr Infos beim kompilieren des Kernels |
make all | kompiliert Kernel und Module |
make kpkg | |
make modules | erstellt die Module des Kernels |
Kernel/Module installieren | |
make modules_install | installiert die erzeugten Module nach /lib/modules/<Kernel Version> |
bereinigen | |
make clean | entfernt die beim kompilieren entstandenen Dateien |
make distclean | entfernt die beim kompilieren entstandenen Dateien, sowie die Konfigurationsdatei |
sonstiges | |
make help | zeigt alle make Ziele an. |
entladen der Module (durch rmmod -f) kann verhindert werden.
Unter Documentation/Changes Neuerungen nachlesen.
Module haben eine neue Datei-Erweiterung .ko (kernel object).
Neue Modul-Init Tools unter ftp://ftp.kernel.org/pub/linux/kernel/people/rusty/modules/ unter
Sarge sind die neuen Modutools schon enthalten. Ob die neuen Tools installiert
sind erkennt man unter /sbin/insmod.old und /sbin/modprobe.old, die .old Funktionen
kommen automatisch zum Einsatz, wenn ein 2.4-Modul geladen wird.
Bei der Installation der Modul-Tools aus den Quellen, kann man die .old Dateien
mit einem "make moveold" automatisch erzeugen. Neue Konfigurationsdatei
/etc/modprobe.conf die die alte /etc/modules.conf ersetzt.
apt-get install module-init-tools
anstellen von root=/dev/sda2 kann man auch LABEL=debian (Label entspricht den Volume Namen) angeben. Ein Script im initrd muss Labelangaben in den Blockdevice Namen umwandeln, das ermöglicht bei Änderung der Partitionierung der Disk einen flexieblen Umgang.
- initrd Image für das laufende System erstellen
mkinitramfs -o /boot/initrd.img-$(uname -r)
- initrd in das aktuelle Verzeichnis entpackens
zcat /boot/initrd.img-2.6.22 | cpio -idmv
- ein paar Sachen aus dem init Script auskommentieren
#maybe_break mount #log_begin_msg "Mounting root file system..." #. /scripts/${BOOT} #parse_numeric ${ROOT} #mountroot #log_end_msg maybe_break bottom [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/init-bottom" run_scripts /scripts/init-bottom [ "$quiet" != "y" ] && log_end_msg /bin/sh # Move virtual filesystems over to the real filesystem #mount -n -o move /sys ${rootmnt}/sys #mount -n -o move /proc ${rootmnt}/proc # #while [ ! -x ${rootmnt}${init} ]; do # panic "Target filesystem doesn't have ${init}" #done
- geänderte initrd neu erstellen
find . | cpio -o -H newc | gzip -c >/boot/initrd.img-2.6.22
-erstellen eines Kernels und initrd als .deb Paket (make-kpkg ist im Paket kernel-package enthalten)
make-kpkg kernel-image --initrd && make modules-image
- erstellen eines initrd Images, unter Debian brauch nur die Kernelversion angegeben werden.
mkinitramfs -o /boot/initrd.img-2.6.23 2.6.23.9
ein initrd Image kann auch mit mkinitrd (veraltet) erstellt werden, da im Paket initrd-tools enthalten ist.
apt-get install initrd-tools mkinitrd -o /boot/initrd.img-2.6.23 2.6.23.9
- Installation der Pakete um initrd zu erstellen
apt-get install initramfs-tools
Konfigurationsdatei /etc/initramfs-tools/initramfs.conf
Wenn der Kernel mit der Option CONFIG_MAGIC_SYSRQ übersetzt wurde, ist die Datei /proc/sys/kernel/sysrq vorhanden. Enthält die Datei eine null ist SysRequest deaktiviert und mit einer eins ist es aktiv.
echo 1 > /proc/sys/kernel/sysrq
Beispiel für eine Forkbombe, an der Console oder im Terminal eingegeben, legt sie den Rechner lahm.
_(){ _|_& };_
mit der folgenden Tastenkombination kann man den Rechner wiederbeleben. Taste ALT + DRUCK halten und der Reihe nach die Tasten r e i s u b im Abstand von Sekunden drücken. Auf der Konsole wird jede Aktion bestätigt. Wenn ein X11 Programm hängt hilft meist schon ALT + DRUCK + k.
Taste | Funktion | Funktion freischalten |
---|---|---|
sicherer Reboot | ||
r | X11 Keyboard entfernen | 4 |
e | alle Prozesse außer init beenden | 64 |
i | alle Prozesse außer init abschießen | 64 |
s | Dateisystem Puffer auf Platte schreiben | 16 |
u | Dateisystem read-only remounten | 32 |
b | Reboot | 128 |
weitere Funktionen | ||
k | alle Prozesse im aktuellen Terminal beenden | 4 |
f | speicherfressende Prozesse killen | 64 |
0 - 9 | Log Level setzen | 2 |
o | System ausshalten | 128 |
l m p q t w | diverse Debug-Informationen dumpen | 8 |
c | Reboot via kexec | 8 |
n | Priorität von Echtzeit-Tasks verändern | 256 |
- Kernel Signatur prüfen
gpg --keyserver wwwkeys.pgp.net --recv-keys 0x517D0F0E Schlüsselbund erstellen
gpg --verify linux-2.4.22.tar.bz2.sign linux-2.4.22.tar.bz2 Signatur des Kernels prüfen
- Kernel entpacken
cd /usr/src; tar xvjf /home/user/kernel/linux-2.4.22.tar.bz2 -C /usr/src
- Link erstellen
ln -s linux-2.4.22 linux
make config - konfigurationsdatei erzeugen
make menuconfig - textbasierend
make xconfig - unter x11
make dep - Abhänigkeiten prüfen
make clean - räumt vom Compilieren noch übrig gebliebene Dateien von der Platte
make mrproper - entfernt alle temporären Dateien die beim erstellen des Kernels übriggeblieben sind, die Konfigurationsdatei .config wird auch mit entfernt!!
make bzImage - erstellt den kernel unter /usr/src/kernel-source-2.x.x/arch/i386/boot/
oder
make bzlilo - kopiert den kernel nach /vmlinuz und benennt vorher den schon
vorhandenen kernel in vmlinuz.old um. danach wird automatisch lilo aufgerufen
und somit steht der kernel dann ab dem nächsten neustart zu verfügung.
make -s bzImage - bei einem so übersetzten kernel werden lediglich warnungen
und fehlermeldungen des kernels beim systemstart ausgegeben.
make dep && make clean && make bzImage - führt die Befehle
hintereinander aus, wenn ein Fehler auftritt, wird unterbrochen
make vmlinux && modules && modules_install
/usr/src/linux/vmlinux und /usr/src/linux/System.map nach /boot kopieren und
die Endung anpassen je nach Kernel
z.B. vmlinux-2.2 und System.map-2.2 da die System.map für
jeden Kernel anders ist, je nach Einstellung beim erzeugen des Kernels.
Diese Variante ist für neuere Kernels nicht geeignet, da der Kernel zu
gross ist.
- Das Kompilieren kann man beschleunigen indem man bei einem Mehrprozessor-System die Option "make -j4 xxx" benutzt.
depmod -a 2.x.x erstellt eine aktuelle modules.dep, falls beim laden von modulen probleme auftreten (modules.dep - abhängigkeiten)
- Konfiguration des alten Kernels auf den neuen Kernel übertragen, dazu
muss die Datei ".config" in das Verzeichnis des neuen Kernels kopiert
werden.
Beispiel:
cd /usr/src/ ln -s linux-2.4.new linux cp linux-2.4.old/.config linux cd linux make oldconfig
- Information zu Modulen erhalten
modinfo "Modulname"
gzip -d patch-2.4.xx.gz | patch -p0
oder
bzip -cd patch-2.4.xx.bz2 | patch -p0
der Parameter "-p0" bedeutet, das alle Verzeichnisebenen, die im Patch-File
angegeben sind, so erhalten bleiben wie sie sind. Einen Blick in die Datei
patch-2.4.xx zeigt die Verzeichnisebenen.
Wird z.B. der Parameter
"-p1" angegeben, wird die erste Verzeichnisebene bei der Pfadangabe
abgeschnitten, je nachdem in welchem Verzeichnis man den Patch anwendet.
mit der Patchoption "--dry-run" kann man einen Testlauf starten.
gzip -d acpi-xxx-2.4.20.diff.gz
cd /usr/src/linux
patch --dry-run -Np1 < acpi.patch
- Patchen des Kernels
patch -Np1 < acpi.patch
wenn solche Meldungen beim Booten des Rechners angezeigt werden
ASUS P4B266 detected: force use of acpi=ht
ACPI: Interpreter disabled.
dann ist das Board auf einer Blacklist für ACPI Support vertreten, dies
kann man in der Datei
/usr/src/linux/arch/i386/kernel/dmi_scan.c nachsehen, oder ändern.
Die Bootoption acpi=force kann auch helfen, wenn der Rechner auf der Blacklist
ist.
alias char-major-10-134 apm alias char-major-10-135 rtc alias char-major-10-175 agpgart alias char-major-10-195 nvdriver
apt-get install fbset fblogo oder netpbm
(je nach Kernelversion)
Kernel 2.4
Console drivers
Kernel 2.6
Device Drivers | Graphics support
Einstellungen im Kernel für VESA Support
[*] VESA VGA graphics support
Console display driver support
[*] Video mode selection support
<*> Framebuffer Console support
Funktioniert mit jeder Karte die VESA 2.0 unterstützt. VESA Treiber hat einige Nachteile, Grafikmodus kann nach dem Booten nicht mehr geändert werden, läuft nicht als Modul, nur VESA-Modi aus der Tabelle werden mit 60Hz unterstützt.
Kernelparameter in der /etc/lilo.conf oder /boot/grub/menu.lst
vga=normal Framebuffer deaktiv vga=0x317 1024x786 16Bit VESA 2.0 Treiber
Linux Start-Logo Kernel 2.4 /usr/src/linux/include/linux/linux_logo.h
Logo kann man mit "fblogo grafik.png linux_logo.h" erstellen.
Linux Start-Logo Kernel 2.6 /usr/src/linux/drivers/video/logo/logo_linux_clut224.ppm
Logo im Netpbm-Format (Debian Paket netpbm) die Grafik muss weniger als 224 Farbe
haben
- Logo aus einer PNG Datei erstellen
pngtopnm grafik.png | pnmtoplainpnm > \ /usr/src/linux/drivers/video/logo/logo_linux_clut224.ppm
Screenshot einer Framebuffer-Console erstellen
- der Inhalt von /dev/fb0 muss in eine Datei kopiert werden, dazu muss man die
Anzahl der zu kopierenden Bytes berechnen. Bei einer Auflösung von 1024
x 768 und 24 Bit sind das 1024*768*3=2359296, bei 800 x 600 und 16 Bit sind das
800*600*2=1601200
dd if=/dev/fb0 of=24bit.raw bs=2359296 count=1
die RAW-Datei kann man mit convert vom imagemagick Paket in eine png Datei umwandeln
convert -depth 8 -size 1024x768 rgb:24bit.raw 24bit.png
Framebuffertreiber für einen Intel OnBoard Grafikchip
/usr/src/linux/Documentation/fb/intel810.txt
/usr/src/linux/drivers/video/modedb.c
Modul laden
modprobe agpgart modprobe i810fb vram=2 xres=1024 yres=768 bpp=16 accel=1 mtrr=1
# lilo.conf append="video=i810fb:vram:2,xres:1024,yres:768,bpp:16,accel:1,mtrr:1"