Einen eigenen HP-UX Kernel zu erstellen kann mehrere Gründe haben - neben Langeweile kann es auch erforderlich sein, nicht verfügbare Treiber für Hardware zu integrieren oder für Anwendungen spezielle Kernel-Parameter (//wie beispielsweise maximaler shared-memory//) fest anzupassen. Oftmals wird das in Zusammenhang mit Datenbanken zwingend benötigt.
In diesem Beispiel jedoch fehlte der Treiber für eine eingebaute Soundkarte. Das ist daran zu erkennen, dass **ioscan** keine Informationen über die Hardware der Soundkarte hat:
# ioscan -fn -C audio
Class I H/W Path Driver S/W State H/W Type Description
==================================================================
audio 0 0/3/5/0 audio UNCLAIMED UNKNOWN PCI Audio (13f60111)
# lsdev | grep audio
======Kernel kompilieren======
In aller Regel hat man zwei Möglichkeiten einen Kernel zu kompilieren: Es kann der entsprechende Menüpunkt im //System Administration Manager// (**SAM**) verwendet werden - eine manuelle Übersetzung ist auch möglich. Da es auch Szenarien gibt, in denen ein Kernel ohne SAM übersetzt werden muss, ist es hilfreich sich auch die manuelle Übersetzung anzuschauen.
=====SAM=====
SAM verfügt über einen Menüpunkt "**Kernel Configuration**" - in diesem Menü können SAM-typisch zwischen den folgenden Menüpunkten auswählen:
* Configurable Parameters
* Drivers
* Dump Devices
* Subsystems
Treiber würden über den Menüpunkt "Drivers" eingebunden werden. Ein nicht aktiviertes Menü ist an einem "**OFF**" in der Spalte "**Current State**" zu erkennen:
┌ === Kernel Configuration (HOSTNAME) (1) ┐
│File List View Options Actions Help │
│ Press CTRL-K for keyboard help. │
│Pending Kernel Based Upon: Current Kernel │
│ │
│──────────────────────────────────────────────────────────────────────────────│
│Drivers 0 of 114 selected│
│──────────────────────────────────────────────────────────────────────────────│
│ Current Pending Load Module │
│ Name State State Class Type At Boot? │
│┌───────────────────────────────────────────────────────────────────────────┐ │
││ audio Out Out Driver Static N/A ^ │
││ ... │ │
││ cb In In Driver Static N/A v │
│└< ──────────────────────────────────────>┘ │
│ │
└──────────────────────────────────────────────────────────────────────────────┘
Nachdem das Modul mit der Leertaste bzw. Mausklick ausgewählt wurde, kann im Menü "**Actions**" die Aktion "**Add Driver(s) to Kernel**" ausgeführt werden:
┌ === Kernel Configuration (HOSTNAME) (1) ┐
│File List View Options Actions Help │
│ │ Templates -> │ │
│Pending Kernel Based Up│ Process New Kernel │ │
│ │ Configure Kernel Logging... │ │
│───────────────────────│ ============================ │───────────────────────│
│Drivers │ View Driver Details │ 1 of 114 selected│
│───────────────────────│ Add Driver(s) to Kernel │───────────────────────│
│ Curr└──────────────────────────────┘ Load Module │
...
Beim Beenden des Assistenten wird ein neuer Kernel erstellt und installiert, sofern der Vorgang nicht abgebrochen wird.
=====manuell=====
Damit ein Kernel manuell übersetzt werden kann, wechselt man zunächst in das Arbeitsverzeichnis **/stand/build** und bezieht die Konfiguration (//die Datei **system**//) des aktuell verwendeten Kernels:
# cd /stand/build
# /usr/lbin/sysadm/system_prep -s system
Nun kann die Konfigurationsdatei angepasst werden um beispielsweise ein zu integrierendes Modul einzureihen:
# vim system
...
asp
audio
autofsc
...
:wq
Wurde die Konfigurationsdatei angepasst, wird der eigentliche Kernel kompiliert:
# mk_kernel -s system
Generating module: krm...
...
Compiling conf.c...
Loading the kernel...
Generating kernel symbol table...
Nach der Kernel übersetzt wurde, empfiehlt es sich den aktuellen Kernel und dessen Konfigurationsdatei als Sicherung aufzubewahren - am Besten, indem man **.prev** an die entsprechenden Dateinamen **vmunix** und **system** anhängt. Anschließend verschiebt man den neu kompilierten Kernel und dessen Konfiguration in das Verzeichnis **/stand**:
# mv /stand/system /stand/system.prev
# mv /stand/vmunix /stand/vmunix.prev
# mv /stand/build/system /stand/system
# mv /stand/build/vmunix_test /stand/vmunix
# ls -lst /stand
total 167008
16 drwxr-xr-x 5 root sys 3072 Apr 8 11:26 build
55552 -rwxr-xr-x 1 root sys 28347512 Apr 8 11:25 vmunix
16 -rw-r--r-- 1 root sys 1905 Apr 8 11:23 system
...
Nach einem Reboot wird der neue Kernel benutzt - im Idealfall wird in diesem Beispiel die Soundkarte unterstützt:
# cd /
# shutdown -r 0
...
# ioscan -fn -C audio
Class I H/W Path Driver S/W State H/W Type Description
==================================================================
audio 0 0/3/5/0 audio CLAIMED INTERFACE Plug-in PCI Audio
/dev/audio /dev/audioEL_0 /dev/audioLL_0
/dev/audioBA /dev/audioEU /dev/audioLU
/dev/audioBA_0 /dev/audioEU_0 /dev/audioLU_0
/dev/audioBL /dev/audioIA /dev/audioNA
/dev/audioBL_0 /dev/audioIA_0 /dev/audioNA_0
/dev/audioBU /dev/audioIL /dev/audioNL
/dev/audioBU_0 /dev/audioIL_0 /dev/audioNL_0
/dev/audioCtl /dev/audioIU /dev/audioNU
/dev/audioCtl_0 /dev/audioIU_0 /dev/audioNU_0
/dev/audioEA /dev/audioLA /dev/audio_0
/dev/audioEA_0 /dev/audioLA_0
/dev/audioEL /dev/audioLL
# lsdev | grep audio
66 -1 audio audio