Ho una macchina virtuale con Ubuntu 14.04. Di recente ho compilato e installato il kernel linux-3.14.5 su di esso e ho provato ad avviarlo, ma mi porta alla shell integrata di BusyBox v1.21.1.
Ecco cosa ho fatto:
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
Potevo vedere un file chiamato initrd.img-3.14.5 in /avvio insieme al intrd.img-3.13.0-24-generico (che suppongo sia il kernel di Ubuntu 14.04).
C'erano anche 2 file chiamati vmlinuz-3.14.5 e vmlinuz-3.13.0-24-generico.
Dopodiché, corri
sudo blkid
e ho ottenuto quanto segue:
/dev/sda1: UUID="92ec153c-cb92-4300-8d2a-f63b747ddd35" TYPE="ext4"
/dev/sda5: UUID="439a6423-28dc-4363-b47e-580f1e65e951" TYPE="swap"
Ho anche corso
sudo fdisk -l
che mi ha dato
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
Ho controllato /boot/grub/grub.cfg file che aveva la seguente voce:
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
}
Quindi, sono andato avanti e ho aggiunto le seguenti righe a /etc/grub.d/40_custom (ho appena cambiato le righe 1, 14, 15 e 17)
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
}
ed è corso
sudo update-grub
sudo reboot
Non ha funzionato! Il messaggio di errore diceva
ALERT! /dev/disk/by-uuid/92ec153c-cb92-4300-8d2a-f63b747ddd35 does not exist.
Dropping to a shell!
Quindi ho provato a sostituire l'UUID di /dev/sda1 risultante nel seguente file.
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
}
Neanche quello ha funzionato e mi ha dato un messaggio di errore molto simile.
ALERT! /dev/sda1 does not exist.
Dropping to a shell!
Penso di aver commesso uno stupido errore, ma non riesco a capire cosa dato che questa è la mia prima volta. Apprezzerei qualsiasi aiuto.
Correlati:Ubuntu – Come viene pulita la directory /tmp?Grazie per aver letto il lungo post. Per favore fatemi sapere se avete bisogno di ulteriori informazioni.
Risposta accettata:
Hai saltato due passaggi prima di make install
, che installa i driver richiesti. Prima di make install
fai make modules
e make modules_install
in questo ordine. Questo installa i driver in base ai tuoi file .config.
L'errore può verificarsi anche a causa di una configurazione errata nel file .config e quindi di alcuni driver mancanti. Quindi ecco un modo hacker per eseguire la compilazione del kernel. Uno dei modi migliori per ottenere la giusta configurazione è copiare una configurazione funzionante dalla directory /boot al tuo .config nella cartella del codice sorgente del kernel. Il tuo file di configurazione del kernel funzionante è
/boot/config-`uname -r`
Quindi fai la compilazione con make
. make
richiederà alcune configurazioni, che non sono nel file .config, perché questo file .config potrebbe corrispondere a un vecchio kernel e non ha alcune configurazioni nel nuovo kernel che stai tentando di compilare. Basta digitare Invio per tutte le richieste di configurazione, che selezioneranno le configurazioni predefinite. Quindi fai make modules
, make modules_install
e infine make install
. Questo deve risolvere i tuoi problemi.
Questo modo di compilazione non è adatto a un professionista, ma aiuterà i neofiti che non conoscono molto le diverse opzioni di configurazione per iniziare con la compilazione del kernel.