Benutzer-Werkzeuge

Webseiten-Werkzeuge


computer:hpux:kernel

Inhaltsverzeichnis

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
computer/hpux/kernel.txt · Zuletzt geändert: 2012/04/08 11:57 von christian