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