Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: GentooForum.de. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

1

12.04.2019, 19:56

Kernel Konfiguration im Griff mit kernel_cfg

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 ;-)
Auch wenn Open-Source kostenlos ist, ist sie nicht umsonst. Dein Preis ist Dein Engagement und Mitarbeit an OS-Projekten.
Wenn Du keinen Preis bezahlen willst, bist Du die Ware. Und das ist nicht Open Source, geschweigedenn frei.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »bell« (12.04.2019, 20:01)