Ich habe eine virtuelle Maschine mit Ubuntu 14.04 darin. Ich habe kürzlich den Linux-3.14.5-Kernel darauf gebaut und installiert und versucht, ihn zu booten, aber er bringt mich zur integrierten Shell von BusyBox v1.21.1.
Folgendes habe ich getan:
wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.14.5.tar.xz
mkdir ~/linux
mv linux-3.14.5.tar.xz ~/linux
tar -xJf linux-3.14.5.tar.xz
mkdir linux-3.14.5
cd linux-3.14.5_src/
make defconfig O=../linux-3.14.5
make menuconfig O=../linux-3.14.5 /* i didn't change anything */
make O=../linux-3.14.5
cd ../linux-3.14.5
sudo make install
Ich konnte eine Datei namens initrd.img-3.14.5 sehen in /boot neben dem intrd.img-3.13.0-24-generic (was ich vermute, ist der Kernel von Ubuntu 14.04).
Es gab auch 2 Dateien namens vmlinuz-3.14.5 und vmlinuz-3.13.0-24-generic.
Danach lief
sudo blkid
und bekam folgendes:
/dev/sda1: UUID="92ec153c-cb92-4300-8d2a-f63b747ddd35" TYPE="ext4"
/dev/sda5: UUID="439a6423-28dc-4363-b47e-580f1e65e951" TYPE="swap"
Ich bin auch gelaufen
sudo fdisk -l
das gab mir
Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders, total 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000268be
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 39845887 19921920 83 Linux
/dev/sda2 39847934 41940991 1046529 5 Extended
/dev/sda5 39847936 41940991 1046528 82 Linux swap / Solaris
Ich habe die /boot/grub/grub.cfg überprüft Datei mit folgendem Eintrag:
menuentry 'Ubuntu, with Linux 3.13.0-24-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-24-generic-advanced-92ec153c-cb92-4300-8d2a-f63b747ddd35' {
recordfail
load_video
gfxmode $linux_gfx_mode
insmod gzio
insmod part_msdos
insmod ext2
set root='hd0,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 92ec153c-cb92-4300-8d2a-f63b747ddd35
else
search --no-floppy --fs-uuid --set=root 92ec153c-cb92-4300-8d2a-f63b747ddd35
fi
echo 'Loading Linux 3.13.0-24-generic ...'
linux /boot/vmlinuz-3.13.0-24-generic root=UUID=92ec153c-cb92-4300-8d2a-f63b747ddd35 ro find_preseed=/preseed.cfg auto noprompt priority=critical locale=en_US quiet
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-3.13.0-24-generic
}
Also ging ich weiter und fügte die folgenden Zeilen zu /etc/grub.d/40_custom hinzu (Ich habe gerade die Zeilen 1, 14, 15 und 17 geändert)
menuentry 'MyNewKernel' {
recordfail
load_video
insmod gzio
insmod part_msdos
insmod ext2
set root='hd0,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 92ec153c-cb92-4300-8d2a-f63b747ddd35
else
search --no-floppy --fs-uuid --set=root 92ec153c-cb92-4300-8d2a-f63b747ddd35
fi
echo 'Loading My New Kernel ...'
linux /boot/vmlinuz-3.14.5 root=UUID=92ec153c-cb92-4300-8d2a-f63b747ddd35 ro recovery nomodeset find_preseed=/preseed.cfg auto noprompt priority=critical locale=en_US
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-3.14.5
}
und rannte
sudo update-grub
sudo reboot
Funktioniert nicht! Die Fehlermeldung lautete
ALERT! /dev/disk/by-uuid/92ec153c-cb92-4300-8d2a-f63b747ddd35 does not exist.
Dropping to a shell!
Also habe ich versucht, die UUID zu ersetzen von /dev/sda1 was zu folgender Datei führt.
menuentry 'MyNewKernel' {
recordfail
load_video
insmod gzio
insmod part_msdos
insmod ext2
set root='hd0,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 /dev/sda1
else
search --no-floppy --fs-uuid --set=root /dev/sda1
fi
echo 'Loading Linux 3.13.0-24-generic ...'
linux /boot/vmlinuz-3.14.5 root=/dev/sda1 ro recovery nomodeset find_preseed=/preseed.cfg auto noprompt priority=critical locale=en_US
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-3.14.5
}
Das hat auch nicht funktioniert und mir eine sehr ähnliche Fehlermeldung gegeben.
ALERT! /dev/sda1 does not exist.
Dropping to a shell!
Ich glaube, ich mache einen dummen Fehler, aber ich kann nicht herausfinden, was, da dies mein erstes Mal ist. Ich würde mich über jede Hilfe freuen.
Siehe auch:Ubuntu – Wie wird das /tmp-Verzeichnis aufgeräumt?Danke für das Lesen des langen Beitrags. Bitte teilen Sie mir mit, wenn Sie weitere Informationen benötigen.
Akzeptierte Antwort:
Sie haben zwei Schritte vor dem make install
verpasst , wodurch die erforderlichen Treiber installiert werden. Vor make install
make modules
und make modules_install
in dieser Reihenfolge. Dadurch werden Treiber basierend auf Ihren .config-Dateien installiert.
Der Fehler kann auch aufgrund einer falschen Konfiguration in der .config-Datei und daher einiger fehlender Treiber auftreten. Hier ist also ein hackiger Weg, um die Kernel-Kompilierung durchzuführen. Eine der besten Möglichkeiten, um die richtige Konfiguration zu erhalten, besteht darin, eine funktionierende Konfiguration aus dem /boot-Verzeichnis in Ihre .config im Kernel-Quellcodeordner zu kopieren. Ihre funktionierende Kernel-Konfigurationsdatei ist
/boot/config-`uname -r`
Führen Sie dann die Kompilierung mit make
durch . make
wird nach einigen Konfigurationen fragen, die nicht in der .config-Datei enthalten sind, da diese .config-Datei möglicherweise einem alten Kernel entspricht und einige Konfigurationen in dem neuen Kernel, den Sie zu kompilieren versuchen, nicht enthält. Geben Sie einfach die Eingabetaste für alle Konfigurationsaufforderungen ein, wodurch Standardkonfigurationen ausgewählt werden. Machen Sie dann make modules
, make modules_install
und schließlich make install
. Dies muss Ihre Probleme lösen.
Diese Art der Kompilierung ist nicht für einen Profi geeignet, hilft aber Neulingen ohne große Kenntnisse der verschiedenen Konfigurationsoptionen, mit der Kernel-Kompilierung zu beginnen.