Apakah seluruh kernel dimuat ke dalam memori saat boot?

14

Saya membaca dokumentasi IBM yang populer ini (saya melihatnya cukup sering di web) menjelaskan fungsi disk RAM awal.

Saya menabrak dinding dalam membuat konsep bagaimana ini bekerja sekalipun.

Dalam dokumen itu tertulis

Boot loader, seperti GRUB, mengidentifikasi kernel yang akan dimuat dan menyalin gambar kernel ini dan initrd terkait ke dalam memori

Saya sudah bingung: Apakah ini menyalin seluruh kernel ke memori atau hanya sebagian saja? Jika seluruh kernel ada di memori maka mengapa kita bahkan membutuhkan disk RAM awal?

Saya pikir tujuan initrd adalah dapat memiliki imej kernel kecil yang digeneralisasi dan initrd akan menginstal modul yang benar di dalamnya sebelum imej kernel dimuat. Tetapi jika seluruh kernel sudah ada di memori mengapa kita perlu initrd?

Itu juga memunculkan hal lain yang membingungkan saya - di mana modul-modul yang dimuat ke kernel berada? Apakah semua modul kernel disimpan di dalam initrd?

pengguna1028270
sumber
Iya. Seluruh kernel. Dan rootfs pertama. Tetapi kernel linux belum pernah menggunakan initrd selama bertahun-tahun.
mikeserv
Benar saya sedang membaca itu. Sebagian besar telah digantikan oleh initramfs bukan? Dan masih proses yang sama dengan initramfs benar?
user1028270
1
sudah sepenuhnya diganti untuk semua kernel sejak seri 2.6. Tetapi prosesnya agak mirip kecuali bahwa initramfs tidak pernah di-unmount - selalu ada dan selalu di-root juga. Anda harus me-mount root dev di atasnya, sebenarnya. Ada juga manfaat tidak perlu meniru dev blok yang terpisah dan serupa.
mikeserv
Keren, saya akan membaca artikel yang Anda tautkan. Jadi modul kernel disimpan di rootfs initramfs?
user1028270
1
@edwardtorvalds - semua ditangani oleh udevbiasanya, dan ya, secara otomatis.
mikeserv

Jawaban:

17

Seluruh kernel dimuat ke dalam memori saat boot, biasanya bersamaan dengan initramfssaat ini. (Masih dimungkinkan untuk membuat sistem untuk boot tanpa, initramfstetapi itu tidak biasa pada desktop dan server.)

The initramfs's berperan untuk menyediakan fungsi yang dibutuhkan untuk me-mount 'nyata' filesystem dan melanjutkan proses boot. Itu melibatkan modul kernel, dan juga berbagai binari: setidaknya Anda perluudev , mungkin beberapa jaringan, dan kmodyang memuat modul.

Modul dapat dimuat ke dalam kernel lebih dari sekedar boot, jadi tidak ada persiapan khusus oleh kernel initramfs. Mereka dapat disimpan di mana saja: yang initramfs, /lib/modulespada filesystem nyata, di pohon pengembangan jika Anda sedang mengembangkan sebuah modul ... The initramfshanya perlu berisi modul yang diperlukan untuk me-mount filesystem root (yang berisi sisanya).

Stephen Kitt
sumber
OK itu masuk akal bagi saya. Saya pikir saya sedang mengkonfigurasikan kernel image dan sistem file yang digunakannya yang jelas sangat terpisah.
user1028270
5

Seluruh kernel (tetapi bukan modulnya) akan dimuat ke dalam memori. Jika ada modul yang dibutuhkan kernel sebelum filesystem apa pun tersedia (ini biasanya berarti driver untuk filesystem dan perangkatnya), maka modul-modul itu akan ada di initramfs (di memori), dan kernel akan memuatnya dari sana. Modul-modul lain dapat diambil nanti dari sistem file.

Toby Speight
sumber
3

Kernel dalam pengaturan Linux modern berbasis modul, yaitu kernel yang tepat (dimuat saat boot ke RAM) hanya mencakup fungsionalitas minimum, semua sisanya dikompilasi sebagai modul (dapat dimuat saat runtime). Untuk membuat ini bekerja bahkan ketika misalnya perangkat atau sistem file yang diperlukan untuk boot adalah modul, sebuah initramfsdimuat dengan kernel (seperti namanya, ini adalah area RAM dengan sistem file sederhana, dipasang pada saat boot). Sistem file sementara ini sudah terpasang /, dan berisi program startup dan modul yang diperlukan. Setelah startup dinyalakan initramfs, Linux mengeksekusi a pivot_root(8), mem-moun yang asli /dan melemparkan initramfskonten.

Inti dari kerumitan ini adalah bahwa misalnya distribusi dapat mengkompilasi satu kernel (kernel minimal dan modul set lengkap), dan pada pemasangan kernel membuat yang initramfsdisesuaikan dengan perangkat keras dan pengaturan mesin target. Semua ini diperlukan karena beragamnya perangkat dan konfigurasi "Komputer Pribadi".

vonbrand
sumber
Tidak bisa pivot_root.
mikeserv