Hi Leute,
seit ich Linux und Gentoo nutze hatte ich bisher keinen zufriedenstellenden Weg gefunden die Kernel Konfiguration im Griff zu behalten. Howtos zu dem Thema gibt es viele, diese behandeln jedoch entweder unterschiedliche Variationen von "make; make modules_install install" ohne auf die Konfiguration einzugehen, oder sind ein Handbuch zu "make nconfig menuconfig xconfig gconfig", ebenfalls ohne auf die einzelnen Optionen einzugehen ...
Bisher habe ich mich damit abgefunden dass ich erst einmal die von "genkernel" mitgeliferte Konfiguration als Basis genommen habe und diese nach Bedarf angepasst. Bei Kernel Upgrades habe ich mit "make oldconfig" dann nach bestem Wissen und Gewissen die Fragen über neue Optionen beantwortet. Spätestens nach dem 2. Upgrade weiss ich nicht mehr wieso welche Option gesetzt- und wieso welche nicht gesetzt ist. Für mich unbefriedigend.
Jetzt habe ich mir eine Lösung überlegt:
https://github.com/bell07/bashscripts-kernel_cfg
Ich gehe ebenfalls nicht auf die einzelnen möglichen Parameter ein, habe jedoch eine Lösung mit der man den Überblick über die Konfiguration behält, wieso welche Option aktiviert ist und wieso nicht. Das Skript generiert aus "Configuration Snippets" eine fertige ".config" Datei. Die Ausgangsbasis (das erste Snippet) ist die mit dem Kernel mitgelieferte "defconfig", die schon mal gute Einstellungen mitbringen sollte. Im kernel_cfg Paket sind einige Snippets enthalten die ich bisher benötigt habe, wie zB. "50_docker.config" für Docker Container support oder "30_hwsupport_wifi.config" für WLAN-Stack. Die meisten Treiber sind jedoch nicht in den Standard-Snippets dabei, man muss also noch ein eigenes anlegen mit ein Paar "eigenen" Einträgen. Verbesserungen und Ergänzungen für mitgelieferte Skripte willkommen!
Soviel zur Theorie.. jetzt die Praxis:
1. kernel_cfg installieren
Ich habe kein Ebuild dafür oder so. Mir reicht der direkte Git-Zugriff
|
Quellcode
|
1
2
|
git clone https://github.com/bell07/bashscripts-kernel_cfg /usr/src/kernel_cfg
cd /usr/src/kernel_cfg
|
2. kernel_cfg Konfigurieren
Eine Vorlage für die Konfigurationsdatei ist dabei
|
Quellcode
|
1
2
|
cp settings.env.example settings.env
nano settings.env
|
Mein Rechner an dem ich sitze hat folgende Konfiguration:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
## Kernel sources path
# KERNEL_SOURCE_PATH=/usr/src/linux
## Configuration path. By default in application subdir
# CFG_PATH="$APPL_DIR"/cfg
## Configuration Modules to be applied
# CFG_MODULES='*'
CFG_MODULES="00* 10*
30_hwsupport_bluetooth.config
30_hwsupport_wifi.config
30_hwsupport_uefi_boot.config
50_docker.config
99*"
|
Die auskommentierten Einträge können bem Standard bleiben, es sei denn man weiss wozu sie gut sind. Wichtig ist der Bereich "CFG_MODULES". Wie man sieht wird auch '*' interpretiert um mehrere Einträge zusammen zu selektieren.
00* sollte immer dabei sein
10* deaktiviert alle Netzwerkkarten, diese lassen sich in späteren Snippets wieder aktivieren
Hab Bluetooth, Wifi und boote direkt ohne Grub mit Uefi, nutze Docker.
99* steht für eigene Skripte. Hab eigentlich nur eines:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
cat /usr/src/kernel_cfg/cfg/99_local.config
# KVM
CONFIG_KVM=m
CONFIG_KVM_AMD=m
# AMD drivers
CONFIG_DRM_RADEON=m
CONFIG_DRM_AMDGPU=m
# Netzwerkkarte
CONFIG_NET_VENDOR_REALTEK=y
CONFIG_R8169=m
# WLan Karte
CONFIG_WLAN_VENDOR_ATH=y
CONFIG_ATH9K=m
# Sensoren
CONFIG_SENSORS_K10TEMP=m
CONFIG_SENSORS_F71882FG=m
# Fernbedienung + Display
CONFIG_RC_CORE=m
CONFIG_RC_DEVICES=y
CONFIG_IR_IMON=m
# ecryptfs
CONFIG_ECRYPT_FS=m
CONFIG_KEY_DH_OPERATIONS=y
|
Man kann mit Leerzeilen gruppieren und Kommentare mit # schreiben. Einstellungen können "=y/=m/=n" sein.
Viele häufig benötigte Einstellungen wie AHCI, USB, Intel-DRM sind bereits in der Stanard-Konfiguration (+defconfig) enthalten. Also am besten einmal ohne eigenen Snippet die Konfiguration generieren, und dann prüfen ob da noch etwas fehlt...
Für Einstellungen die aus nur 1-3 Einträgen bestehen lege ich kein eigenes Snippet an, um die Übersichtlichkeit zu behalten, es sei denn es gibt ein Argument dazu.
3. /usr/src/.config sichern
|
Quellcode
|
1
|
cp /usr/src/.config /root/meine_alte_kernel_config
|
Man weiss ja nie.. und es wäre interessant mit "diff" diese mit der neuen zu vergleichen ...
4. Neue Konfiguration zusammenstellen
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
# ./kernel_cfg.sh
apply arch/x86/configs/x86_64_defconfig
apply 00_default_hardware.config
apply 00_defaults.config
apply 00_reselect_as_module.config
apply 10_disable_all_net_vendors.config
apply 30_hwsupport_bluetooth.config
apply 30_hwsupport_wifi.config
apply 30_hwsupport_uefi_boot.config
apply 50_docker.config
apply 99_local.config
make: Verzeichnis „/usr/src/linux-4.19.27-gentoo-r1“ wird betreten
HOSTCC scripts/kconfig/conf.o
HOSTLD scripts/kconfig/conf
scripts/kconfig/conf --olddefconfig Kconfig
#
# configuration written to .config
#
make: Verzeichnis „/usr/src/linux-4.19.27-gentoo-r1“ wird verlassen
Config done in /usr/src/linux/.config
|
5. Kenel bauen
Hierzu gibt es genug Anleitungen wie man es machen kann, wenn der Kenel bereits konfiguriert ist. Darauf gehe ich hier erst mal nicht ein.
6. Nachvollziehbarkeit / Benefit
Falls mich zB interessiert wieso der CONFIG_DUMMY aktiv ist
|
Quellcode
|
1
2
|
fgrep CONFIG_DUMMY cfg/*
cfg/50_docker.config:CONFIG_DUMMY=m
|
Alles klar ...
Sollte ein Eintrag in keinem der Snippets enthalten sein => stammt dieser wohl aus der "defconfig". Also auch alles klar ...
Bin gespannt auf Eure Rückmeldungen. Verbesserungsvorschläge sind wie üblich mehr als Willkommen. Insbesondere wenn jemand noch weitere sinnvolle Snippets beitragen kann. Auch wenn ich irgend wo etwas nicht optimal konfiguriert habe, lasst es mich wissen!
Viel Spass damit