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.

HOME