Kompilasi kernel Linux: OS mandiri

2

Hai teman-teman, saya baru mengenal kompilasi kernel Linux jadi saya punya beberapa pertanyaan: Dengan mengkompilasi kernel linux, apakah kita membangun OS yang benar-benar mandiri yang tidak bergantung pada destorsi linux?

Jika ya ... Yah ketika saya ingin membuat file initrd menggunakan perintah initramfs mengapa ia menambahkan beberapa info tentang distribusi linux saya yang sedang berjalan (saya menjalankan Ubuntu 10.4)?

Bagaimana saya harus mengkompilasi dan menambahkan modul ke linux yang dikompilasi dan di mana saya harus meletakkannya?

Ini adalah ringkasan dari apa yang telah saya lakukan:

1. mendapatkan sumber kernel (3.4.1) dan mengkompilasinya menggunakan perintah "make all" (saya menggunakan linux .config saya saat ini)

  1. Menginstal grub pada memory stick saya

  2. Menempatkan bzImage yang telah dikompilasi ke direktori / boot dari memory stick saya

  3. Menggunakan perintah "initramfs" untuk membuat file initrd dan memasukkannya ke / boot juga.

  4. Mem-boot PC saya menggunakan memory stick dan masuk ke grub & gt; terminal

  5. Menggunakan "root (hd0,0)"; "kernel / boot / bzImage"; "initrd /boot/initrd.img" dan kemudian "boot" perintah untuk boot.

  6. Masuk ke terminal (initramfs) setelah kesalahan yang menyatakan bahwa tidak dapat menemukan file "/lib/modules/3.4.1/modules.dep" !!!

Apa yang saya lakukan salah?

morTie
sumber

Jawaban:

10

Dengan mengkompilasi kernel linux, apakah kita membangun OS yang benar-benar mandiri yang tidak bergantung pada destorsi linux?

Tidak. Linux dengan sendirinya bukan sistem operasi. Itu hanya sebuah kernel. SEBUAH userland , yang terdiri dari kumpulan perpustakaan sistem dan perangkat lunak dasar, diperlukan untuk memfasilitasi interaksi Anda dengan komputer. Dalam apa yang biasanya kita maksud ketika kita merujuk ke "Linux", ini disediakan oleh proyek terpisah yang disebut Proyek GNU. Secara teknis, kita harus (dan beberapa memang) menyebutnya "GNU / Linux".

Nah ketika saya ingin membuat file initrd menggunakan perintah initramfs mengapa ia menambahkan beberapa info tentang distribusi linux saya yang sedang berjalan (saya menjalankan Ubuntu 10.4)?

Karena initrd Anda berisi kumpulan program yang awalnya mengatur sistem Anda saat boot, memuat driver dan daemon yang diperlukan, temukan dan pasang partisi yang diperlukan pada hard drive Anda, dll. distribusi, tetapi untuk instalasi khusus Anda, konfigurasi, dan komputer. Ini umumnya tidak dapat dipertukarkan dengan initrd orang lain. Itu sebabnya harus dibuat oleh sistem Anda.

Bagaimana saya harus mengkompilasi dan menambahkan modul ke linux yang dikompilasi dan di mana saya harus meletakkannya?

Jika Anda mengkompilasi kernel Anda sendiri, mungkin Anda melakukannya make menuconfig dalam direktori source kernel sebelum kompilasi, yang memungkinkan Anda untuk memilih fitur mana yang akan dikompilasi, dan apakah mereka akan diintegrasikan ke dalam biner kernel atau tersedia sebagai modul.

Ini adalah ringkasan dari apa yang telah saya lakukan:

Ada sejumlah alasan mengapa ini tidak akan berfungsi seperti yang Anda inginkan.

mendapatkan sumber kernel (3.4.1) dan mengkompilasinya menggunakan perintah "make all" (saya menggunakan linux .config saya saat ini)

Jika Anda menjalankan Ubuntu 10,04, yang mendahului cabang 3.x dari kernel Linux sedikit, apalagi 3.4. Kemungkinan besar itu tidak akan berfungsi dengan benar, setidaknya tidak tanpa banyak kerja ekstra. File konfigurasi berubah sedikit juga, dan saya terus terang terkejut itu tidak membuang kesalahan kiri dan kanan tentang hal-hal di file konfigurasi (mungkin untuk Linux 2.6) Anda tidak cocok dengan bagaimana hal-hal yang dilakukan dalam 3.4. Juga, Anda mungkin ingin mengunduh paket sumber kernel Ubuntu dan bukan sumber kernel vanilla biasa dari kernel.org, karena Ubuntu menambal kernel untuk memasukkan fitur-fitur yang diperlukan dan membuatnya bermain bagus dengan semua hal lain dalam sistem. Akhirnya, Anda kehilangan sejumlah langkah, yang akan saya bahas nanti.

Menempatkan bzImage yang telah dikompilasi ke direktori / boot dari memory stick saya

Saya tidak yakin apa maksud Anda dengan ini, tetapi jika memiliki instalasi Linux yang dapat di-boot penuh pada memory stick Anda, ada sedikit lebih dari itu - Anda tidak memiliki userland sama sekali pada memori itu tongkat, misalnya. Apa yang sebenarnya akan dilakukan, jika diatur dengan benar, adalah (coba) menjalankan instalasi Ubuntu pada hard drive Anda dengan kernel pada memory stick Anda. Saya percaya ini harus berhasil, tetapi mengapa melakukan itu daripada hanya menginstal kernel pada hard drive Anda? Anda dapat menginstalnya berdampingan dengan yang sudah ada sehingga Anda dapat dengan bebas beralih di antaranya.

Masuk ke terminal (initramfs) setelah kesalahan yang menyatakan bahwa tidak dapat menemukan file "/lib/modules/3.4.1/modules.dep" !!!

Ini kembali ke langkah-langkah yang terlewatkan yang saya sebutkan sebelumnya. Kamu butuh make modules_install kernel baru Anda untuk menempatkan modul-modulnya /lib/modules.

NAMUN...

Tidak ada yang benar-benar penting, karena idealnya Anda tidak harus mengkompilasi kernel dengan cara "tradisional" sama sekali, kecuali Anda memiliki kebutuhan yang sangat spesifik. Saat ini, jika Anda benar-benar perlu mengkompilasi kernel Anda sendiri, sebagian besar distribusi memiliki cara untuk melakukannya yang menggunakan versi kernel kustom mereka (jika ada), mengotomatiskan proses pembuatan, menginstal kernel sebagai sebuah paket sehingga Anda dapat menginstal dan menghapus dengan bersih jika perlu, dan konfigurasikan bootloader Anda untuk memberi Anda pilihan kernel baru atau lama. Di Ubuntu Anda harus mengikuti instruksi ini: Kernel / Compile - Wiki Ubuntu

Bukan berarti Anda tidak dapat mengkompilasi kernel dengan cara "kuno" hanya untuk iseng / untuk tujuan pendidikan - Saya mengkompilasi kernel pertama saya dengan cara itu, tetapi ini sebelum ada cara yang lebih baik untuk melakukannya. Jika sistem Anda tidak rusak penting bagi Anda, gunakan metode yang disarankan untuk distro Anda, gunakan sumbernya, dan gunakan manajemen paket mereka.

tgies
sumber
1
Jika kamu nyata ingin membangun Linux Anda sendiri, dari bawah ke atas, periksa linuxfromscratch.org . Maklum bahwa ini adalah proses yang sangat kompleks dan terlibat, dan kompilasi kernel Anda mungkin adalah termudah bagian dari itu.
tgies
1

Ketika Anda mengkompilasi ulang atau mengkompilasi kernel Linux, Anda TIDAK membuat distribusi baru. Anda hanya membuat versi kernel yang lebih baru atau berbeda. Kernel adalah satu file yang dimuat, kemudian dieksekusi oleh bootloader setelah PC Anda menyelesaikan proses POST.

Distribusi terdiri dari banyak, banyak file lain, termasuk utilitas standar UNIX, biasanya manajer paket, dan lainnya. Tidak ada yang tersentuh jika Anda mengkompilasi kernel Anda sendiri.

Sudah beberapa saat sejak saya mengkompilasi kernel saya sendiri, tetapi saya pikir Anda perlu menjalankan depmod -a setelah make perintah.

LawrenceC
sumber
make module_install menginstal modul kernel dan, saya percaya, berjalan depmod untukmu.
tgies
eh, lebih tepatnya, itu tidak perlu atau tidak berarti untuk dijalankan depmod -a mengacu pada kernel baru yang baru Anda kompilasi tetapi tidak berjalan pada saat Anda memohon depmod. depmod mungkin terjadi saat boot ketika perlu.
tgies