Saya memiliki mesin virtual dengan Ubuntu 14.04 di dalamnya. Saya baru-baru ini membuat dan menginstal kernel linux-3.14.5 di dalamnya, dan mencoba untuk mem-boot ke dalamnya, tetapi itu menjatuhkan saya ke shell built-in BusyBox v1.21.1.
Inilah yang saya lakukan:
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
Saya bisa melihat file bernama initrd.img-3.14.5 di /boot di samping intrd.img-3.13.0-24-generic (yang saya kira, adalah kernel Ubuntu 14.04).
Ada juga 2 file bernama vmlinuz-3.14.5 dan vmlinuz-3.13.0-24-generic.
Setelah itu, lari
sudo blkid
dan dapatkan yang berikut:
/dev/sda1: UUID="92ec153c-cb92-4300-8d2a-f63b747ddd35" TYPE="ext4"
/dev/sda5: UUID="439a6423-28dc-4363-b47e-580f1e65e951" TYPE="swap"
Saya juga berlari
sudo fdisk -l
yang memberi saya
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
Saya memeriksa /boot/grub/grub.cfg file yang memiliki entri berikut:
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
}
Jadi, saya melanjutkan dan menambahkan baris berikut ke /etc/grub.d/40_custom ( saya baru saja mengganti baris 1, 14, 15 dan 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
}
dan berlari
sudo update-grub
sudo reboot
Tidak bekerja! Pesan kesalahan mengatakan
ALERT! /dev/disk/by-uuid/92ec153c-cb92-4300-8d2a-f63b747ddd35 does not exist.
Dropping to a shell!
Jadi saya mencoba mengganti UUID oleh /dev/sda1 menghasilkan file berikut.
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
}
Itu juga tidak berhasil, dan memberi saya pesan kesalahan yang sangat mirip.
ALERT! /dev/sda1 does not exist.
Dropping to a shell!
Saya pikir saya melakukan beberapa kesalahan bodoh, tetapi saya tidak tahu apa karena ini adalah pertama kalinya saya. Saya akan sangat menghargai bantuan apa pun.
Terkait:Ubuntu – Bagaimana direktori /tmp dibersihkan?Terima kasih telah membaca posting yang panjang. Beri tahu saya jika Anda memerlukan informasi lebih lanjut.
Jawaban yang Diterima:
Anda melewatkan dua langkah sebelum make install
, yang menginstal driver yang diperlukan. Sebelum make install
melakukan make modules
dan make modules_install
dalam urutan itu. Ini menginstal driver berdasarkan file .config Anda.
Kesalahan juga dapat terjadi karena konfigurasi yang tidak tepat dalam file .config dan karenanya beberapa driver hilang. Jadi di sini adalah cara hackish untuk melakukan kompilasi kernel. Salah satu cara terbaik untuk mendapatkan konfigurasi yang tepat adalah dengan menyalin konfigurasi yang berfungsi dari direktori /boot ke .config Anda di folder kode sumber kernel. File konfigurasi kernel Anda yang berfungsi adalah
/boot/config-`uname -r`
Kemudian lakukan kompilasi dengan make
. make
akan menanyakan beberapa konfigurasi, yang tidak ada dalam file .config, karena file .config ini mungkin sesuai dengan kernel lama dan tidak memiliki beberapa konfigurasi di kernel baru yang Anda coba kompilasi. Cukup ketik Enter untuk semua petunjuk konfigurasi – yang akan memilih konfigurasi default. Kemudian lakukan make modules
, make modules_install
dan terakhir make install
. Ini harus menyelesaikan masalah Anda.
Cara kompilasi ini tidak cocok untuk seorang profesional, tetapi akan membantu pemula tanpa banyak pengetahuan tentang opsi konfigurasi yang berbeda untuk memulai kompilasi kernel.