Genel bir çekirdek görüntüsü (GKI), bir aygıtın bölümleri bağlamasını sağlamak için gerekli sürücü desteğini içermeyebilir. Bir aygıtın bölümleri monte etmesini ve önyüklemeye devam etmesini sağlamak için, birinci aşama init
bir ramdisk üzerinde bulunan çekirdek modüllerini yükleyecek şekilde geliştirildi. Ramdisk genel ve satıcı ramdisklerine bölünmüştür. Satıcı çekirdek modülleri satıcının ramdiskinde saklanır. Çekirdek modüllerinin yüklenme sırası yapılandırılabilir.
Modül konumu
Ramdisk, birinci aşama init,
ve A/B ve sanal A/B aygıtlarındaki kurtarma/hızlı önyükleme görüntüsüne yönelik dosya sistemidir. Önyükleyici tarafından birleştirilen iki cpio arşivinden oluşan bir initramfs
. Satıcı-önyükleme bölümünde satıcının ramdiski olarak saklanan ilk cpio arşivi şu bileşenleri içerir:
-
/lib/modules/
konumunda bulunan birinci aşamainit
satıcı çekirdek modülleri. -
/lib/modules/
konumunda bulunanmodprobe
yapılandırma dosyaları:modules.dep
,modules.softdep
,modules.alias
,modules.options
. - İlk aşama başlatma sırasında hangi modüllerin yükleneceğini ve
/lib/modules/
dizininde belirten birmodules.load
dosyası. -
/lib/modules/
dizininde, A/B ve Sanal A/B aygıtları için satıcı kurtarma çekirdeği modülleri -
/lib/modules
dosyasında, A/B ve Sanal A/B aygıtları için modüllerin hangi sırayla yükleneceğini belirtenmodules.load.recovery
.
Boot.img dosyasının ramdiski olarak GKI ile birlikte sağlanan ve birincinin üstüne uygulanan ikinci cpio arşivi, first_stage_init
ve bağlı olduğu kütüphaneleri içerir.
Birinci aşama başlangıçta modül yükleme
İlk aşama init
modprobe yapılandırma dosyalarının ramdisk üzerindeki /lib/modules/
adresinden okunmasıyla başlar. Daha sonra, /lib/modules/modules.load
(veya kurtarma durumunda /lib/modules/modules.load.recovery
) içinde belirtilen modüllerin listesini okur ve aşağıdakileri izleyerek bu modüllerin her birini sırayla yüklemeye çalışır: önceden yüklenen dosyalarda belirtilen yapılandırma. Talep edilen sipariş, donanım veya yazılım bağımlılıklarını karşılamak için farklı olabilir.
Derleme desteği, ilk aşama başlatma
Satıcının ramdisk cpio'suna kopyalanacak çekirdek modüllerini belirtmek için bunları BOARD_VENDOR_RAMDISK_KERNEL_MODULES
içinde listeleyin. Derleme, bu modüllerde depmod
çalıştırır ve elde edilen modprobe yapılandırma dosyalarını satıcının ramdisk cpio'suna yerleştirir.
Derleme ayrıca bir modules.load
dosyası oluşturur ve bunu satıcının ramdisk cpio'sunda saklar. Varsayılan olarak BOARD_VENDOR_RAMDISK_KERNEL_MODULES
listelenen tüm modülleri içerir. Bu dosyanın içeriğini geçersiz kılmak için bu örnekte gösterildiği gibi BOARD_VENDOR_RAMDISK_KERNEL_MODULES_LOAD
kullanın:
BOARD_VENDOR_RAMDISK_KERNEL_MODULES_LOAD := \ device/vendor/mydevice-kernel/first.ko \ device/vendor/mydevice-kernel/second.ko \ device/vendor/mydevice-kernel/third.ko
Derleme desteği, tam Android
Android 10 ve daha düşük sürümlerde olduğu gibi, BOARD_VENDOR_KERNEL_MODULES
listelenen çekirdek modülleri, Android platformu yapısı tarafından /vendor/lib/modules
adresindeki satıcı bölümüne kopyalanır. Platform yapısı, depmod
bu modüller üzerinde çalıştırır ve depmod
çıktı dosyalarını aynı konumdaki satıcı bölümüne kopyalar. Çekirdek modüllerini /vendor
yükleme mekanizması, Android'in önceki sürümlerinde olduğu gibi aynı kalır. Bu modüllerin nasıl ve ne zaman yükleneceği sizin kararınızdır, ancak bu genellikle init.rc
komut dosyaları kullanılarak yapılır.
Joker karakterler ve entegre çekirdek yapıları
Cihaz çekirdek yapısını Android platformu yapısıyla birleştiren satıcılar, cihaza kopyalanacak çekirdek modüllerini belirtmek için yukarıda belirtilen BOARD
makrolarını kullanırken bir sorunla karşılaşabilirler. Satıcı, cihazın platform derleme dosyalarında çekirdek modüllerini listelemekten kaçınmak isterse, bir joker karakter ( $(wildcard device/vendor/mydevice/*.ko
) kullanabilir. Tümleşik bir durumda joker karakterin çalışmadığını unutmayın. çekirdek yapısı, çünkü make çağrıldığında ve makrolar makefile dosyalarında genişletildiğinde, çekirdek modülleri oluşturulmamıştır, dolayısıyla makrolar boştur.
Bu sorunu aşmak için satıcı, çekirdek yapısının, her bölüme kopyalanacak çekirdek modüllerini içeren bir zip arşivi oluşturmasını sağlayabilir. Bu zip arşivinin yolunu BOARD_*_KERNEL_MODULES_ARCHIVE
içinde ayarlayın; burada *
bölümün adıdır ( BOARD_VENDOR_KERNEL_MODULES_ARCHIVE
gibi). Android platformu yapısı bu zip arşivini uygun konuma çıkarır ve modüller üzerinde depmod
çalıştırır.
Çekirdek modülü zip arşivi, platform yapısının gerektiğinde arşivi oluşturabilmesini sağlayan bir make kuralına sahip olmalıdır.
İyileşmek
Önceki Android sürümlerinde, kurtarma için gereken çekirdek modülleri BOARD_RECOVERY_KERNEL_MODULES
içinde belirtilmişti. Android 11'de kurtarma için gereken çekirdek modülleri hâlâ bu makro kullanılarak belirtiliyor. Ancak kurtarma çekirdeği modülleri, genel ramdisk cpio'su yerine satıcının ramdisk cpio'suna kopyalanır. Varsayılan olarak BOARD_RECOVERY_KERNEL_MODULES
listelenen tüm çekirdek modülleri ilk aşama init
sırasında yüklenir. Bu modüllerin yalnızca bir alt kümesinin yüklenmesini istiyorsanız, bu alt kümenin içeriğini BOARD_RECOVERY_KERNEL_MODULES_LOAD
içinde belirtin.
İlgili belgeler
Satıcı önyükleme bölümü (bu sayfada belirtilen satıcı ramdiskini içeren) oluşturma hakkında bilgi edinmek için bkz . Önyükleme Bölümleri .