• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Symlink zu Kernel-Header? [Gelöst]

Keks Dose

Member
Hallo,

ich habe erfolgreich den zweiten Kernel -- 2.6.30 -- installiert und bei webpin sogar kernel-header dazu gefunden, nun, hoffe ich jedenfalls:

Code:
rpm -qa | grep kernel
kernel-pae-2.6.27.29-18.1
kernel-pae-2.6.30.5-1.1
kernel-pae-extra-2.6.27.29-18.1
kernel-pae-extra-2.6.30.5-1.1
kernel-pae-base-2.6.27.29-18.1
linux-kernel-headers-2.6.30-3.1
kernel-pae-base-2.6.30.5-1.1
kernel-source-2.6.30.5-1.1

Aber wenn ich versuche, fglrx zu installieren ("no kernel module build environment") oder madwifi zu kompilieren

--
Code:
/bin/sh: line 0: cd: /lib/modules/2.6.30.5-1-pae/build: Datei oder Verzeichnis nicht gefunden
Makefile.inc:66: *** /lib/modules/2.6.30.5-1-pae/build is missing, please set KERNELPATH.  Schluss.
--

geht's nicht. Daher frage ich mich, ob die Kernelheader nicht an einer Stelle installiert sind, an der sie niemand sucht und wie ich dem abhelfen könnte.

Gruß,
Alexander
 
A

Anonymous

Gast
Die Linux-Kernel-Headers die es als Paket gibt sind die Header die für die Programme benötigt werden, das heißt, es ist im wesentlichen eine Auswahl der wichtigsten Kernel-Headers die das System und die öffentlichen Schnittstellen des Kernels so beschreiben, das Programme dafür kompiliert werden können. Diese Header sind abgelegt unter /usr/include/linux/.......

Wenn du jetzt allerdings ein Kernelmodul komplieren willst, dann reichen diese "allgemeinen" Kernelheader nicht aus, du brauchst die vollständigen orginalen vom Quellcode. Diese sind entweder im konfiguriertem Quellcode zu finden, oder werden bei der Erstellung des Kernels als Paket extra dazugepackt und dann zB unter /usr/src/KERNELNAME.obj/*/..... abgelegt.
Damit die richtigen zum Kernel gehörenden dann beim kompilieren von zusätzlichen Kernel-Modulen gefunden werden, gibt es in dem Verzeichnis /lib/modules/KERNELNAME/ jeweils einen Softlink namens "build" auf das Verzeichnis in dem diese (vollstängigen) Kernelheader liegen sollten, oder eben auf den Quellcode des Kernels, wo sie ja auch sind.

Geht dieser Link ins leere, dann bekommst du genau diese Fehlermeldung.
Schau mal wohin der Link bei deinem 30er-Kernel geht, und dann dort sollten mit
Code:
find . | wc -l
jede Menge Dateien gefunden werden, bei meinem Test habe ich eben bei meinem alten Kernel hier fast 21000 gefunden, diese sind als Bestandteil des Kernel-Source-Paketes installiert worden.

Dann schaust du mal mit
Code:
rpm -ql linux-kernel-headers
was das für Dateien sind, bei mir sind es etwas über 1300 und alle unter /usr/include/

robi
 
OP
K

Keks Dose

Member
Der Softlink namens build unter /lib/modules/2.6.30.5-1-pae funktioniert nicht, er verweist auf /usr/src/linux-2.6.30.5-1-obj/i386/pae, das Verzeichnis gibt's leider nicht. Ich könnte es natürlich erstellen und dort mit ln -s auf das richtige Verzeichnis verweisen, aber beim nächsten update fällt mir sowas ja wieder auf die Füße.

Die Kernelheader sind unter /usr/include/asm, während unter /usr/scr/linux (ein Softlink auf /usr/scr/linux-2.6.30.5-1/) folgende Verzeichnisse und Dateien sind:

  • arch
    block
    COPYING
    CREDITS
    crypto
    Documentation
    drivers
    firmware
    fs
    include
    init
    ipc
    Kbuild
    kdb
    kernel
    lib
    MAINTAINERS
    Makefile
    mm
    net
    README
    README.SUSE
    REPORTING-BUGS
    samples
    scripts
    security
    sound
    usr
    virt

Wie ändere ich den Symlink "build" ab, damit er auf /usr/include/asm zeigt? Oder wohin muss das Ding deuten?

Danke!

Gruß,
Alexander
 
A

Anonymous

Gast
Irgendwie habe ich die Vermutung das das Kernelpaket wohl nicht aus der selben Quelle stammt wie der Kernelsource. Aber egal, sollte auch so gehen,
Den Kernelsource hast du hoffentlich prepariert ? (http://www.thomashertweck.de/kernel26.html#klonen wenn der richtige 2.6.30er-Kernel gerade läuft in das Kernelsource-Verzeichnis wechseln und dort, dann die erste dort vorgestellte Variante ausführen)

Ansonsten source und build sollten bei dir beide auf das Kernelverzeichnis zeigen ( /usr/scr/linux-2.6.30.5-1 )
vorher ins Modulesverzeichnis wechseln und entweder die alten Links löschen oder umbenennen in build.old und dann
ln -s /usr/scr/linux-2.6.30.5-1 build

robi
 
OP
K

Keks Dose

Member
Das war sehr hilfreich!

Ich habe nämlich als Kernel-Source ein Paket namens

kernel-source-2.6.30.5-1.1.src.rpm

installiert, das laut Deinem link überhaupt nicht geeignet ist. Herr Hertweck schreibt dazu:

Bei den Paketen kernel-source-2.6.xx-y.rpm und kernel-source-2.6.xx-y.src.rpm handelt es sich um zwei unterschiedliche Pakete mit unterschiedlicher Zielsetzung. Will man die Kernel-Quellen installieren, so sollte man das hier zuerst genannte RPM nehmen. Beim zweitgenannten RPM handelt es sich um ein sog. Source-RPM. Installiert man dieses Source-RPM, so sucht man vergebens das Verzeichnis mit den Kernel-Quellen unter /usr/src/! Die Kernel-Quellen (als Tar-Archiv sowie evtl. Patches) wurden dann nämlich samt sog. spec-File nach /usr/src/packages/ in die Unterverzeichnisse SOURCES bzw. SPECS entpackt. So kann theoretisch das spec-File angepasst, die Kernel-Quellen gepatcht oder ein neues Source-RPM gebaut werden.

OK, das war Murks. Mir ist inzwischen klar geworden, dass dieses Experiment meine Kenntnisse weit übersteigt.

Das tolle ist, dass der neue Kernel die Boot-Zeiten und die Aufwach-Zeiten verkürzt. Aber das ganze ist noch immer instabil: manchmal führt das Aufwecken zu einem freeze. Noch immer verkraftet es KDE schlecht, wenn der Strom -- z.B. im Zug -- kurzzeitig ausfällt. FN+F4 und FN+F12 funktionieren nicht (S2Ram und S2Disk beim Thinkpad T 60) lassen sich überhaupt nicht nutzen.

Es gibt also zur Zeit viele Baustellen. Ich warte 11.2 ab. Dann gibt's auch Texlive 09 und vielleicht ein neues Notebook.

Herzlichen Dank jedenfalls,
Gruß,
Alexander
 
OP
K

Keks Dose

Member
OpenSuse ist da irgendwie anders. Geholfen hat es, zunächst einmal die richtigen Kernelquellen zu installieren, nicht das -src-Paket.

Dann habe ich nachgesehen, wohin der symlink bei dem nach wie vor funktionierenden 2.6.27-er Kernel geht und ihn entsprechend gesetzt, nämlich auf /usr/src/linux-2.6.30.5-1-obj/i386/pae

Und nun lies sich madwifi kompilieren. fglrx nicht, aber das dürfte daran liegen, dass dessen Ausgabe 9.3 vom März mit proprietärem Code eben älter ist als 2.6.30 und neuere Versionen von fglrx meine Karte nicht mehr unterstützen. AMD hat tatsächlich die Unterstützung von Karten eingestellt, die Mitte 2008 noch verkauft wurden.

Also, wieder 'was gelernt. Herzlichen Dank,
Gruß,
Alexander
 
Oben