Booten eines neu kompilierten Linux-Kernels


7

Ich habe angefangen, das Buch Essential Linux Device Drivers zu lesen. Ich verfolge den Prozess zum Kompilieren und Booten eines neuen Kernels. Ich kann jedoch nicht in den neu kompilierten Kernel booten - ich wähle den neuen Kernel in grub aus und dann ... nichts ... der Bildschirm bleibt einfach gleich.

Hier sind die Schritte, die ich unternehme, wie im Buch beschrieben (ich verwende Kernel 2.6.24, da das Buch darauf basiert):

cd /usr/src/linux-2.6.24 # the base dir of the kernel I downloaded
make clean
cp arch/x86/configs/i386_defconfig .config
make bzImage
cp arch/x86/boot/bzImage /boot/vmlinuz

Das Buch sagt, dass:

Möglicherweise müssen Sie Ihren Bootloader über das Eintreffen des neuen Boot-Images informieren. Wenn Sie den GRUB-Bootloader verwenden, wird dies automatisch ermittelt.

Nun, es wurde in meinem Fall nicht automatisch herausgefunden, da es keine Option gab, diesen Kernel in GRUB auszuwählen. Also habe ich es manuell gemacht, indem ich update-grub in das Terminal eingegeben habe. Und das hat auch nicht funktioniert. Sobald ich jedoch den Dateinamen von vmlinuz in vmlinuz-2.6.24 geändert und update-grub eingegeben habe, wurde er aufgenommen. Auf Seite 11 des Buches scheinen also bereits mehrere Dinge ausgelassen worden zu sein.

Das Buch sagt, dass der Computer dann neu gestartet werden soll.

Wie auch immer, ich kann diesen Kernel jetzt in GRUB auswählen, aber wie ich oben sagte, startet er nicht richtig, der Bildschirm wird einfach leer und ändert sich nie. Vermisse ich also etwas? Ich habe die Anweisungen im Buch genau befolgt. Ich habe 50 € für dieses Buch ausgegeben und kann jetzt wegen dieses Problems nicht über Seite 11 hinausgehen.

Ich nehme an, dass die Tatsache, dass ich Ubuntu auf VirtualBox verwende, kein Problem ist? Ich gehe einfach beim Booten der virtuellen Maschine Ubuntu in Grub und wähle dann den neu kompilierten Kernel aus. Ich kann nicht sehen, wie das ein Problem sein könnte.


1
Das Befolgen von distro-spezifischen Anleitungen ist der richtige Weg, wenn Sie nicht wissen, wohin Sie gehen. wiki.ubuntu.com/KernelTeam/GitKernelBuild oder help.ubuntu.com/community/Kernel/Compile für Ubuntu. Es ist nahezu unmöglich, Ihr Problem für Sie zu debuggen, so dass viele Dinge falsch sein könnten (insbesondere initramfs-Zeug). (Dies hindert Sie nicht daran, den Rest des Buches zu lesen. Es ist ein "kleines Detail". Sie werden es irgendwann zum Laufen bringen und auf viel schwierigere Probleme stoßen, wenn Sie tatsächlich anfangen, den Kernel-Code zu berühren.)
Mat

1
Übrigens, ich weiß nicht, welche Kernel-Version Ihre Ubuntu-Installation ausführt, aber sie ist möglicherweise nicht mit 2.6.24 kompatibel. Verwenden Sie mindestens dieselbe Version (oder eine neuere), die Ihre Distribution liefert.
Mat

Ok, ich werde versuchen, den aktuellen Kernel zu kompilieren. Ich hoffe, dass ich dieses Buch noch etwas nutzen kann und dass ich nicht 50 € weggeworfen habe. Ich möchte wirklich etwas über das Schreiben von Gerätetreibern lernen.
Jim_CS

2
Wie gesagt, es ist nur ein Detail, Ihren ersten Kernel zum Booten zu bringen. Ich kenne dieses Buch nicht, aber Sie sollten diesen "Vorfall" nicht einmal damit abrechnen - ich bin mir ziemlich sicher, dass es darum geht, Gerätetreiber zu schreiben und nicht Ihren ersten Kernel zu kompilieren (was die Autoren wahrscheinlich annehmen, dass Sie tatsächlich vertraut sind mit vor dem Kauf ihres Buches). Verwenden Sie die Inhalte Ihrer Distribution, bis Sie mit dem Prozess vertraut genug sind, um Ihr Setup selbst zu debuggen (und wissen, welche Konfigurationsoptionen verwendet werden sollen).
Mat

Antworten:


3

Ubuntu hat ein aus Debian importiertes Skript, das die Installation für Sie durchführt. Nach dem Kompilieren des Kernels einfach ausführen sudo make modules_install installund Ihr Kernel wird korrekt installiert.

Später bearbeiten: Hier ist das Skript, das Ubuntu und Debian verwenden. Es wird vom Kernel-Makefile automatisch aufgerufen, wenn Sie die oben genannten Installationsbefehle ausführen und die distro-spezifische Installation durchführen.


0

Ihre grub.conf-Datei sollte den Eintrag similer dazu haben

title My Linux Kernel
root (hd0,0)
kernel /boot/gentoo-kernel root=/dev/sda1

Ihr Ubuntu-Kernel könnte so etwas haben

initrd /boot/initrd.img

Sie sollten dies nicht benötigen, wenn Sie einen Kernel auf Ihrer Hardware kompilieren. Dies könnte Ihr Problem verursachen.

Sie sollten mir Ihre grub.conf-Datei kommentieren und ich werde sie mir ansehen. Andernfalls kann Ihre Konfiguration schuld sein.

Der ältere Kernel verfügt möglicherweise auch nicht über die Treiber, die Sie für neuere Hardware benötigen.

Ein neueres Ubuntu-System wird nicht ohne Probleme zu dem alten einer Kernel-Version zurückkehren.

Sie könnten ein älteres Ubuntu ausprobieren, das eine Version in der Nähe dieser Kernel-Version oder die neueste Kernel-Version von kernel.org ausführt.


0

Jede Linux-Distribution hat ihren eigenen Mechanismus und ihre eigenen Richtlinien für die Paketbereitstellung. Dies gilt auch für den Kernel. Die meisten Distributionen verbergen den Kompilierungsprozess mit ihren Tools, die hauptsächlich Binärpakete bereitstellen.

Wenn Sie einen benutzerdefinierten Kernel auf einer bestimmten Linux-Distribution kompilieren möchten, müssen Sie diese Verteilungsanleitung befolgen, um zu erfahren, wie Sie dies tun, ohne Ihr System zu beschädigen.

Ubuntu hat seine spezifische Art, dasselbe für Achlinux, dasselbe für Redhat oder Gentoo.

Folgen Sie für Ubuntu der Dokumentation hier https://wiki.ubuntu.com/Kernel/BuildYourOwnKernel

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.