Tüm çekirdek önyükleme sırasında belleğe yüklendi mi?


14

İlk RAM diskinin işlevini açıklayan bu popüler IBM belgesini (web'de oldukça sık atıfta bulunduğunu görüyorum) okudum .

Bunun nasıl çalıştığını kavramsallaştırmak için bir duvara çarptım.

Doktorda diyor ki

GRUB gibi önyükleme yükleyicisi, yüklenecek çekirdeği tanımlar ve bu çekirdek görüntüsünü ve ilişkili tüm başlatıcıları belleğe kopyalar

Zaten kafam karıştı: Tüm çekirdeği belleğe mi, sadece bir kısmına mı kopyalıyor? Çekirdeğin tamamı bellekte ise neden ilk RAM diskine ihtiyacımız var?

İnitrd'nin amacının küçük bir genelleştirilmiş çekirdek görüntüsüne sahip olabileceğini ve initrd'in çekirdek görüntüsü yüklenmeden önce içine doğru modülleri yükleyeceğini düşündüm. Ancak tüm çekirdek zaten hafızadaysa neden initrd'e ihtiyacımız var?

Bu da beni şaşırtan bir şey daha getiriyor - çekirdeğe yüklenen modüller nerede? Tüm çekirdek modülleri initrd içinde saklanıyor mu?


Evet. Tüm çekirdek. Ve ilk rootfs. Ancak linux çekirdekleri initrd'i uzun yıllar kullandı.
mikeserv

Tamam, bunu okuyordum. Büyük ölçüde initramfs ile değiştirildi değil mi? Ve hala initramfs doğru bir süreç doğru mu?
user1028270

1
2.6 serisinden beri tüm çekirdekler için tamamen değiştirildi. Ancak süreç, initramfların asla sökülmemesi dışında biraz benzer - her zaman orada ve her zaman kökü de. Aslında kök geliştiricinizi bunun üzerine monte etmeniz gerekiyor. Ayrı bir blok dev ve benzerini taklit etmemenin faydaları da vardır.
mikeserv

Cool Bağlantı kurduğunuz makaleyi okuyacağım. Çekirdek modülleri initramfs rootf'lerinde saklanıyor mu?
user1028270

1
@ edwardtorvalds - hepsi udevgenellikle ve evet tarafından otomatik olarak ele alınır .
mikeserv

Yanıtlar:


17

Tüm çekirdek, genellikle initramfsgünümüzde olduğu gibi önyükleme sırasında belleğe yüklenir . (Sistem olmadan önyükleme yapmak için bir sistem kurmak hala mümkündür, initramfsancak bu masaüstü ve sunucularda olağandışı bir durumdur.)

initramfs'Nin rolü 'gerçek' mount ve sistem açılışına devam etmek için gereken işlevselliği sağlamaktır. Bu, çekirdek modüllerini ve ayrıca çeşitli ikili dosyaları içerir: en azından udevbelki de bir ağa ihtiyacınız vardır ve kmodmodülleri yükler.

Modüller çekirdeğe sadece önyüklemeden daha sonra yüklenebilir, bu nedenle çekirdeğin özel bir hazırlığı yoktur initramfs. Onlar her yerde saklanabilir: initramfs, /lib/modulesgerçek dosya sistemi üzerinde, bir modül geliştirmek konum bir gelişme ağacında ... initramfssadece (kalanını içeren) kök dosya sistemini mount gerekli olan modüllere ihtiyaç duyar.


Tamam bu bana mantıklı geliyor. Sanırım çekirdek görüntüsünü ve kullandığı dosya sistemini açıkça ayrı tutuyordum.
user1028270

5

Tüm çekirdek (ancak modülleri değil) belleğe yüklenecektir. Eğer herhangi bir dosya sistemi bulunmadan önce çekirdeğin ihtiyaç duyacağı modüller varsa (bu genellikle dosya sistemleri ve aygıtları için sürücüler anlamına gelir), o zaman bu modüller initramfs (bellekte) olacaktır ve çekirdek onları oradan yükleyecektir. Diğer modüller daha sonra dosya sisteminden yüklenebilir.


3

Modern Linux kurulumlarındaki çekirdek büyük ölçüde modül tabanlıdır, yani, uygun çekirdek (RAM'e önyükleme üzerine yüklenir) sadece minimum minimum işlevselliği içerir, geri kalanı modüller olarak derlenir (çalışma zamanında yüklenebilir). Örneğin, önyükleme için gerekli olan aygıtlar veya dosya sistemleri modül olsa bile bu çalışmayı initramfssağlamak için çekirdek ile birlikte yüklenir (adından da anlaşılacağı gibi, bu, önyükleme üzerine monte edilmiş basit bir dosya sistemine sahip bir RAM alanıdır). Bu geçici dosya sistemi takılıdır /ve başlangıç ​​programlarını ve gerekli modülleri içerir. Başlatma initramfsişlemi tamamlandıktan sonra, Linux bir pivot_root(8)gerçek yürütür /ve initramfsiçeriği atar .

Bu karmaşıklığın amacı, örneğin bir dağıtımın bir çekirdeği (en az çekirdek ve tam modül seti) derleyebilmesidir ve çekirdeğin initramfskurulumu sırasında hedef makinenin donanımına ve kurulumuna göre uyarlanmış bir yapı oluşturur . Bütün bunlar çok çeşitli cihazlar ve "Kişisel Bilgisayarlar" yapılandırmaları nedeniyle gereklidir.


Öyle değil pivot_root.
mikeserv
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.