
Also wollte ich versuchen, 2.6.39-4 zu bauen. Ich folgte dem Verfahren beiUbuntu-Wiki-Seite „GitKernelBuild“.
Kurz gesagt, laden Sie die tar.bz2-Datei herunter, extrahieren Sie sie, kopieren Sie meine alte Konfiguration, erstellen Sie oldconfig und dann
fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers
Alles lief reibungslos, ich verwende diesen Kernel jetzt, bis auf eine Kleinigkeit: Ich kann keine anderen Module erstellen, keine DKMS erstellen usw. Weitere Informationen folgen:
Es werden zwei Deb-Dateien erstellt:
linux-image-2.6.39.4-custom_2.6.39.4-custom-10.00.Custom_amd64.deb
linux-headers-2.6.39.4-custom_2.6.39.4-custom-10.00.Custom_amd64.deb
Ich bin dadurch etwas verwirrt.
In normalen Ubuntu-Kerneln, sogar in denen in mainline-ppa, sind drei Deb-Dateien installiert. Zum Beispiel für den gleichen Kernel aus demHauptleitungs-PPAEs gibt diese Pakete:
linux-image-2.6.39-02063904-generic_2.6.39-02063904.201108040905_amd64.deb
linux-headers-2.6.39-02063904-generic_2.6.39-02063904.201108040905_amd64.deb
linux-headers-2.6.39-02063904_2.6.39-02063904.201108040905_all.deb
Wie Sie sehen, gibt es zwei verschiedene Header-Pakete. Tatsächlich erstellen die wichtigsten PPA-Pakete nach der Installation ein Verzeichnis unter /lib/modules:
/lib/modules/2.6.39-02063904-generic
In diesem Verzeichnis existiert ein Symlink, der auf die -generic-Header unter /usr/src verweist.
/lib/modules/2.6.39-02063904-generic/build -> /usr/src/linux-headers-2.6.39-02063904-generic
Unter /usr/src gibt es zwei verschiedene Verzeichnisse für diesen Kernel
/usr/src/linux-headers-2.6.39-02063904-generic
/usr/src/linux-headers-2.6.39-02063904
Nun, hier ist das Problem mit meinen eigenen beiden Paketen:
In /usr/src gibt es nur einen Ordner,
/usr/src/linux-headers-2.6.39.4-custom
Und unter /lib/modules gibt es einen Ordner
/lib/modules/linux-headers-2.6.39.4-custom
Das eigentliche Problem und der Grund, warum ich diesen Beitrag schreibe, ist dieser symbolische Link, der im obigen Verzeichnis erstellt wird:
/lib/modules/linux-headers-2.6.39.4-custom/build -> /home/nickped/projects/kernel/linux-2.6.39.4
Wie Sie sehen, wird auf das Verzeichnis zurückverwiesen, in dem ich den Kernel erstellt habe – der danach natürlich möglicherweise nicht mehr existiert. Dies führt dazu, dass andere Module (z. B. VMware, Virtualbox usw.) nicht erstellt werden können, da wichtige Dinge nicht gefunden werden können.
Warum passiert das? Wie kann es behoben werden? Warum werden zwei und nicht drei Deb-Dateien erstellt? Was ist der Zweck dieser drei verschiedenen Deb-Dateien, die offizielle Versionen haben, und wie können sie von anderen erstellt werden?
Antwort1
Um die erste Frage zu beantwortenWarum gibt es nur zwei Pakete?oderWarum gibt es nicht zwei Headerdateien?-- wenn sie plattformübergreifend kompiliert werden, werden sie so verpackt, dass sie für jeden Anwendungsfall geeignet sind. Durch die Aufteilung der Header in eine größereallePaket und ein kleineres arch-spezifisches, Sie sparen Bandbreite, indem Sie sie an Benutzer weitergeben. Wenn Sie es selbst tun, brauchen Sie es nur für einen Arch, also reicht eine Header-Datei.
Was den symbolischen Link zu Ihrem Quellspeicherort betrifft, hatte ich dasselbe Problem. Ich habe keine gute Lösung gefunden, außer auch ein linux_source
Paket zu generieren (fügen Sie das einfach danach hinzu kernel_image kernel_headers
) und dann den symbolischen Link manuell zu reparieren.
Es gibt tatsächlicheine Frage zu dieser Seite der Dinge bereits. Die langfristige Lösung scheint das Einfügen eines Skripts zu sein, das nach jeder Kernelinstallation ausgeführt wird und lediglich den Symink repariert.