Ich möchte einen Kernel.org-Kernel auf einem benutzerdefinierten Festplattenlaufwerk kompilieren und installieren, sagen wir /dev/sda5
, anstatt mit meinen aktuellen Ubuntu-Verzeichnissen zusammengeführt zu werden.
Ich kann überall im Internet Informationen über den Konfigurations- und Kompilierungsprozess finden, aber es gibt keinen Hinweis darauf, wie man den Kernel auf ein benutzerdefiniertes Volume legt (anders als die gebootete Distribution, die Sie zum Zeitpunkt der Kompilierung verwenden). Was ich verlange, ist, wie wir 2 verschiedene Distributionen auf 2 verschiedenen Volumes auf 1 HDD installieren können. Stellen Sie sich jetzt meinen benutzerdefinierten Kernel als eine weitere Distribution vor.
Akzeptierte Antwort:
Sie können einen Kernel überall kompilieren, einschließlich Ihres Home-Verzeichnisses. Die einzige Zeit, in der Verzeichnisse außerhalb des Build-Baums geändert werden, ist, wenn Sie eine der install*
-Anweisungen ausführen Ziele. Um also einen Kernel zu installieren, gehen Sie wie folgt vor:
cd $SOME_DIRECTORY
tar -xjvf linux-$VERSION.tar.bz2
cd linux-$VERSION
make mrproper menuconfig
# Configure the kernel here.
# Now build it using all your CPU threads in parallel.
make -j$(grep -c processor /proc/cpuinfo) bzImage modules
Nachdem Sie den Kernel konfiguriert haben, wird er erstellt. An diesem Punkt haben Sie eine Kernel-Binärdatei (vmlinux) und ein bootfähiges Kernel-Image unter arch/$YOUR_ARCHITECTURE/boot/bzImage.
Wenn Sie einen monolithischen Kernel erstellen, sind Sie fertig. Kopieren Sie die unkomprimierte Datei (vmlinux
) oder komprimierte Datei (bzImage
) auf Ihr gewünschtes Volume, konfigurieren Sie bei Bedarf den Bootmanager und los geht's.
Wenn Sie Module installieren müssen und davon ausgehen, dass Sie Ihr Zielvolume auf /mnt gemountet haben, könnten Sie sagen:
INSTALL_MOD_PATH=/mnt \
INSTALL_PATH=/mnt/boot \
make modules_install
Dadurch wird das Kernel-Image nach /mnt/boot
kopiert und die Module nach /mnt/lib/modules/$VERSION
.
Bitte beachten Sie, dass ich das zu sehr vereinfache. Wenn Sie Hilfe beim manuellen Erstellen des Kernels benötigen, sollten Sie einige der Dokumente in der Documentation/
des Kernel-Quellbaums lesen Unterverzeichnis. Die README
Datei erklärt Ihnen auch, wie Sie es im Detail erstellen und installieren.
Das Booten des Kernels ist jedoch eine andere Geschichte. Die meisten modernen Distributionen verwenden ein anfängliches RAMdisk-Image, das eine Menge Treiber für die Hardware enthält, die benötigt wird, um den Rest des Kernels (Blockgeräte, Dateisysteme, Netzwerke usw.) aufzurufen. Dieser Prozess wird dieses Bild nicht erstellen. Je nachdem, was Sie tun müssen (was tun müssen Sie tun?), können Sie ein vorhandenes verwenden oder mithilfe der Toolchain Ihrer Distribution ein neues erstellen. Sie sollten die Dokumentation zu update-initramfs
überprüfen .
Es gibt jedoch auch andere Probleme. Mit der Standard-Toolchain können Sie keinen Kernel für eine andere Architektur oder Unterarchitektur kompilieren. Beachten Sie, dass in einigen Fällen sogar Kernel, die auf einem bestimmten Typ von x86-Boxen kompiliert wurden, auf bestimmten anderen Typen von x86-Boxen nicht funktionieren. Es hängt alles von der Kombination der Subarchitekturen und der Kernelkonfiguration ab. Das Kompilieren über Architekturen hinweg (z. B. das Erstellen eines ARM-Kernels auf einem x86-Rechner) kommt überhaupt nicht in Frage, es sei denn, Sie installieren eine geeignete Cross-Compilation-Toolchain.
Verwandte:Linux – Dateien verlieren, wenn ich den Cache leeren (echo 3> /proc/sys/vm/drop_caches)?Wenn Sie jedoch versuchen, eine andere Installation oder einen anderen Computer zu retten, könnte eine Rettungsdiskette praktischer sein, als einen solchen benutzerdefinierten Kernel zu erstellen.
Noch etwas:Wenn Sie versuchen, einen Kernel für einen anderen Computer zu erstellen, der bootet, die gleiche Architektur wie der ist, auf dem Sie kompilieren, und ein Debian- oder Debian-ähnliches Betriebssystem (Ubuntu zählt) ausführt, können Sie den installieren kernel-package
Paket (sudo aptitude install kernel-package
). Entpacken Sie dann den Kernel, cd
zum Stamm des Quellbaums und sagen Sie:
CONCURRENCY_LEVEL=$(grep -c processor /proc/cpuinfo) \
sudo make-kpkg --initrd binary-arch
Dies wird die notwendigen Patches anwenden, den Kernel konfigurieren, ihn bauen und als .deb-Paket packen (eigentlich ein paar Pakete). Alles, was Sie tun müssen, ist es auf Ihrem Zielsystem zu installieren und fertig.