Ich habe eine Frage zur Installation eines Kernels. Ich habe eine neue Version der Net-Next-Kernelquelle heruntergeladen und die folgenden Schritte ausgeführt:
make allyesconfig
make -j16
make modules_install
make install
Das Problem ist, dass ich beim Versuch, es auszuführen make install
, die Fehlermeldung „Module nicht gefunden“ erhalte. Ich bin verwirrt, da jemand anderes den Kernel mit demselben Verfahren erstellen konnte und ich dazu nicht in der Lage bin (wir haben beide Root-Berechtigungen). Muss ich noch etwas tun, um sicherzustellen, dass diese Module sichtbar/verfügbar sind?
Antwort1
Beim make install
Aufruf wird ein distributionsspezifisches Skript zum Erstellen von initrd.img aufgerufen. Dieses Skript sucht nach allen Modulen, die diese Distribution benötigt. Da Sie jedoch alle Module gerade als integriert in den Kernel kompiliert haben make allyesconfig
, konnte das Skript die Module nicht suchen.
Ich kann Ihr Problem gerade nicht reproduzieren. Ich erinnere mich, dass „Module nicht gefunden“ nur Warnungen sind. Ich ignoriere es immer, weil initrd.img erfolgreich erstellt und der neue Kernel erfolgreich gebootet wurde. Wenn „Module nicht gefunden“ fehlschlägt, sollten Sie solche Module manuell von integrierten Modulen in echte ladbare Module umwandeln. Gehen Sie dazu make menuconfig
folgendermaßen vor: Die Meldung „Module nicht gefunden“ enthält den Modulnamen. Verwenden Sie den Namen, um Makefiles zu durchsuchen und herauszufinden, welches CONFIG_XXX, und ändern Sie dieses CONFIG_XX in =m
.
Wenn Sie schließlich nur einen neu erstellten Kernel möchten, schlage ich vor, dass Sie stattdessen die Distributionskonfiguration verwenden make allyesconfig
:
cd your_kernel_src
cp /boot/your_distribution_config .config
make menuconfig # can exit it directly with nothing changed
make -j16
make modules_install
make install
# update the grub, if it is required for your distribution.
Antwort2
Sie haben den Kernel mit plain kompiliert make
, aber nicht die Module. Führen Sie aus make -j16 all modules
.
Antwort3
Sie müssen sicherstellen, dass die Toolchain den Kernel-Quellcode kennt, mit dem Sie arbeiten. Sie müssen die Umgebungsvariable KERNEL_TREE
auf das Verzeichnis setzen, in dem sich Ihre Quellen befinden. Siehehttps://unix.stackexchange.com/a/147700/37538als Referenz.