201.1 Kernel-Komponenten Gewichtung 2
201.1 Kernel-Komponenten
Aufbau des Kernels
Der Kernel-Aufbau wird durch folgende Grafik gut illustriert. Die Kernel-Komponenten befinden sich im orangenen Feld. Die lilafarbenen Kästchen dadrunter stellen die Hardwarekomponenten da, mit denen der Kernel Daten austauscht.
Quelle: https://upload.wikimedia.org/wikipedia/commons/c/cf/Linux_kernel_diagram.svg
Quelle: https://commons.wikimedia.org/wiki/File:Linux_Kernel_Struktur.svg
Mit Komponenten sind vermutlich die Module gemeint. Module können zur Laufzeit nachgeladen und wieder entladen werden.
Geladene Module anzeigen lsmod
:
$ lsmod
Module Size Used by
sb_edac 24576 0
joydev 24576 0
input_leds 16384 0
serio_raw 16384 0
qemu_fw_cfg 16384 0
mac_hid 16384 0
sch_fq_codel 20480 2
ib_iser 49152 0
rdma_cm 61440 1 ib_iser
iw_cm 45056 1 rdma_cm
ib_cm 53248 1 rdma_cm
ib_core 221184 4 rdma_cm,iw_cm,ib_iser,ib_cm
...
In der ersten Spalte wird der Modulname angezeigt, in der zweiten Spalte der belegte Speicher in Bytes und in der dritten Spalte die Anzahl der Prozesse und Module, die dieses Modul benutzen, gefolgt von einer Liste der Modulnamen, die dieses Modul benutzen.
Informationen zu einem Modul mit modinfo
$ modinfo btrfs
filename: /lib/modules/4.15.0-101-generic/kernel/fs/btrfs/btrfs.ko
license: GPL
alias: devname:btrfs-control
alias: char-major-10-234
alias: fs-btrfs
srcversion: 072BD9ED800DE6268870F1D
depends: zstd_compress,raid6_pq,xor
retpoline: Y
intree: Y
name: btrfs
vermagic: 4.15.0-101-generic SMP mod_unload
signat: PKCS#7
signer:
sig_key:
sig_hashalgo: md4
Besonders wichtig ist die Angabe depends
die aussagt, welche module geladen sein müssen, damit dieses Modul geladen werden kann.
modprobe
übernimmt die Arbeit und läd die abhängigen Module vorher:
Bevor wir ein Module laden schauen wir nach welche Module alle geladen werden können:
basename -s ".ko" $(find /lib/modules/$(uname -r) -type f -name "*.ko")
insmod
läd auch Module aber nicht die abhängigen Module. Wenn man weitere Module beim booten laden will, so schreibt man diese in
die Datei /etc/modules
. Auf moderneren Systemen sollten man lieber eine neue *.conf
Datei unter anlegen und die dafür nutzen, siehe auch
man modules-load.d.
Um zu Verhindern, dass Module geladen werden, gibt es die Direktive blacklist
. Vorhanden Einträge anschauen:
cat /etc/modprobe.d/blacklist.conf | grep -vP '^(#|\s*$)'
blacklist evbug
blacklist usbmouse
blacklist usbkbd
...
Mehr dazu in der man-page von modprobe.d.
Mit der Direktive options
kann man dem Module auch Parameter mitgeben, die beim Laden Einfluß auf das Modul nehmen. Ein Beispiel:
$ cat /etc/modprobe.d/mdadm.conf
# mdadm module configuration file
# set start_ro=1 to make newly assembled arrays read-only initially,
# to prevent metadata writes. This is needed in order to allow
# resume-from-disk to work - new boot should not perform writes
# because it will be done behind the back of the system being
# resumed. See http://bugs.debian.org/415441 for details.
options md_mod start_ro=1
Mit uname
holt man sich Informationen über den geladenen Kernel:
oliver.gaida@server$ uname --help
Aufruf: uname [OPTION]...
Bestimmte Systeminformationen ausgeben. Ohne OPTION dasselbe wie -s.
-a, --all alle Informationen ausgeben, in der folgenden
Reihenfolge (außer -p und -i, wenn nicht bekannt):
-s, --kernel-name Namen des Kernels ausgeben
-n, --nodename Netzwerknamen der Maschine ausgeben
-r, --kernel-release Release‐Nummer des Kernels ausgeben
-v, --kernel-version Kernelversion ausgeben
-m, --machine Maschinentyp (Hardware) ausgeben
-p, --processor Typ des Prozessors ausgeben (nicht portabel)
-i, --hardware-platform Hardwareplattform ausgeben (nicht portabel)
-o, --operating-system Namen des Betriebssystems ausgeben
--help diese Hilfe anzeigen und beenden
--version Versionsinformation anzeigen und beenden
mit /usr/src/linux
ist ein sym-Link gemeint den man sich erstellen kann:
ln -s /usr/src/linux-headers-$(uname -r) /usr/src/linux
ls -l /usr/src
insgesamt 16
lrwxrwxrwx 1 root root 41 Mai 21 15:46 linux -> /usr/src/linux-headers-4.15.0-101-generic
drwxr-xr-x 25 root root 4096 Mai 20 06:19 linux-headers-4.15.0-101
drwxr-xr-x 8 root root 4096 Mai 20 06:19 linux-headers-4.15.0-101-generic
drwxr-xr-x 25 root root 4096 Apr 30 06:12 linux-headers-4.15.0-99
drwxr-xr-x 8 root root 4096 Apr 30 06:12 linux-headers-4.15.0-99-generic
ls -l /usr/src/linux/Documentation
lrwxrwxrwx 1 root root 41 Mai 11 11:08 /usr/src/linux/Documentation -> ../linux-headers-4.15.0-101/Documentation
ls -l /usr/src/linux-headers-4.15.0-101/Documentation
insgesamt 52
drwxr-xr-x 2 root root 4096 Mai 20 06:19 aoe
drwxr-xr-x 2 root root 4096 Mai 20 06:19 cdrom
drwxr-xr-x 2 root root 4096 Mai 20 06:19 EDID
drwxr-xr-x 2 root root 4096 Mai 20 06:19 features
drwxr-xr-x 3 root root 4096 Mai 20 06:19 filesystems
drwxr-xr-x 2 root root 4096 Mai 20 06:19 kbuild
-rw-r--r-- 1 root root 4570 Jan 28 2018 Makefile
drwxr-xr-x 2 root root 4096 Mai 20 06:19 media
drwxr-xr-x 2 root root 4096 Mai 20 06:19 s390
drwxr-xr-x 3 root root 4096 Mai 20 06:19 scsi
drwxr-xr-x 2 root root 4096 Mai 20 06:19 sphinx
drwxr-xr-x 3 root root 4096 Mai 20 06:19 trace
Die Unterschiede zwischen zImage und bzImage ist zum einen die Größe < 512 k bzw. > 512 k, als auch in der Speicheraufteilung des Kernels.