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
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 verfügt über einen Menüpunkt „Kernel Configuration“ - in diesem Menü können SAM-typisch zwischen den folgenden Menüpunkten auswählen:
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.
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