Documentation/sysrq.txt
Dies ist eine alte Version des Dokuments!
ls /sys/bus/*/*
lsusb lsusb -v
lspci lspci -v
lsscsi
Modulverzeichnis:
ls /lib/modules/$(uname -r)/
dmesg
lsmod
modinfo
modprobe
modprobe -r
Beispiel: automatisches laden des Moduls ipv6 verhindern
/etc/modprobe.conf
:
alias ipv6 off
Beispiel: Modul dummy laden
/etc/modules
dummy
/etc/sysconfig/kernel
:
MODULES_LOADED_ON_BOOT="dummy"
/etc/rc.modules
:
modprobe dummy
chmod +x /etc/rc.modules
Beispiel: 2 Dummy-Interfaces erstellen
/etc/modprobe.conf
:
options dummy numdummies=2
zypper search kmp
Verfügbare Pakete anzeigen:
aptitude search modules
( Vorsicht: nicht alle angezeigten Pakete enthalten kernel-Module )
Beispiel WLAN Treiber ipw3945
aptitude install ipw3945-modules-2.6-686 ipw3945d firmware-ipw3945 modprobe ipw3945
Verfügbare Pakete anzeigen:
yum list | grep kmod
ELRepo ist ein Repository mit Fokus auf hardware-nahen Paketen
Repository ELRepo hinzufügen (siehe auch yum):
Verfügbare Pakete anzeigen:
yum search kmod
yum install kmod-ntfs
modprobe ntfs dmesg | tail
Problem: es gibt in der verwendeten Distribution keinen Treiber für folgendes Gerät:
lsusb
Bus 001 Device 005: ID 0a46:6688 Davicom Semiconductor, Inc.
Lösung: jagen & sammeln & Modul selbst kompilieren: Auf der Seite http://alcopop.org/unix/linux/dm9601/ sind zwei passende Treiber verlinkt:
wget http://www.silencio.ro/DM9601.GZ
Entpacken und hineinwechseln:
tar xzf DM9601.GZ cd 2.6.18/
USB-ID hinzufügen:
vi dm9601.h
DM9601_DEV( "Davicom USB-100", 0x0a46, 0x6688, DEFAULT_GPIO_RESET )
Kompilieren:
make
Modul laden
insmod /tmp/2.6.18/dm9601.ko
Testen ob Gerät erscheint:
dmesg ifconfig -a
Aufräumen:
rmmod dm9601
Gerät entfernen
Modul installieren:
cp /tmp/2.6.18/dm9601.ko /lib/modules/`uname -r`/kernel/drivers/usb/net depmod -a
Keine Angst, nur ein ganz einfaches „Hello World“ Beispiel …
cd aptitude install linux-source-xxx tar xjf /usr/src/linux-source-xxx mkdir hello vi hello.c
#include <linux/init.h> #include <linux/module.h> #include <linux/kernel.h> static int hello_init(void) { printk(KERN_ALERT "Hello World!\n"); return 0; } static void hello_exit(void) { printk(KERN_ALERT "Good bye world!\n"); } module_init(hello_init); module_exit(hello_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("me");
vi Makefile
obj-m := hello.o
make -C ../linux-source-2.6.18/ SUBDIRS=$PWD modules
Repository hinzufügen, z.B. Debian Backports
apt-get -t squeeze-backports install linux-image
Passende Version auswählen, z.B.
apt-get -t squeeze-backports install linux-image-2.6.39-bpo.2-686-pae
Mögliche Einstellungen sind in der Kerneldokumentation in der Datei Documentation/filesystems/proc.txt
beschrieben. Hier ein paar Beispiele:
Auf sehr hoch belasteten Servern kann es Sinn machen, die Anzahl der gleichzeitig geöffneten Dateien zu erhöhen:
/etc/sysctl.conf
:
fs.file-max = 16384 kernel.threads-max = 2048
sysctl -p
Wenn das System nicht mehr reagiert ( z.B. überhohe Last, X Absturz ) gibt es als letzte Rettung oft nur die „magischen“ Tastenkombinationen aus ALTGr + SysRq + Buchstabe 1):
Buchstabe | Funktion |
h | Hilfe zu den SysRq Keys anzeigen |
e | Allen Prozessen ( außer init ) das Signal TERM schicken |
i | Allen Prozessen ( außer init ) das Signal KILL schicken |
s | Alle gemounteten Dateisysteme syncen |
u | Alle Dateisysteme umounten |
b | System _sofort_ rebooten |
o | System _sofort_ ausschalten |
sysctl -w 'kernel.sysrq=1'
Diese Einstellungen rebootfest machen:
/etc/sysctl.conf
:
kernel.sysrq = 1
Eine Übersicht über die Parameter, die der Kernel beim Booten auswertet findet sich in der Datei Documentation/kernel-parameters.txt
in den Kernel-Quelltexten.
Kernel Bootparameter können beim Booten oder über die Konfigurationsdatei des Bootloaders ( z.B. /boot/grub/menu.lst
) übergeben werden.
Auf den meisten Systemen ist es nicht notwendig, den Kernel neu zu kompilieren. Es macht Unerfahrenen mehr Ärger als es bringt. Trotzdem ist es interessant, sich die Einstellungen anzusehen, die auf Kernel-Ebene möglich sind:
Documentation/sysrq.txt