Erklärung von verschiedenen Optionen zur Feineinstellung des Linux-Kernels

General Setup

append to kernel release (CONFIG_LOCALVERSION)
Hier kann der Kernelversion ein String hinzugefügt werden. Wenn man dann später uname nutzt, sieht man den String wieder. Die Gesamtlänge darf 64 Zeichen nicht überschreiten.
Automatically append version information to the version string (CONFIG_LOCALVERSION_AUTO)
Diese Option schaut nach, ob der aktuelle Zweig aus dem git exportiert wurde. Wenn dies der Fall ist, wird -gxxxxxxxx zur Version angehangen.
Support for paging of anonymous memory (swap) (CONFIG_SWAP)
Bei vielen Rechnern reicht der eingebaute RAM oftmals nicht aus und daher werden flüchtige Daten auf sogenannten Swapspeicher ausgelagert. Falls du solch einen Swap in deinem System haben möchtest, musst du diese Option auswählen. Generell ist es eine gute Idee, dies auszuwählen.
System V IPC (CONFIG_SYSVIPC)
Normalerweise ist der Arbeitsspeicher von einzelnen Programmen voneinander getrennt. Um dennoch miteinander zu "reden", gibt es die Interprozesskommunikation. Dies sollte auf jeden Fall aktiviert sein, sonst können evtl. einige Programme nicht funktionieren. Genauere Informationen hierzu findest du mit dem Aufruf info ipc oder in dem Abschnitt 6.4 des Linux Programmers Guide.
POSIX Message Queues (CONFIG_POSIX_MQUEUE)
Die POSIX-Variante von Messagequeues sind ein Teil der Interprozesskommunikation. Hierbei hat jede Nachricht eine Priorität, die darüber entscheidet, ob sie von einem Prozess empfangen wird. Wenn du das nutzen möchtest, brauchst du weiterhin die mqueue Bibliothek. Du kannst diese Messagequeues auch als Dateisystem mqueue mounten.
BSD Process Accounting (CONFIG_BSD_PROCESS_ACCT)
Hiermit kann der Kernel angewiesen werden, Prozessinformationen in eine Datei zu schreiben. Der Aufruf hierzu erfolgt durch einen sspeziellen Systemaufruf eines Programmes im Userspace. Wenn der betreffende Prozess später beendet wird, werden Informationen darüber an die Datei angehangen. Diese Informationen umfassen u.a.:
  • Zeit der Erzeugung
  • User ID und Group ID
  • Aufrufbefehl
  • Speicherverbrauch
  • kontrollierendes Terminal
Eine genaue Übersicht findet sich in der Datei include/linux/acct.h. Dort befindet sich folgender struct acct:

struct acct
{
        char            ac_flag;                /* Accounting Flags */
 /*
  *      No binary format break with 2.0 - but when we hit 32bit uid we'll
  *      have to bite one
  */
         __u16           ac_uid;                 /* Accounting Real User ID */
         __u16           ac_gid;                 /* Accounting Real Group ID */
         __u16           ac_tty;                 /* Accounting Control Terminal */
         __u32           ac_btime;               /* Accounting Process Creation Time */
         comp_t          ac_utime;               /* Accounting User Time */
         comp_t          ac_stime;               /* Accounting System Time */
         comp_t          ac_etime;               /* Accounting Elapsed Time */
         comp_t          ac_mem;                 /* Accounting Average Memory Usage */
         comp_t          ac_io;                  /* Accounting Chars Transferred */
         comp_t          ac_rw;                  /* Accounting Blocks Read or Written */
         comp_t          ac_minflt;              /* Accounting Minor Pagefaults */
         comp_t          ac_majflt;              /* Accounting Major Pagefaults */
         comp_t          ac_swaps;               /* Accounting Number of Swaps */
         __u32           ac_exitcode;            /* Accounting Exitcode */
         char            ac_comm[ACCT_COMM + 1]; /* Accounting Command Name */
         char            ac_pad[10];             /* Accounting Padding Bytes */
};
Normalerweise sollte ein Programm nützliche Dinge mit diesen Informationen machen.
BSD Process Accounting version 3 file format (CONFIG_BSD_PROCESS_ACCT_V3)
Hierbei werden die Accountinginformationen in einem neuen Format gespeichert. Das Format ist zu den alten Versionen nicht kompatibel.
Sysctl support (CONFIG_SYSCTL)
Die Sysctl-Schnittstelle ist ein Mittel, um den Kernel während der Laufzeit zu konfigurieren, ohne das man spezielle Werkzeuge dazu benötigt. Alle Informationen werden im Verzeichnis /proc/sys/ abgelegt und können mit echo $VARIABLE > /proc/sys/$ZIEL geändert werden. Auf meinem System existieren folgende Unterverzeichnisse zu /proc/sys/:
abi
relevant für binäre Emulation
debug
leer
dev
Informationen zu Geräten
fs
Dateisysteme, Tuning von Quota, Inodes und mehr
kernel
globale Kernelinformationen, diverses anderes
net
Netzwerk
proc
leer
vm
Tuning für Speichermanagement und Buffer/Cache
Diese Option sollte man i.d.R. auch mit aktivieren.
Auditing support (CONFIG_AUDIT)
Diese Option kann man mit einem anderen Subsystem, wie z.B. SELinux nutzen.
Enable system-call auditing support (CONFIG_AUDITSYSCALL)
Dies aktiviert eine Prüfungsinfrastruktur, die durch ein anderes Kernelsubsystem, wie z.B. SELinux, genutzt werden kann.
Support for hot-pluggable devices (CONFIG_HOTPLUG)
Als Hotplug bezeichnet man eine Technologie, bei der Geräte im laufenden Betrieb entfernt und wieder eingesteckt werden können. Ein Beispiel hierfür sind PCMCIA-Karten oder auch USB. Mit dieser Option und der Software des Linux-Hotplug-Projektes kannst du dies nutzen. Dein Kernel wird dann automatisch /sbin/hotplug aufrufen, evtl. Module laden und die Geräte entsprechend konfigurieren.
Kernel .config support (CONFIG_IKCONFIG)
Mit dieser Option wird der Inhalt der Datei .config im Kernel gespeichert. Auf diese Weise kann jederzeit auf die aktuelle Kernelkonfiguration zugegriffen werden. Mit dieser Einstellung allein benötigt man ein Skript, um die Informationen auszulesen. Die untenstehende Option hingegen ermöglicht den Zugang über /proc/config.gz.
Enable access to .config through /proc/config.gz (CONFIG_IKCONFIG_PROC)
Mit dieser Option kannst du auf die Kerneloptionen, wie sie beim Kompilieren in der .config festgelegt wurden, zugreifen. Dies kann über /proc/config.gz oder auch /proc/config_built_with passieren. Du kannst aber auch das Skript scripts/extract-ikconfig aufrufen.
Cpuset support (CONFIG_CPUSETS)
Diese Option ist für Systeme mit mehreren Prozessoren gedacht. Mit der Option kann man CPU-Klassen festlegen. Innerhalb dieser Klassen können dann Aufgaben ausgeführt werden.
Initramfs source file(s) (CONFIG_INITRAMFS_SOURCE)
TBD
Optimize for size (Look out for broken compilers!) (CONFIG_CC_OPTIMIZE_FOR_SIZE)
Dies übergibt den Parameter -Os statt -O2 an den gcc. Damit sollte ein kleinerer Kernel gebaut werden. Allerdings könnte ein kaputter gcc auch kaputten Code erzeugen.
Configure standard kernel features (for small systems) (CONFIG_EMBEDDED)
Mit den folgenden Unteroptionen kann man diverse grundlegende Kerneloptionen aktivieren oder anpassen. Das ist für spezielle Umgebungen gedacht und wenn du dies anpasst, solltest du dir im klaren sein, was du tust:
Load all symbols for debugging/kksymoops (CONFIG_KALLSYMS)
Hiermit druckt der Kernel symbolische Crashinformationen aus.
Include all symbols in kallsyms (CONFIG_KALLSYMS_ALL)
Normalerweise enthält kallsyms nur die Symbole von Funktionen. Manche Debugger können kallsyms auch für andere Symbole nutzen und diese Option aktiviert dies.
Do an extra kallsyms pass (CONFIG_KALLSYMS_EXTRA_PASS)
TBD
Enable support for printk (CONFIG_PRINTK)
Diese Option aktiviert Unterstützung für printk. Ohne diese Option gibt der Kernel nahezu keine Meldungen mehr aus. Damit wirst du Probleme haben, Probleme zu verfolgen. Daher sollte diese Option aktiviert werden.
BUG() support (CONFIG_BUG)
Ohne diese Option werden keine BUG und WARN-Meldungen mehr gedruckt. Auch hier könnten ohne die Option wichtige Meldungen nicht ausgegeben werden.
Enable full-sized data structures for core (CONFIG_BASE_FULL)
Dies reduziert die Größe diverser Kerneldatenstrukturen.
Enable futex support (CONFIG_FUTEX)
Wenn diese Option aus ist, wird der Kernel ohne Futexe gebaut. Dadurch könnten Anwendungen, die auf der glibc basieren, nicht mehr korrekt funktionieren.
Enable eventpoll support (CONFIG_EPOLL)
(De-)Aktivierung von epoll Systemaufrufen.
Use full shmem filesystem (CONFIG_SHMEM)
Das Dateisystem shmem ist kernelintern und wird dazu benutzt, Shared Memory zu verwalten. Unter Umständen wird das auch als tmpfs genutzt, wenn die entsprechende Option aktiviert ist. Ohne diese Option wird ramfs genutzt.
Function alignment
Label alignment
Loop alignment
Jump alignment
TBD
Vorwort Vorbereitung Code maturity level General setup Loadable module support