# A2 Manuelle Konfiguration des Kernels I

## pietinger

(Dieser Post ist Teil einer Installation-Anleitung. Falls nicht schon geschehen lies bitte: Installation Guide for Paranoid Dummies)

A.2 Manuelle Konfiguration des Kernels I.

Ich habe diesen Teil vom ersten und dritten Teil getrennt, weil er vermutlich der am längsten dauernde Part der Installation sein wird. Gleich vorweg: Versuche nicht im ersten Anlauf einen "perfekten" Kernel zu konfigurieren. Das dürfte kaum möglich sein und ist auch gar nicht notwendig. Das wichtigste für den Anfang ist, dass er überhaupt bootet. Wenn da der Sound noch nicht funktioniert, ist das kein Problem - das kann man alles nachholen. Der Sound ist auch das häufigste Problem einer Kernel Konfiguration; wenn der nicht gleich auf Anhieb funktioniert bist Du in bester Gesellschaft und musst nicht gleich frustriert sein; bis jetzt haben wir aber noch jedes exotische Teil zum Laufen gebracht. Je öfter Du die Konfiguration des Kernels "aufsuchst", desto größer wird das Verständnis, wo, welche Teile, wie zusammen gehören.

Für den Anfang musst Du folgendes beachten:

1. Alles was der Kernel benötigt um seine Root-Partition zu finden MUSS statisch = fest in den Kernel eingebunden werden; also NICHT als Modul ! Was das ist MÜSSEN wir also wissen.

2. Alles wovon wir wissen, dass wir es (immer) benötigen, binden wir ebenso nicht als Modul ein, sondern statisch. Das hilft später, die Übersicht nach einem "lsmod" zu bewahren; noch später (in B.2) werden wir das tun um einen monolithischen Kernel zu basteln.

3. Wenn wir nicht wissen, was wir vielleicht zusätzlich benötigen, aktivieren wir alle relevanten Module und prüfen nach einem Neustart welche geladen wurden. Je weniger Module wir aber (unnötigerweise) mitcompilieren, desto schneller wird unser "make all".

4. Wenn wir wissen, das wir etwas nicht brauchen, schmeissen wir es sofort raus.

5. Editiere niemals die .config manuell ! Mache Änderungen an der Kernel-Konfig NUR über "make menuconfig". Du kannst gerne in der .config nach den vorhandenen Einstellungen suchen; manuell ändern darfst Du nichts ! Nur Gucken - nicht anfassen ! Grund: Viele Parameter beeinflussen (=aktivieren) andere Parameter - meist sogar unsichtbare ! Wenn Du neugierig bist kannst Du Dir diese Unsichtbaren anzeigen lassen, indem Du "z" in der "make menuconfig" drückst. Drücke danach nochmal "z" (toggle-funktion) um diese Anzeige wieder auszuschalten. Du brauchst das nicht und sie würden Dich nur verwirren (sie sind bei mir auch ausgeschaltet; das brauchen nur die Kernel-Entwickler oder wenn Du etwas suchst, was bisher unsichtbar ist). Lese dazu auch nochmal den Post Nr. 7 dieses Threads ...   :Wink: 

Edit 2022-03-28: In diesem kurzen Artikel beschreibt @NeddySeagoon den Boot-Prozess einfach und verständlich. Lese es wenn Du noch nie einen Kernel konfiguriert hast:

https://wiki.gentoo.org/wiki/User:NeddySeagoon/PC_Boot_Process

(Wir benötigen kein initrd/initramfs weil wir unserem Kernel alles mitgeben, was er benötigt um seine Root-Partition zu finden)

Wir werden erst in A.3 einen Reboot durchführen. Sollte dann Dein Kernel nicht "durch-booten", führe bitte erneut folgende Schritte aus (oder falls Du jetzt eine Pause machen willst, um morgen weiter zu machen und Du den PC ausschaltest):

```
- boot with amd64-minimal CD

# clear

# /etc/init.d/dhcpcd start

# mount /dev/sdXY /mnt/gentoo

# cd /mnt/gentoo

# mount -t proc /proc /mnt/gentoo/proc

# mount --rbind /sys /mnt/gentoo/sys

# mount --rbind /dev /mnt/gentoo/dev

# mount --bind /run /mnt/gentoo/run

# chroot /mnt/gentoo /bin/bash

# . /etc/profile

# mount /dev/sdXZ /boot
```

Bevor wir loslegen, sammeln wir einige Daten (EDIT 2020-08-27: Näheres siehe auch im nächsten Post dieses Threads):

```
# dmesg | grep "Intel(R)"

-> write family,model,stepping to a paper  :-)

# lspci -k

-> write all "Kernel driver in use: xxxx" to a paper

# lsmod | more

-> write all modules - except above - to a paper
```

Es gibt verschiedene Empfehlungen, von welcher Grundkonfiguration aus gestartet werden sollte. Meiner Meinung ist das einfachste, mit der mitgelieferten .config zu beginnen und kein "allmodconfig" oder anderes zu verwenden. Verwende auch oft die Hilfe. Meistens gibt es neben einer guten Erläuterung auch eine Empfehlung der Kernel-Entwickler. Wenn diese nicht ausreicht, kannst Du in der Linux Kernel Dokumentation weiterlesen: https://www.kernel.org/doc/html/latest/

Noch ein Wort zur Sicherheit: Je weniger Software Du nutzt, desto weniger potentielle Angriffsflächen bietet ein System. Das gilt auch für den Kernel, den wir deshalb so schlank wie möglich halten wollen. Das bedeutet: Wenn Du Dir unsicher bist, ob Du einen Parameter benötigst, dann lass es lieber weg. Wenn etwas fehlt, merkst Du das sofort - weil irgend etwas nicht funktionieren wird.  :Wink:  Wenn Du aber etwas einbindest, was nie mehr benötigt wird, merkst Du das leider gar nicht mehr. Also: Im Zweifelsfall erstmal weg lassen oder nur als Modul <M> konfigurieren (wenn dies möglich ist).

Ein letztes Wort zum Aufwand einer manuellen Konfiguration: Ja, er ist - einmalig - sehr hoch ! Aber - Du sparst Dir in Zukunft sehr viel Ärger und Zeit, denn für alles was auch nur entfernt mit Sicherheit zu tun hat, musst Du doch wieder etwas im Kernel manuell konfigurieren (firewall, verschlüsselung, raid, ima, evm, u.v.w.m.). Die Vermutung mit der Verwendung von "genkernel" wäre man alle Sorgen los, ist leider (momentan) ein Trugschluß.

Es wird zwar empfohlen stable und unstable nicht zu mischen, es gibt aber Ausnahmen, z.B. sind eh' alle Spiele unstable. Und es ist möglich den neuesten Kernel in einer stable Installation zu verwenden. Falls Du das nicht willst, musst Du nur das "ACCEPT-KEYWORDS..." weglassen (wir editieren später noch die /etc/portage/package.accept_keywords).

Edit 2021-03-02: Lies diesen Thread komplett durch und mache dann GEGEBENENFALLS JETZT gleich das was ich in Post Nr. 5 beschrieben habe.

Edit 2021-04-04: Der stable Kernel ist bei Gentoo nun auch von 5.4 auf 5.10 gehoben worden. Damit ist weder das ACCEPT_KEYWORDS noch Post Nr. 5 nötig, falls Du auf dem 5.10er bleiben willst (=meine Empfehlung). Nur wenn Du den allerneuesten haben willst, machst Du es wie hier beschrieben (ich lasse deshalb mal die Beschreibung unverändert).

Edit 2022-01-04: Der stable Kernel ist nun von 5.10 auf 5.15 gehoben worden und natürlich empfehle ich immer den neuesten Kernel aus der neuesten LTS-Serie, auch wenn ich selbst die zwei wichtigsten Neuerungen - ein Samba-Server im Kernel und ein neues NTFS - gar nicht benötige (bedeutet: wenn Du noch auf 5.10 bist, sollte ein Upgrade nicht so dringend sein).

Eine schöne Übersicht der derzeit verfügbaren Kernel Versionen liefert:

```
# eix gentoo-sources
```

Jetzt gehts aber wirklich weiter:

```
# emerge -pv gentoo-sources

- oder dies in Kombination mit Post Nr. 5 -

# ACCEPT_KEYWORDS="~amd64" emerge -pv gentoo-sources

# ACCEPT_KEYWORDS="~amd64" emerge -pv intel-microcode

# emerge -pv linux-firmware

# cd /usr/src/linux-5.xx.yy-gentoo

# make menuconfig
```

1. Als erstes müssen alle Teile die ein MUSS sind rein (siehe oben Punkt 1). Lies dazu:

https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Kernel

Nur lesen - nicht machen; einiges ist nicht mehr aktuell - anderes fehlt -> siehe meine folgende Zusammenfassung.

Lass die vorhandene Default-Konfiguration unverändert, wenn nicht explizit in diesem Guide etwas anderes konfiguriert werden soll (also disable nichts, wenn es hier nicht steht; und enable nichts, wenn es hier nicht steht). Es kann sein, dass einiges bereits so konfiguriert ist, wie hier (oder den anderen Artikeln) beschrieben. Dann sehe das als Überprüfung an. Sobald Du mehr Erfahrung bei der Konfiguration Deines Kernels hast und dann weißt was Du tust, wirst Du diese Anweisung erfolgreich ignorieren, und dann auch Dinge wie z.B. I2C und GPIO disabeln, wenn Du diese gar nicht benötigst. Erfahrung benötigt halt seine Zeit; den "perfekten" Kernel wirst Du dann aber irgendwann sicher haben.

Edit 2021-09-24: Falls Du meinst auch den systemd support enabeln zu wollen (weil im AMD64-Handbuch steht: "It does not hurt to have support for both init systems enabled."), dann studiere vorher die Datei: /usr/src/linux/distro/Kconfig ... Du wirst dann feststellen, dass Du dann nicht mehr in der Lage sein wirst IPv6 disablen zu können, weil es nun hart aktiviert wurde. Glaub mir: Wir brauchen das nicht; Lass es einfach ...

Es gibt noch einen Vorteil wenn Du gleich immer in die Hilfe schaust: Du siehst den Namen des Moduls und kannst gleich beginnen in Deinen Listen (s.o. "Daten sammeln") diese wegzustreichen; dann hast Du später weniger zu tun ...  :Wink: 

Wir haben keine 32-bit-Unterstützung, initramfs/initrd oder Hibernation; also raus damit. Wir haben nur EXT4. Die Option für KSPP (Kernel Self Protection Project) werde ich erst in B.2 erläutern und wird dann auch aktiviert. Das folgende sollte deshalb vorerst genügen:

```
Gentoo Linux --->

    [*] Gentoo Linux support

    [*]   Linux dynamic and persistent device naming (userspace devfs) support

    [*]   Select options required by Portage features

    Support for init systems, system and service managers  --->

        [*] OpenRC, runit and other script based systems and managers

        [ ] systemd

    [ ] Kernel Self Protection Project  --->

    [*] Print firmware information that the kernel attempts to load

General setup  --->

    [*] Compile the kernel with warnings as errors

    [*] Checkpoint/restore support

    [ ] Initial RAM filesystem and RAM disk (initramfs/initrd) support

    [*] Configure standard kernel features (expert users)

    Choose SLAB allocator (SLUB (Unqueued Allocator))  --->

                 (X) SLUB (Unqueued Allocator)

Processor type and features  --->

    [*] Symmetric multi-processing support

If you have an AMD or INTEL NOTEBOOK; dont enable for a desktop mainboard (only one of them)

    [?] Intel Low Power Subsystem Support

    [?] AMD ACPI2Platform devices support

Enable this in every case for a INTEL or AMD system (only one of them)

    [*] Supported processor vendors  --->

        [?]   Support Intel processor

        [?]   Support AMD processors

    [*] Machine Check / overheating reporting

Enable this in every case for an INTEL or AMD system (only one of them)

    [?]   Intel MCE Features

    [?]   AMD MCE Features

    [ ] Enable 5-level page tables support

    [*] EFI runtime service support 

    [*]   EFI stub support

    [ ]     EFI mixed-mode support

        vsyscall table for legacy applications (None)  --->

    [ ] Enable the LDT (local descriptor table)

Bus options (PCI etc.)  --->

    [*] Support mmconfig PCI config space access

Power management and ACPI options  --->

    [ ] Hibernation (aka 'suspend to disk')

    [*] ACPI (Advanced Configuration and Power Interface) Support

Binary Emulations  --->

    [ ] IA32 Emulation

    [ ] x32 ABI for 64-bit mode

[*] Enable the block layer --->

    Partition Types --->

        [*] Advanced partition selection

        [*] PC BIOS (MSDOS partition tables) support

        [*] EFI GUID Partition support

Device Drivers --->

    Generic Driver Options --->

        [*] Maintain a devtmpfs filesystem to mount at /dev

        [*]   Automount devtmpfs at /dev, after the kernel mounted the rootfs

    Firmware Drivers  --->

        EFI (Extensible Firmware Interface) Support  --->

            [*] EFI Variable Support via sysfs

    SCSI device support  --->

        [*] legacy /proc/scsi/ support

        [*] SCSI disk support

This is for my Intel CPU:

    [*] Hardware Monitoring support  --->

        [*]   Intel Core/Core2/Atom temperature sensor

    [*] USB support  --->

        [*]   Support for Host-side USB

        [*]   PCI based USB host interface

        [*]   USB announce new devices

        [*]   Enable USB persist by default

        [*]   USB Monitor

        [*]   xHCI HCD (USB 3.0) support

If you have an old USB 2.0 or 1.1; look into your list from: "lspci -k"; if you dont find any module named ehci, ohci or uhci you dont have it !

        [?]   EHCI HCD (USB 2.0) support

        [?]   OHCI HCD (USB 1.1) support

        [?]   UHCI HCD (most Intel and VIA) support

        [*]   USB Mass Storage support

        [*]     USB Attached SCSI

    HID support  --->

        -*- HID bus support

        [*]   Battery level reporting for HID devices

        [*]   /dev/hidraw raw HID device support

        [*]   Generic HID driver

        USB HID support  --->

            [*] USB HID transport layer

            [*] /dev/hiddev raw HID device support

This is for my Intel CPU; choose AMD IOMMU support for an AMD CPU:

    [*] IOMMU Hardware Support  --->

              IOMMU default domain type (Translated - Strict)  --->

        [ ]   AMD IOMMU support

        [*]   Support for Intel IOMMU using DMA Remapping Devices

        [*]     Support for Shared Virtual Memory with Intel IOMMU

        [*]     Enable Intel DMA Remapping Devices by default

        [*]     Enable Intel IOMMU scalable mode by default

        [*]   Support for Interrupt Remapping

File systems --->

    [ ] Second extended fs support

    [ ] The Extended 3 (ext3) filesystem

    [*] The Extended 4 (ext4) filesystem

    [*]   Use ext4 for ext2 file systems 

    [*]   Ext4 POSIX Access Control Lists

    [*]   Ext4 Security Labels 

    [ ] JBD2 (ext4) debugging support 

    [ ] Reiserfs support 

    [ ] JFS filesystem support 

    [ ] XFS filesystem support 

    [ ] GFS2 file system support

    [ ] Btrfs filesystem support

    DOS/FAT/NT Filesystems  --->

        [*] MSDOS fs support

        [*] VFAT (Windows-95) fs support

    Pseudo Filesystems --->

        [*] /proc file system support

        [*] Tmpfs virtual memory file system support (former shm fs)

    Native Language support --->

        (utf8) Default NLS Option

        [*]   Codepage 437 (United States, Canada)

        [*]   Codepage 850 (Europe)

        [*]   ASCII (United States)

        [*]   NLS ISO 8859-1  (Latin 1; Western European Languages)

        [*]   NLS ISO 8859-15 (Latin 9; Western European Languages with Euro)

        [*]   NLS UTF-8
```

In allen Links die ich Dir jetzt gebe ist nur der Teil für die Kernel Konfiguration wichtig (aber natürlich kannst Du gleich alles lesen ... für später).

Für Deine Festplatte (auch SSD) lies dies und konfiguriere so:

https://wiki.gentoo.org/wiki/HDD

Wenn Du eine NVMe-"Platte" hast, lies dies und konfiguriere so:

https://wiki.gentoo.org/wiki/NVMe

Falls Du KEINE heutzutage gebräuchliche SATA Festplatte hast (also z.B. PATA oder schlimmer), lies dies und konfiguriere so:

https://wiki.gentoo.org/wiki/Kernel/Gentoo_Kernel_Configuration_Guide#IDE_chipsets_and_DMA

Was man auch noch lesen kann (aber nicht unbedingt notwendig ist):

https://wiki.gentoo.org/wiki/Kernel/Gentoo_Kernel_Configuration_Guide

Speichere jetzt gleich die Konfiguration, damit Du einen definierten Stand hast, falls Du Dich später irgendwo vertust. Dann kannst Du nämlich die Konfiguration OHNE Sichern verlassen und von diesem Punkt aus neu starten (mit "make menuconfig").

Hast Du schon selbst den Unterschied zwischen [*] und -*- herausgefunden ? Falls nicht, lies das:

https://wiki.gentoo.org/wiki/Kernel/Configuration#Usage

Edit 2022-01-14: Hier hat @NeddySeagoon kurz erläutert wie die Kernel-Module zur Ansteuerung der Festplatte aufeinander aufbauen:

https://forums.gentoo.org/viewtopic-p-8688524.html#8688524

2. MUSS: Konfiguriere Deine Grafikkarte anhand dieser beiden Links (Hier findest Du auch die Werte für VIDEO_CARDS für Deine make.conf):

https://wiki.gentoo.org/wiki/Framebuffer

- UND - einem Link:

https://wiki.gentoo.org/wiki/Intel

- oder -

https://wiki.gentoo.org/wiki/Nouveau

- oder -

https://wiki.gentoo.org/wiki/Radeon

- oder -

https://wiki.gentoo.org/wiki/AMDGPU

... und speichere ...   :Smile: 

3. MUSS: Konfiguriere als nächstes den Microcode anhand dieser Links und Deiner Daten auf Deinem ersten Blatt Papier:

https://forums.gentoo.org/viewtopic-t-1065464.html

(Das gleiche wird hier - aber natürlich viel verwirrender  :Wink:  - auch erklärt: https://wiki.gentoo.org/wiki/Intel_microcode -> chapter: "NEW method without initram-fs/disk")

- oder-

https://wiki.gentoo.org/wiki/AMD_microcode

... und speichere ...   :Smile: 

4. MUSS: Tastatur und Maus:

https://wiki.gentoo.org/wiki/Libinput

5. MUSS: Suche Deinen Ethernet-Treiber indem Du ein / im Hauptmenü eingibst. Danach gib den Modul-Namen aus Deinen Notizen von oben ein. Du erhältst ein "Defined at drivers/net/ethernet/....". Genau da gehst Du rein, aktivierst Dein Ethernet-Modul statisch mit [*] und löscht bei allen anderen Ethernet-Modulen das <M> raus (sofern vorhanden), da wir sonst keine anderen Ethernet-Module unnötigerweise mitcompilieren wollen.

6. MUSS: Mache Schritt Nr. 5 für alle übrig geblienen Module aus Deiner Abfrage mit lspci -k (einige hast Du ja vermutlich bereits gesetzt, wie z.B. vermutlich ahci) ... und speichere ...   :Smile:  - zumindest für alle Module die der Kernel unbedingt benötigt um seine Root Partition zu finden (Sound ist jetzt noch nicht so wichtig  :Wink:  ). Falls Du z.B. das Modul "vmd" findest, dann musst Du das unbedingt enabeln:

```
Device Drivers  --->

    [*] PCI support  --->

        PCI controller drivers  --->

            [*] Intel Volume Management Device Driver
```

(war hier ein Problem: https://forums.gentoo.org/viewtopic-t-1156306-highlight-.html )

Falls das Modul thunderbolt in Deiner lspci-Abfrage auftaucht (weil Du einen USB-C hast) und Du dieses mit / suchst, wirst Du leider nur "INTEL_WMI_THUNDERBOLT" finden. Dies ist aber das falsche; das Modul thunderbolt ist hier versteckt:

```
Device Drivers  --->

    [*] Unified support for USB4 and Thunderbolt  --->
```

Enable bitte nur das und enable auf keinen Fall "write by debugfs" in diesem Submenu !

Bezüglich der Sicherheit lies das hier: https://docs.kernel.org/admin-guide/thunderbolt.html

7. Kein MUSS - aber mehr als nur sinnvoll: Falls Du eine "High-end-CPU" mit vielen logischen Kernen hast, überprüfe diese Einstellung und ändere es ab auf die Anzahl Deiner logische Kerne:

```
Processor type and features  --->

    (15) Maximum number of CPUs
```

(wurde hier gefunden: https://forums.gentoo.org/viewtopic-p-8744767.html#8744767 )

8. Kein MUSS - nur ein Hinweis: Falls Du ein hypermodernes Notebook haben solltest mit Gemeinheiten wie z.B. Touchpad-Anbindung über I2C, dann lese doch auch gleich Post Nr. 9 dieses Threads; lies dann auch gleich hier weiter und kombiniere das mit dem Schritt (Y) !

Das sollte vorerst genügen und Du kannst den Kernel jetzt gleich compilieren. Wenn Du dann in A.3 einen Neustart gemacht hast und somit weißt, dass dieser Kernel bootet, kannst Du in aller Ruhe weiter konfigurieren.

Folgendes gilt es - jetzt oder später - "abzuarbeiten":

-----------------------------------------------------------------------------------

- https://wiki.gentoo.org/wiki/ALSA (Hier findest Du auch die Werte für ALSA_CARDS für Deine make.conf)

- https://wiki.gentoo.org/wiki/Power_management/Processor Hier aktivierst Du: High Resolution Timer Support, Idle dynticks system und HPET Timer Support. Für neuere Intel-Prozessoren sollte ausschließlich P-State benutzt werden; für Desktops dann: Performance; für Notebooks: Powersave. Siehe auch ->

- https://wiki.gentoo.org/wiki/Power_management/Guide

- https://wiki.gentoo.org/wiki/System_time

- Für KDE Vaults (meine Empfehlung) benötigen wir: https://wiki.gentoo.org/wiki/Encfs

- Optional: https://wiki.gentoo.org/wiki/CDROM

- Optional: https://wiki.gentoo.org/wiki/Webcams und/oder https://wiki.gentoo.org/wiki/Motion

- Optional: Nur wenn Du mal einen unter Windows mit NTFS formattierten USB-Stick lesen möchtest: https://wiki.gentoo.org/wiki/NTFS

- (Höchst optional: https://wiki.gentoo.org/wiki/ECryptfs )

(Y) Mache Schritt Nr. 5 für alle Module aus Deiner Abfrage mit lsmod ... (die meisten dürften jedoch schon aktiviert sein).

(Z) wie: Zuletzt ... entferne alles, was definitiv nicht gebraucht wird. Bei mir z.B.: Alles mit IPv6, initramfs, serielle und paralelle Treiber, und alle INTEL_MEI-Module; lies in der Hilfe was das ist und ob Du das wirklich willst/brauchst  :Wink:   Ich habe an meinem Desktop-Rechner ebenso verzichtet (weil unbenutzt) auf PCH LPC, GPIO, i2C, pinctrl und SMBUS.

Falls Du einen hochauflösenden Monitor (4K) hast und Dir die Ausgabe im Terminal zu klein ist, kannst Du einen größeren Font wählen:

```
Library routines  --->

    [*] Select compiled-in fonts

        [*] Terminus 16x32 font (not supported by all drivers)
```

-----------------------------------------------------------------------------------

Nun compilieren wir den Kernel und installieren ihn automatisch nach /boot mittels "make install". Benutze beim Paramter "-j" die Anzahl der Kerne Deiner CPU (ich habe 8  ). Aufgrund meines Backup-Konzepts erstelle ich ein Verzeichnis in /etc und kopiere dort die Kernel-Konfiguration rein. Der "eselect kernel" verwaltet lediglich den soft-link von /usr/src/linux. (Du kannst das gerne immer überprüfen mit "ls -l /usr/src" )

```
# make -j 8

# make install

# make modules_install

# mkdir /etc/MY

# cp .config /etc/MY/config-X-Y-Z

# eselect kernel list

# eselect kernel set 1

```

Ausblick: Im zweiten Teil der manuellen Konfiguration des Kernels werden wir u.a. das umsetzen:

https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings

Vorläufiges Cheat Sheet - gültig ab erfolgreichen Reboot in A.3:

```
Neue Kernel-Version:

--------------------

# emerge -1uvDp gentoo-sources

# mount /boot

# cd /usr/src/linux-X.Y.Z-gentoo

# cp /usr/src/linux/.config .

# make oldconfig

# make -j 8

# make install

# make modules_install

# cp .config /etc/MY/config-X-Y-Z

# grub-mkconfig -o /boot/grub/grub.cfg

# eselect kernel list

# eselect kernel set

# umount /boot

Änderung der Konfiguration des bestehenden Kernels:

---------------------------------------------------

# mount /boot

# cd /usr/src/linux

# make menuconfig

# make -j 8

# make install

# make modules_install

# cp .config /etc/MY/config-X-Y-Z-revA

# grub-mkconfig -o /boot/grub/grub.cfg

# umount /boot

```

Edit 2021-11-14 aus aktuellem Anlass: Falls Du mal eine neue Version einspielen willst UND gleichzeitig die Konfiguration ändern willst, dann empfehle ich dringend das hintereinander zu machen (also zweimal reboot). Sollte es ein Problem geben, weißt Du sonst nicht, ob es an der neuen Version oder Deiner neuen Konfiguration liegt. Wenn Du es aber unbedingt gleichzeitig machen willst, dann gilt: Ein "make menuconfig" ersetzt NICHT ein "make oldconfig" ! (Es würden dann automatisch alle Defaults übernommen = nicht gut.) Das bedeutet, Du musst dann wirklich erst ein "make oldconfig" machen, bevor Du gleich danach über "make menuconfig" Deine Konfiguration änderst. (Oder umgekehrt: Du änderst in der alten Version die Konfig, kopierst die .config in die neue Version und machst dort dann Dein "make oldconfig")

P.S.: @Josef.95 hat in diesem Thread https://forums.gentoo.org/viewtopic-t-1133013-highlight-.html darauf hingewiesen, dass man sich das Umkopieren der alten .config sparen kann, wenn man ein "make oldconfig" macht. @mike155 meinte im gleichen Thread, dass das aber nicht immer funktionieren muss. Das ist ein Grund warum ich das Umkopieren der .config in diesem Cheat Sheet aufgeführt habe. Der zweite Grund ist: Wenn Du einen stub kernel (nach B.2) machst, wird es dann kein "make install" mehr geben. Dann MUSS eh wieder die .config manuell umkopiert werden (Du bekommst in B.2 aber eh wieder ein passendes Cheat Sheet).

P.P.S.: Es gibt einige Anleitungen, die zuerst den Soft-Link per "eselect kernel set X" umbiegen, dann in /usr/src/linux wechseln und dort alles nötige machen. Jetzt könnte man meinen, es ist doch egal wie ich vorgehe, hauptsache ich gehe in das richtige Verzeichnis und kopiere die alte .config vom richtigen Verzeichnis in das richtige. Warum gehe ich so vor, dass ich erst nach dem Erstellen des neuen Kernels den Soft-Link umbiege ? Weil es seltene Momente gibt, wo der neue Kernel nicht compiliert wird und der "make" abbricht ... denkst Du dann wirklich daran, dass Du in so einem Fall den Soft-Link wieder zurück biegen musst ? Wenn man wirklich sehr penibel sein will, dürfte man den Soft-Link eigentlich erst dann umbiegen, wenn der neue Kernel auch erfolgreich gebootet hat.

Weiter geht es in A.3Last edited by pietinger on Mon Oct 24, 2022 1:13 pm; edited 135 times in total

----------

## pietinger

Google Deine Hardware

1. Jeder Hersteller Deines Motherboards gibt Dir exakte Informationen über die verwendeten Chipsätze. Diese benötigst Du mindestens für Deine Soundkarte, da Du im Kernel den notwendigen Codec enabeln musst, Du diesen aber in keiner lspci-Abfrage siehst. Wenn Du für Deine Soundkarte vom Hersteller die Information "ALCxxxx" bekommst, weisst Du sofort, dass Du die "Realtek-Codecs" enabeln musst.

2. Die zweite Anlaufstelle ist "cateee.net". Mache diese Abfrage (das "n" ist wichtig):

```
# lspci -vn
```

und google dann nach "cateee" gefolgt von der achtstelligen ID-Nr. Beispiel von meiner Kiste:

```
[...]

00:1f.3 0403: 8086:a2f0

        Subsystem: 1458:a0b6

        Flags: bus master, fast devsel, latency 32, IRQ 138

        Memory at ef220000 (64-bit, non-prefetchable) [size=16K]

        Memory at ef200000 (64-bit, non-prefetchable) [size=64K]

        Capabilities: [50] Power Management version 3

        Capabilities: [60] MSI: Enable+ Count=1/1 Maskable- 64bit+

        Kernel driver in use: snd_hda_intel

[...]
```

Meine Suche war dann nach: "cateee 8086:a2f0" ! Dort findest Du das benötigte Kernel-Modul.

----------

## pietinger

Vielen Dank an @mike155 der hier https://forums.gentoo.org/viewtopic-p-8517143.html#8517143 diesen einfachen und genialen Tip gab, den ich einfach 1zu1 hier reinkopiere:

 *mike155 wrote:*   

> In order to avoid mistakes building the kernel, I run
> 
> ```
> dmesg -t >dmesg-$(uname -r)
> ```
> ...

 

Ja, der Trick mit dem Parameter "-t" für dmesg war mir auch neu (man lernt nie aus).

Als KDE-User empfehle ich "Kompare" um die beiden Dateien zu vergleichen.

Habe ich eigentlich schon mal irgendwo erwähnt, dass man ruhig öfter mal in seine /var/log/messages schauen sollte ...   :Wink: 

----------

## pietinger

Aus aktuellem Anlass möchte ich noch einmal darauf hinweisen, warum es unter dem Gesichtspunkt der Sicherheit so wichtig ist, einen möglichst schlanken Kernel zu haben ... RAPL braucht kein privater User mit einem Desktop, sondern nur Server oder Mainframes - wenn überhaupt ...

Siehe aktuell: https://www.heise.de/news/Platypus-Sicherheitsluecke-missbraucht-Messfunktion-von-Intel-Prozessoren-4953484.html

Gerade kam ein Kernel-Update von 5.9.7 auf 5.9.8 herein, welches nur aus einem einzigen Patch besteht:

https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=linux-5.9.y&id=b72aaa9506b38e68f3476a642d0e42b3071f82bb

Für mich kein Grund den sofort einzuarbeiten, denn ich habe: 

# CONFIG_PERF_EVENTS_INTEL_RAPL is not set

... ich schreibe das einfach nur, weil es leider so oft die Meinung gibt, so viel wie möglich enabeln zu müssen ...

 :Smile: 

----------

## pietinger

Warum habe ich einen Unstable-Kernel mit Dir installiert ?

Zu dem Zeitpunkt der Erstellung dieser Doku-Reihe waren im damaligen stable Kernel noch nicht alle benötigten Features. Diese haben wir jetzt aber in allen 5.9er und dem jetzigen 5.10er. Ich werde weiterhin zu Testzwecken den neuesten Kernel installieren, doch möglicherweise ist es für Dich sinnvoll auf einen LTS kernel zu gehen. Hier findest Du eine Übersicht der derzeitigen long term support kernels:

https://www.kernel.org/category/releases.html

Wenn Du also auf dem jetzigen 5.10.x bleiben willst, musst Du nur alle neueren Kernels maskieren:

```
# nano /etc/portage/package.mask
```

und dies ergänzen:

```
>=sys-kernel/gentoo-sources-5.11.0

>=sys-kernel/linux-headers-5.11
```

Edit 2022-03-24: Ich habe das noch übersichtlicher (in englisch) hier beschrieben: https://wiki.gentoo.org/wiki/User:Pietinger/Tutorials/Selecting_a_convenient_kernel_version

Bei der Gelegenheit möchte ich Dir auch noch zwei sehr nützliche Links mitgeben. Hier siehst Du was sich in den jeweiligen Hauptversionen ändert:

https://kernelnewbies.org/LinuxChanges

Und diesen Link besuche ich immer um zu prüfen ob ich wirklich jede Minor Version sofort installieren sollte (was nicht der Fall ist und ich deswegen schon mal eine oder zwei Minor Versionen überspringe):

https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git

(Klicke einfach auf die jeweilige "Branch" und Du bekommst eine Liste mit allen Patches; ich lese mir meist nur die Überschriften durch).

P.S.: Wenn Du Dir unsicher bist ob Du auf 5.10.x bleiben solltest, ein Hinweis von mir: Upgraden ist immer kein Problem. Wenn Du aber zurück willst und Du hast schon die Linux-Headers für beispielsweise 5.13 installiert UND einige Programme gegen diese Header-Dateien compiliert, dann ist der Weg zurück zu 5.10.x schon sehr mühselig, da Du dann alle diese Programme erneut gegen die Linux-Headers von 5.10 compilieren solltest/müsstest.

Lange Rede - kurzer Sinn: Ein Upgrade auf neuere Kernels ist immer problemlos möglich; ein Downgrade aber nicht so ohne weiteres !Last edited by pietinger on Thu Mar 24, 2022 12:40 pm; edited 2 times in total

----------

## pietinger

I want it all, I want it all, and I want it now

[(c) by Queen]

Du hast schon viel Erfahrung in der Konfiguration eines Kernels und willst auch alles aus diesem Guide umsetzen. Weil Du aber nicht X-mal in die Kernel Konfiguration rein willst, möchtest Du deswegen gleich mal alles auf einmal im Kernel konfigurieren.

Das wäre theoretisch möglich wenn Du wüsstest welche Netfilter-Module Du für Deine FireWall-Konfiguration brauchst (Du weisst ja sicherlich, dass je nach FW-Konfiguration unterschiedliche Netfilter-Module benötigt werden). Ehrlich - ich weiß selbst nicht auswendig welche benötigt/angezogen werden. Deshalb habe ich es auch tatsächlich so gemacht, dass ich erstmal alle mit [M] reingenommen habe, und nach dem Abarbeiten von B.1 mit "lsmod" geprüft habe, welche angezogen wurden. Meiner Meinung nach ist es deswegen nötig, dass Du mindestens zweimal in die Kernel Konfiguration rein gehst/musst ... Wie könnte man dabei vorgehen ?

Beim ersten Mal (also hier/jetzt bei der Initialen Kernel Konfig) kannst Du auf einen Schlag folgendes konfigurieren:

1. Alles von A.2 (= hier 1.Post)

2. Alle Netfilter-Module mit [M] reinnehmen (wie in B.1 beschrieben)

3. Falls Du für Dein Notebook B.4 machen möchtest, gleich die dortig beschriebene Kernel-Konfig

4. Das 1. Kapitel von C.2 (hilft auch gleich für B.2 und D.2)

5. Alles von B.2 ausser das Disabeln des Modules-Support. Der bleibt erstmal drin !

6. D.2 komplett (*)

Danach machst Du einfach Deine Grundinstallation nach A.3 weiter. Danach erledigst Du B.1 und weißt jetzt welche Netfilter-Module Du brauchst.

Zweiter Run:  :Wink: 

1. Diese Netfilter-Module nimmst Du fest in den Kernel rein (und schmeißt die anderen unbenötigten raus).

2. Du disablest den Module Support und hast nun einen monolithischen Kernel

3. Den Rest von C.2

Als Experte erkennst Du sicherlich, dass einiges vom 1. Run in den 2. verschoben werden kann.

Minimum für den ersten wäre somit:

1. Die "MUSS" aus A.2

2. Alle Netfilter-Module mit [M] reinnehmen (wie in B.1 beschrieben)

3. Falls Du für Dein Notebook B.4 machen möchtest, gleich die dortig beschriebene Kernel-Konfig

Den Rest dann im zweiten Durchlauf ... 

* Rückblickend muss ich feststellen, dass es einfacher (und damit sinnvoller) ist, zuerst D.AppArmor zu installieren und danach erst C.IMA zu machen. Das will ich Dir deshalb jetzt gleich empfehlen.

Ja ... für C.3 musst Du leider wirklich noch zweimal in die ... geht leider nicht anders ... Minimum ist deshalb 4 mal ...

.

----------

## pietinger

Folgendes muss ich einfach hier rüber kopieren, da ich es niemals so perfekt ausdrücken könnte wie unser @NeddySeagon:

 *Quote:*   

> Horrible things happen if you use a text editor on the kernel .config file.
> 
> If you are lucky, you will get a kernel that won't build. If not, it may be broken in ways that nobody has ever seen before.
> 
> Use menuconfig and its search. Press /
> ...

 

(aus: https://forums.gentoo.org/viewtopic-p-8686380.html#8686380 )

----------

## pietinger

Update von 5.10.x auf 5.15.x

Heute hatte ich endlich mal Zeit dieses Update vorzunehmen. Die meisten neuen Optionen die beim "make oldconfig" abgefragt werden, sind mit "N" vorbelegt und können einfach mit <return> übernommen werden. Interessanterweise gab es zwei neue Optionen, die (im Hilfetext) von den Kernel Entwicklern empfohlen werden, als Default aber auch mit "N" vorbelegt sind. Ich bin dieser Empfehlung gefolgt und habe abweichend vom Default diese beiden enabled (den SimpleFB sollte man sowieso immer haben):

```
CONFIG_WERROR=y

CONFIG_SYSFB_SIMPLEFB=y
```

Daneben gibt es einige neue sicherheitsrelevante Optionen (mit Auswirkung auf die Performance). Bei zwei dieser Neuen möchte ich auf die Empfehlungen von KSPP warten und habe sie vorerst noch nicht enabled (also den Default "N" übernommen). Ich vermute aber stark, dass wir diese noch benötigen:

```
# CONFIG_SCHED_CORE is not set

# CONFIG_KFENCE is not set
```

Diese Optionen habe ich im Vorgriff auf zu erwartende KSPP-Empfehlungen jedoch schon heute aktiviert (da es dazu bereits Infos gibt):

```
CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT=y

CONFIG_IOMMU_DEFAULT_DMA_STRICT=y

CONFIG_ZERO_CALL_USED_REGS=y
```

(Der letzte Absschnitt müsste eigentlich nach B.2 da es das Thema "Hardening the Kernel" betrifft. Ich wollte es aber nicht auseinanderreißen.)

Edit 2022-03-30: Siehe mehr im heutigen Post: "Neue Empfehlungen in KSPP" in B.2Last edited by pietinger on Wed Mar 30, 2022 11:24 pm; edited 1 time in total

----------

## pietinger

Moderne Notebooks und ein Touchpad ...

... welches über i2c angesteuert wird kann zu Problemen führen. Falls es für Dein Notebook bereits eine Beschreibung gibt welche Kernel Module benötigt werden, lass' Dich davon leiten. Suche am besten erstmal in unserem Gentoo Wiki:

https://wiki.gentoo.org/wiki/Category:Laptops

Gerade die Thinkpads benötigen manchmal sehr ungewöhnliche Kernel Optionen; Beispiel: https://wiki.gentoo.org/wiki/Lenovo_ThinkPad_X1_Carbon_7th_generation

Während manche Intel Systeme sehr genügsam sind; Beispiel: https://wiki.gentoo.org/wiki/Dell_Latitude_5491#Touchpad

Ein weiteres Beispiel für ein AMD System: https://wiki.gentoo.org/wiki/Asus_Tuf_Gaming_fx505dy#Touchpad

Ein Dell XPS 9520 war sehr gemein: Wir dachten er benötigt PINCTR_ALDERLAKE, es war aber PINCTRL_TIGERLAKE. Was er sonst noch benötigt findest Du hier: https://forums.gentoo.org/viewtopic-p-8737053.html#8737053 (Wo Du diese Optionen einstellst findest Du hier weiter unten).

Das gleiche erneut bei einem System76 Darter Pro 8: https://forums.gentoo.org/viewtopic-t-1157071-highlight-.html

Wenn es keine Beschreibung für Dein Notebook gibt bleibt meist nur ein Suchen der benötigten Module. Hier kann folgendes helfen: Boote mit einer LiveCD von Ubuntu, oder der SystemRescueCD; prüfe dann aber in jedem Fall ob dort Dein Touchpad richtig erkannt wird; falls ja mache dann folgende Abfragen:

```
# lspci -k

# lsmod | more

# dmesg | grep input
```

Vergleiche dies nun mit Deinen Listen aus dem 1.Post von hier. Das sollte helfen die benötigten Kernel-Module zu finden. In den meisten Fällen benötigst Du alles folgende:

(Ich versuche hier alle bisherigen Erkenntnisse zusammen zu fassen. Diese stützen sich aber nur auf Erkenntnisse in diversen Threads, da ich selbst keines dieser modernen Notebooks habe. Meine Erfahrung beruht also nur auf die Rückmeldungen vieler User hier.)

Ich fange mal (wieder) von hinten an: Wenn Dein Touchpad zwar erkannt wird und nur die Gesten-Steuerung nicht funktioniert, liegt es meist daran, dass nur das hier fehlt:

```
Device Drivers  --->

    HID support  --->

        Special HID drivers  --->

            <*> HID Multitouch panels
```

Wenn es gar nicht (oder nicht richtig) erkannt wird, fehlt meist eine Konfiguration im Kernel. Was (fast) immer benötigt wird:

1) Low Power System (weil Notebook)

2) i2c

3) gpio

4) pinctrl

5) hid support

6) input

Diese unterscheiden sich zwischen a) INTEL und b) AMD Systemen:

1a) Intel Low Power System

```
Processor type and features  --->

    [*] Intel Low Power Subsystem Support

Device Drivers  --->

    Multifunction device drivers  --->

        [*] Intel ICH LPC

        [*] Intel Low Power Subsystem support in PCI mode

        [*] Intel Low Power Subsystem support in ACPI mode
```

1b) AMD Low Power System

```
Processor type and features  --->

    [*] AMD ACPI2Platform devices support
```

2) Siehe: https://wiki.gentoo.org/wiki/I2C

Intel-Systeme benötigen fast immer nur den Intel 82801; siehe: https://www.kernel.org/doc/html/latest/i2c/busses/i2c-i801.html

Wähle unter diesen Modulen (für Synopsys nimm beide):

```
Device Drivers --->

    I2C support --->

        i2C Hardware Bus support  --->

            [?] AMD 8111

            [?] AMD MP2 PCIe

            [?] Intel 82801 (ICH/PCH)

            [?] SMBus Control Method Interface

            [?] Synopsys DesignWare Platform

            [?] Synopsys DesignWare PCI
```

3a) Intel gpio (damit dieser ausgewählt werden kann, muss vorher in 1a der "Intel ICH LPC" enabled worden sein; sonst siehst Du den gar nicht)

```
Device Drivers  --->

    [*] GPIO Support  --->

        [*]   Character device (/dev/gpiochipN) support

        Memory mapped GPIO drivers  --->

            [*] Intel ICH GPIO
```

3b) AMD gpio. Meistens genügt das folgende (4b) und es muss hier garnichts gemacht werden, außer Du hast wirklich ein sehr spezielles Teil. Schau' deswegen in Deiner Liste nach.

```
Device Drivers  --->

    [*] GPIO Support  --->

        [*]   Character device (/dev/gpiochipN) support

        Memory mapped GPIO drivers  --->

            (see your output of "lsmod")
```

4a) Intel pinctrl. Suche hier nach dem Codenamen Deiner CPU und dem Codenamen des Chipsatzes, bzw. Platform Controller Hubs (PCH):

https://en.wikipedia.org/wiki/List_of_Intel_microprocessors

https://en.wikipedia.org/wiki/Platform_Controller_Hub

https://en.wikipedia.org/wiki/List_of_Intel_chipsets

Diese Codenamen werden nämlich in folgender Sektion verwendet. Wenn keiner Deiner Codenamen dabei ist, dann verwende einen älteren, weil einige aufwärtskompatibel sind und gleich für mehrere Generationen verwendet werden. (Beispiel: Mein Intel i7-6700 ist ein "Skylake" auf einem Gigabyte Z270 Mainboard, also "Union Point". Allerdings gibt es diesen Menupunkt nicht, weil der ältere PCH kompatibel ist. Deshalb verwende ich den "Sunrise Point".)

```
Device Drivers  --->

    Pin controllers  --->

        One of these Intel Modules; see codenames
```

4b) AMD pinctrl

```
Device Drivers  --->

    Pin controllers  --->

        [*]   AMD GPIO pin control
```

Edit 2022-12-09: Auch wenn ich es nicht verstehe, aber es war (manchmal?) notwendig pinctrl statisch <*> zu konfigurieren, statt als <M>odul !

5) hid support

```
Device Drivers  --->

    HID support  --->

        [*]   /dev/hidraw raw HID device support

        [*]   Generic HID driver

        I2C HID support  --->

            [*] HID over I2C transport layer
```

6) input. Für die meisten Touchpads genügt bereits das "Event interface" (welches wir ja schon enabled haben; siehe "Libinput"). Für ein i2c-ELAN touchpad nimm alle diese Module hinzu:

```
Device Drivers  --->

    Input device support  --->

        Mice  --->

            [*] ELAN I2C Touchpad support

            [*] Enable I2C support

            [*] Enable SMbus support
```

Falls Dein Notebook einen Synopsis Designware PCIe Controller hat, kann es notwendig sein folgendes zu aktivieren:

```
Device Drivers  --->

    [*] PCI support  --->

        PCI controller drivers  --->

            DesignWare PCI Core Support  --->

                [*] Platform bus based DesignWare PCIe Controller - Host mode
```

Viel Erfolg ! Rückmeldungen nehme ich immer gerne entgegen ...  :Wink: 

Edit 2022-06-06: Lenovo X12 benötigt mindestens Kernel 5.15.45 (oder äquivalente Version der anderen Kernel Serien). Details: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=linux-5.15.y&id=12b635b4e349e6d03a2ec698f946073f62770892

Edit 2022-09-05: ThinkPad C13 Yoga (oder Chromebook) benötigt mindesten Kernel 5.15.65 (-""-). Details: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=linux-5.15.y&id=d74ce3ece4028a85aacf0d26a5ce13c872fcb949

.Last edited by pietinger on Fri Dec 09, 2022 12:13 pm; edited 2 times in total

----------

## pietinger

Kernel Command Line Paramter: earlycon=efifb

Falls Du mal in die Verlegenheit kommen solltest, dass ein Kernel Developer Dir sagt Du sollst obigen Parameter aktivieren, dann könnte es Dir wie mir gehen: Es bewirkt NICHTS und Du hast im Systemlog:

```
localhost kernel: Kernel command line: root=PARTUUID=99beb5b2-b529-40fb-b0bc-3250a5237491 ro loglevel=8 lsm.debug ima_appraise=enforce earlycon=efifb

localhost kernel: Unknown kernel command line parameters "earlycon=efifb", will be passed to user space.
```

Eine Suche im Internet ergibt:

 *Quote:*   

> Early boot messages on UEFI systems with grub
> 
> Geschrieben von Polynomial-C am Donnerstag, Mai 20. 2021
> 
> For quite a while I had the problem on UEFI systems that after grub had loaded the kernel there were no boot messages shown until KMS kicked in and switched to the final framebuffer driver. Finally slashbeast, a fellow Gentoo dev, told me the correct kernel cmdline to make early boot messages appear:
> ...

 

( https://www.gentoofan.org/blog/index.php?/archives/24-Early-boot-messages-on-UEFI-systems-with-grub.html )

Naja, den CONFIG_FB_EFI haben wir eh' schon hier im 1. Post von A.2 enabled, den CONFIG_X86_SYSFB gibts nicht mehr, und die neuen stören überhaupt nicht - sind bei mir sogar enabled:

```
CONFIG_SYSFB=y

CONFIG_SYSFB_SIMPLEFB=y
```

Daran liegts also nicht. Eine Suche mit / in "make menuconfig" nach EFI_EARLYCON (den findest Du nicht mit "z" weil er nur generiert wird aber nicht selektierbar ist) hilft weiter, denn es sagt ganz deutlich was fehlt: SERIAL_EARLYCON (der wird auch nur generiert). Und SERIAL_EARLYCON wiederum benötigt SERIAL_CORE; und dieses bekommen wir mit SERIAL_8250_CONSOLE ...

... Lange Rede - kurzer Sinn: Es fehlten zwei Kernel Optionen. Zuerst musst Du das aktivieren:

```
Device Drivers  --->

    Character devices  --->

        Serial drivers  --->

            [*] 8250/16550 and compatible serial support
```

danach klappt einiges auf, wo schon einiges enabled ist. ZUSÄTZLICH enable den hier:

```
[*]   Console on 8250/16550 and compatible serial port
```

Es ist schon witzig, dass wir serielle Unterstützung benötigen um frühe Ausgaben auf den Bilschirm zu bekommen. Erschrick nicht wenn Du das auf einen 4k Monitor siehst ... ja, es erschlägt einen. Ach ja nochwas: Die Bootzeiten erhöhen sich grausam. Bei mir dauert ein normaler Boot ca. 2,6 Sekunden. Mit diesem Paramter waren es ca. 5,5 Sekunden. Ist normal - ist aber auch nur für die Fehlersuche nötig.

Edit 2022-11-25: Falls Deine Kiste bei einem Kernel PANIC sofort rebootet hast Du eine "-1" in dieser Kernel-Option:

```
Kernel hacking  --->

    Debug Oops, Lockups and Hangs  --->

        (0) panic timeout
```

Ändere es auf 0 oder einen größeren positiven Wert (schau' einfach in die Hilfe).

Wenn Du noch mehr über den Boot-Vorgang Deines Kernel wissen möchtest kannst Du zusätzlich noch zwei Parameter setzen:

 *Quote:*   

> initcall_debug ignore_loglevel earlycon=efifb

 

.

----------

## pietinger

Update auf 6.1

Die Version 6.1 soll der nächste LTS Kernel werden, auch wenn es hier noch nicht gelistet ist (Stand:heute):

https://www.kernel.org/category/releases.html

Normalerweise würde ich mehrere (4,5,6,?) Minor-Versionen warten, bevor ich auf eine neue Major-Version wechsle. Das empfehle ich auch sonst immer jedem ! Gentoo macht das auch für stable  :Wink:  Diesmal war ich aber ein wenig ungeduldiger, weil ich neugierig auf die neuen Security Optionen war. Außerdem habe ich mir die in 6.1.1 enthaltenen Patches angesehen und mit Freude festgestellt, dass keine - für mich - relevanten Patches enthalten sind. Auch die Anzahl der Patches war/ist erstaunlich klein. Tja ...   :Evil or Very Mad: 

Meine erste Umstellung von 5.15.82 auf 6.1.1 war enttäuschend. Kein Sound mehr (der bei mir per DisplayPort direkt an den Monitor geht) ! Und das mit einer puren ALSA Konfiguration (= kein pulseaudio oder pipewire). Ich suchte nach der Ursache und dachte ich wäre von diesem Bug betroffen:

https://bugzilla.kernel.org/show_bug.cgi?id=216836

Nun ja, indirekt war ich schon betroffen von diesem Patch:

https://github.com/torvalds/linux/commit/ef6f5494faf6a37c74990689a3bb3cee76d2544c

Denn mein erster Boot mit 6.1 brachte mir vom ALSA RC-Script (alsasound) mehrere Fehler: [...] failed to obtain info for control #65 (No such file or directory)

Ursache war dann, dass tatsächlich einige Devices dank diesem Patch weggefallen sind und ich meine /etc/asound.conf anpassen musste: Statt 7 war mein HDMI-Ausgang nun 3:

```
defaults.pcm.!device 3
```

Dank der Information in o.g. Bugreport habe ich das alles umschifft und nun endgültig auf 6.1 umgestellt. Ich schreibe das hier nur, falls Du auch betroffen sein solltest.

Edit 2022-12-29: Näheres auch in diesem Link: https://www.phoronix.com/news/AMD-HDMI-Audio-Linux-6.1-Fix

Edit 2022-01-04: Ist für AMD wohl in 6.1.3 mit diesem Patch bereinigt: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=linux-6.1.y&id=f9aafff5448b1d8d457052271cd9a11b24e4d0bd

Natürlich habe ich vorher meine beiden vorhandenen Einträge in der package.mask geändert. Danach wie üblich vorgehen.

```
# nano -w /etc/portage/package.mask

=>

>=sys-kernel/gentoo-sources-6.2.0

>=sys-kernel/linux-headers-6.2
```

make oldconfig

Es ist immer empfehlenswert sich in neue Optionen einzulesen, denn eine Abweichung von der default Vorgabe sollte nur dann erfolgen, wenn man wirklich weiß was man tut - zumindest dann, wenn man eine Option disablen will, die defaultmäßig mit "y" vorbelegt ist. (Aber wir wollen ja auch einen schlanken Kernel). Die Übernahme eines Defaults mit <return> ist meist richtig und gut. Im folgenden werde ich (in der Reihenfolge wie es beim "make oldconfig" auftritt/abgefragt wird) nur die Optionen beschreiben ... :

a) wo ich vom Default abgewichen bin (3, 4, 5, 6, 7, 9, 10, 11), oder

b) die nur für Dich interessant sein könnten (1, 7, 8 ), oder

c) aus einem sonstigen Grund (2, 10).

Gleich vorweg: Es sind erstaunlich viele neue Module für Notebooks dazu gekommen. Sobald also beim "make oldconfig" die Driver-Sektion startet, solltest Du etwas genauer hinschauen, wenn irgendwo etwas mit "Asus", "Dell", "Fujitsu" oder ... abgefragt wird (und Du dieses Teil hast).

1. Falls Du einen AMD-Prozessor hast, könnte das höchst interessant sein (Ich kann es mangels AMD Prozessor leider nicht testen).

 *Quote:*   

> AMD Processor P-State driver (X86_AMD_PSTATE) [N/y/?] (NEW)

 

2. Ich finde es toll wenn Security Optionen schon mal defaultmäßig enabled sind. Es könnte sein, dass im nächsten Update von KSPP diese Option deshalb nicht mehr extra erwähnt wird. Natürlich übernehmen wir den Default mit <return> !  :Wink: 

 *Quote:*   

> Support for randomizing kernel stack offset on syscall entry (RANDOMIZE_KSTACK_OFFSET) [Y/n/?] (NEW)

 

3. Das brauche ich nicht für meinen monolithischen Kernel und habe ich deshalb disabled.

 *Quote:*   

> Legacy autoloading support (BLOCK_LEGACY_AUTOLOAD) [Y/n/?] (NEW) n

 

4. Jetzt kommt etwas Interessantes: "multi-generational LRU". In diversen Beschreibungen wurde vermutet, dass es defaultmäßig enabled sein soll. Das ist aber nicht der Fall. Ich habe es aber schon aktiviert, weil es performanter sein soll. Natürlich kann ich jetzt noch nicht sagen, wie die Stabilität sein wird. Wenn Du auf Nummer Sicher gehen willst, lass es disabled und schau' in ca. 4 Wochen nochmal in diesen Post. Falls ich diesen Post bis dahin nicht editiert habe, sollte es sich bewährt haben.  :Wink: 

Nähere Informationen findest Du im Kapitel "Core kernel" von:

https://lwn.net/Articles/910608/

Hier sind dann auch alle weiteren Links, wie z.B.:

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=07017acb0601

 *Quote:*   

> Multi-Gen LRU (LRU_GEN) [N/y/?] (NEW) y
> 
>   Enable by default (LRU_GEN_ENABLED) [N/y/?] (NEW) y
> 
>   Full stats for debugging (LRU_GEN_STATS) [N/y/?] (NEW) n

 

5. Das brauche ich für meine Firewall nicht. Wenn Du B.1 fast identisch hast, brauchst Du es auch nicht.

 *Quote:*   

> Netfilter egress support (NETFILTER_EGRESS) [Y/n/?] (NEW) n

 

6. Natürlich bin ich paranoid und will alles so sicher wie möglich haben ! Ich habe natürlich keine Ahnung ob systemd (oder ein sonstiges, von mir nicht genutztes Modul) damit glücklich ist.

 *Quote:*   

> Use nosuid,noexec mount options on devtmpfs (DEVTMPFS_SAFE) [N/y/?] (NEW) y

 

7. Das brauche ich auch nicht - aber vielleicht Du ?

 *Quote:*   

> WMI embedded Binary MOF driver (WMI_BMOF) [Y/n/?] (NEW) n

 

8. Folgende habe ich einfach mit <return> übernommen und nicht enabled, könnten aber für Dich interessant sein:

 *Quote:*   

> Intel PMC Core driver (INTEL_PMC_CORE) [N/y/?] (NEW)
> 
> Intel Uncore frequency control driver (INTEL_UNCORE_FREQ_CONTROL) [N/y/?] (NEW) 
> 
> Intel HID Event (INTEL_HID_EVENT) [N/y/?] (NEW)

 

9. Das brauchen wir für unser AppArmor nicht.

 *Quote:*   

> Allow loaded policy to be introspected (SECURITY_APPARMOR_INTROSPECT_POLICY) [Y/n/?] (NEW) n
> 
> Perform full verification of loaded policy (SECURITY_APPARMOR_PARANOID_LOAD) [Y/n/?] (NEW) n

 

10. Das folgende ist seehr wichtig. Es muß Option "3" sein, sonst hast Du kein Gentoo KSPP mehr (siehe B.2). Ich hatte hier natürlich zuerst gleich mal das Maximale gesetzt (2) um dann danach feststellen zu müssen, dass die neue /usr/src/linux/distro/Kconfig (*) das hier abfragt ... und dann alle KSPP Optionen verwirft !

 *Quote:*   

> Randomize layout of sensitive kernel structures
> 
> 3. Limit randomization of structure layout to cache-lines (RANDSTRUCT_PERFORMANCE) (NEW)
> 
> choice[1-3?]: 3

 

11. Diese Security Option habe ich bereits heute enabled. Da warte ich nicht auf eine Empfehlung von KSPP (**).

 *Quote:*   

> Check for invalid mappings in user page tables (PAGE_TABLE_CHECK) [N/y/?] (NEW) y
> 
>   Enforce the page table checking by default (PAGE_TABLE_CHECK_ENFORCED) [N/y/?] (NEW) y

 

*) Die zweite Änderung in der ../distro/Kconfig ist (leider) nur das Enabeln von LANDLOCK ... alle weiteren neuen KSPP Optionen (die ich bereits in B.2 beschrieben habe) fehlen noch  :Sad: 

**) Während ich bei anderen noch auf Empfehlung in KSPP warte; z.B. Indirect Branch Tracking (X86_KERNEL_IBT).

.

----------

