Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
admin_grundlagen:kernel [2012/07/03 19:57] ingo_wichmann |
admin_grundlagen:kernel [2020/09/07 10:22] |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== Hardware Schnittstellen anzeigen ====== | ||
- | ls /sys/bus/*/* | ||
- | ===== USB ===== | ||
- | lsusb | ||
- | lsusb -v | ||
- | ===== PCI ===== | ||
- | lspci | ||
- | lspci -v | ||
- | ===== SCSI ===== | ||
- | lsscsi | ||
- | ==== Kernelmodule ==== | ||
- | Modulverzeichnis: | ||
- | ls /lib/modules/$(uname -r)/ | ||
- | |||
- | ====== Kernel-Module ====== | ||
- | ===== Befehle ===== | ||
- | ==== Kernel Meldungen anzeigen ==== | ||
- | dmesg | ||
- | |||
- | ==== Kernel Module anzeigen ==== | ||
- | lsmod | ||
- | |||
- | ==== Informationen und mögliche Parameter zu einem Modul anzeigen ==== | ||
- | modinfo | ||
- | |||
- | ==== Modul von Hand laden ==== | ||
- | modprobe | ||
- | |||
- | ==== Modul entladen ==== | ||
- | modprobe -r | ||
- | |||
- | ===== Konfigurations-Dateien ===== | ||
- | ==== Module nicht automatisch laden ==== | ||
- | === Distributionsübergreifend ab Linux 2.6 === | ||
- | ''/etc/modprobe*'' ( passende Datei wählen ) | ||
- | <file>alias ipv6 off</file> | ||
- | |||
- | ==== Module beim Starten laden ==== | ||
- | Beispiel: Modul //dummy// laden | ||
- | === Debian=== | ||
- | ''/etc/modules'' | ||
- | <file>dummy</file> | ||
- | |||
- | === SuSE === | ||
- | ''/etc/sysconfig/kernel'' : | ||
- | <file>MODULES_LOADED_ON_BOOT="dummy"</file> | ||
- | |||
- | === RedHat === | ||
- | ''/etc/rc.modules'' : | ||
- | <file>modprobe dummy</file> | ||
- | chmod +x /etc/rc.modules | ||
- | |||
- | ==== Modul-Optionen setzen ==== | ||
- | Beispiel: 2 Dummy-Interfaces erstellen | ||
- | |||
- | ''/etc/modprobe.conf'' : | ||
- | <file>options dummy numdummies=2</file> | ||
- | |||
- | ===== Fehlendes Kernel-Modul nachträglich installieren ===== | ||
- | ==== openSuSE 11.1 ==== | ||
- | zypper search kmp | ||
- | |||
- | ==== Debian ==== | ||
- | 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 | ||
- | |||
- | ==== CentOS 5 ==== | ||
- | Verfügbare Pakete anzeigen: | ||
- | yum list | grep kmod | ||
- | |||
- | === Modul über dkms nachinstallieren === | ||
- | Repository [[http://wiki.centos.org/AdditionalResources/Repositories/RPMForge|RPMforge]] hinzufügen ( siehe auch [[yum]] ): | ||
- | |||
- | Modul installieren | ||
- | yum install dkms-ipw3945 | ||
- | testen | ||
- | modinfo ipw3945 | ||
- | /etc/init.d/ipw3945d start | ||
- | dmesg | tail | ||
- | | ||
- | ==== Scientific Linux 6 ==== | ||
- | Verfügbare Pakete anzeigen: | ||
- | yum list | grep kmod | ||
- | |||
- | === Modul von ATrpms nachinstallieren === | ||
- | |||
- | ATrpms Repository hinzufügen: (( aktuelle Version siehe http://packages.atrpms.net/name/atrpms-repo/ )) | ||
- | rpm -i http://dl.atrpms.net/all/atrpms-repo-6-4.el6.i686.rpm | ||
- | yum list | grep kmdl | ||
- | | ||
- | === Doku === | ||
- | http://wiki.centos.org/HowTos/BuildingKernelModules | ||
- | |||
- | ===== Fehlendes Kernel-Modul selbst bauen ===== | ||
- | Problem: es gibt in der verwendeten Distribution keinen Treiber für folgendes Gerät: | ||
- | lsusb | ||
- | <file>Bus 001 Device 005: ID 0a46:6688 Davicom Semiconductor, Inc.</file> | ||
- | |||
- | ==== als Nutzer ==== | ||
- | 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 | ||
- | <file> | ||
- | DM9601_DEV( "Davicom USB-100", 0x0a46, 0x6688, DEFAULT_GPIO_RESET ) | ||
- | </file> | ||
- | Kompilieren: | ||
- | make | ||
- | |||
- | ==== Als root ==== | ||
- | 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 | ||
- | |||
- | ==== Doku ==== | ||
- | === CentOS / Redhat === | ||
- | * http://wiki.centos.org/HowTos/BuildingKernelModules | ||
- | |||
- | ===== Eigenes Kernel-Modul schreiben ===== | ||
- | Keine Angst, nur ein ganz einfaches "Hello World" Beispiel ... | ||
- | ==== Debian ==== | ||
- | |||
- | cd | ||
- | aptitude install linux-source-xxx | ||
- | tar xjf /usr/src/linux-source-xxx | ||
- | mkdir hello | ||
- | vi hello.c | ||
- | <file> | ||
- | #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"); | ||
- | </file> | ||
- | |||
- | vi Makefile | ||
- | <file> | ||
- | obj-m := hello.o | ||
- | </file> | ||
- | make -C ../linux-source-2.6.18/ SUBDIRS=$PWD modules | ||
- | |||
- | ====== Neuen Kernel installieren ====== | ||
- | ===== Debian 6.0 ===== | ||
- | [[admin_grundlagen:paketverwaltung#zusaetzliche_repositories|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 | ||
- | |||
- | ====== Einstellungen zur Laufzeit ====== | ||
- | Mögliche Einstellungen sind in der Kerneldokumentation in der Datei ''[[http://kernel.org/doc/Documentation/filesystems/proc.txt|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'' : | ||
- | <file> | ||
- | fs.file-max = 16384 | ||
- | kernel.threads-max = 2048 | ||
- | </file> | ||
- | |||
- | 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 ((Die vollständige Liste der Befehle steht in der Kerneldokumentation in der Datei ''[[http://kernel.org/doc/Documentation/sysrq.txt|Documentation/sysrq.txt]]'' )): | ||
- | |||
- | | 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'' : | ||
- | <file> | ||
- | kernel.sysrq = 1 | ||
- | </file> | ||
- | |||
- | ====== Kernel Bootparameter ====== | ||
- | 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. | ||
- | |||
- | ====== Kernel Compile-parameter ====== | ||
- | 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: | ||
- | |||
- | http://kernel.xc.net/ | ||
- | |||
- | ====== Dokus & Links ====== | ||
- | * http://www.linuxtopia.org/online_books/linux_kernel_index.html |