Saya telah membaca banyak tutorial tentang cara membangun kernel khusus dan mem-boot Ubuntu menggunakan kernel tersebut, dan berhasil mengikuti panduan dan mem-boot kernel kustom, tetapi saya tidak mengerti tentang apa yang masing-masing perintah dalam panduan lakukan dan apa yang sebenarnya terjadi dengan setiap perintah.
Prosedur yang dijelaskan di situs Ubuntu melakukan banyak pekerjaan dengan fakeroot
, dpkg
, make-kpkg
, beberapa initramfs, dan hal-hal mengerikan lainnya yang bekerja tetapi hanya tidak membantu saya memahami apa yang sedang terjadi.
- Apa output dari
make
dalam direktori kernel linux? - Apakah itu membuat "image kernel terkompresi"?
- Apa nama file "image kernel terkompresi" dan di mana ia ditempatkan?
- Apa yang
make modules
harus dilakukan - Haruskah
make modules
dilakukan sebelum atau sesudahmake
? - Tidak
make
membangun modul saya secara otomatis? - Apa prosesnya (dalam bahasa Inggris, bukan hanya daftar perintah) untuk menambahkan kernel yang baru dibangun ke daftar kernel yang dapat di-boot?
- Apa yang
make install
harus dilakukan - Akan
make install
menambahkannya ke daftar kernel bootable sehingga saya tidak perlu melakukan apa-apa lagi? - Apakah ada yang setara
make modules_install
?
ubuntu
linux-kernel
make
AnkurVj
sumber
sumber
Jawaban:
Dari atas...
make
mengkompilasi dan menautkan gambar kernel. Ini adalah satu file bernamavmlinuz
.make modules
mengkompilasi file individual untuk setiap pertanyaan yang Anda jawabM
selama konfigurasi kernel. Kode objek dihubungkan dengan kernel yang baru Anda buat. (Untuk pertanyaan yang dijawabY
, ini sudah menjadi bagian darivmlinuz
, dan untuk pertanyaan yang dijawab,N
mereka dilewati).make install
instal kernel bawaan Anda ke/vmlinuz
.make modules_install
menginstal modul kernel Anda ke/lib/modules
atau/lib/modules/<version>
.Adapun menambahkannya ke daftar kernel yang tersedia, itu dirawat oleh boot loader. Ini berbeda untuk setiap boot loader, tetapi
grub
yang paling umum pada x86 dan amd64 jadi saya akan menjelaskannya. Ini sebenarnya cukup sederhana. Grub melihat ke dalam/
,/boot
dan/lib/modules
untuk hal apa pun yang terlihat seperti kernel yang berfungsi dan menambahkannya. Dan ya, ini adalah deskripsi yang terlalu disederhanakan.Itu "hal-hal mengerikan" ekstra dalam dokumentasi Ubuntu adalah hal-hal tambahan untuk membuat
deb
paket. Ketika Anda melakukannya untuk lebih dari diri Anda sendiri, itu jauh lebih baik untuk mengemasnya. Anda akan beralih waktu.Membangun kernel dan modul disimpan terpisah karena untuk orang-orang yang perlu (yaitu, pengembang kernel) mereka sering membuat perubahan hanya pada modul. Mereka dapat menerapkan perubahan mereka, membangun kembali, dan menginstal hanya modul. Ini menghemat banyak waktu ketika harus dilakukan 20 kali sehari. Tidak akan pernah diperbarui untuk memiliki satu
make everything
perintah. Anda sebaliknya, jalankanmake && make modules && make install && make modules_install
seperti yang dikatakan dokumentasi lakukan . Proses build lebih mendukung pengembang kernel, bukan Anda. Dan memang seharusnya begitu.Pada kenyataannya hampir tidak ada alasan bagi siapa pun kecuali pengembang kernel atau pembuat paket distro untuk mengkompilasi kernel. Dalam hampir semua keadaan, fitur kernel yang Anda inginkan telah dibangun untuk Anda dan tersedia di salah satu kernel yang sudah dikemas sebelumnya. Ada pengecualian, tetapi mereka sangat jarang hari ini.
Bukannya saya mengecilkan hati Anda dari membangun kernel Anda sendiri, saya benar-benar mendorong Anda untuk melakukannya. Saya pikir membangun kernel Anda dari awal adalah praktik yang sangat berharga untuk mempelajari bagaimana semuanya bekerja di sana. Sebagian, karena mungkin suatu hari Anda akan menjadi pengecualian yang perlu. Tetapi itu juga mengajarkan Anda banyak tentang proses kernel & boot secara umum. Anda akan menjadi orang yang lebih baik karena telah melakukannya.
sumber
/vmlinuz
direktori ada di folder root? ketika saya melakukan make install, apakah direktori ini akan dibuat dan kernel baru ditempatkan di sana? Apakah akanmake modules_install
mengganti modul yang saya instal saat ini? Misalkan saya menempatkan vmlinux saya di direktori / boot, apakah saya perlu melakukan sesuatu yang lain (seperti mengedit file konfigurasi grub dan melakukan pembaruan grub atau sesuatu setelah itu?)make bzimage
adalah apa yang melakukan itu./vmlinuz
adalah file biner, bukan direktori. Saya hanya membuat kernel paket selama 5 tahun terakhir, jadi saya tidak ingat persis perilakumodules_install
kernel yang diinstal secara langsung. Grub akan menemukan kernel Anda/boot
tanpa bantuan. Ya, Anda harus selalu menjalankangrub-update
setelah menginstal kernel baru.make bzimage
bukanmake
? APAKAH saya perlu melakukanmake clean
danmake bzimage
lagi? Dengan/vmlinuz
maksud Anda file akan dibuat di direktori root atau di direktori source kernel linux?/
adalah jalur absolut, jadi ya itu file di root.Y
dikompilasi dalam (yaitu, mereka adalah bagian dari vmlinuz). Modul yang dijawabM
dikompilasi sebagai modul yang dapat dimuat. Modul yang dijawabN
tidak dikompilasi.make modules_install
hanya berlaku untuk mereka yang menjawabM
.