Genel çekirdek resmi (GKI), bir cihazın bölümleri bağlamasını sağlamak için gerekli sürücü desteğini içermeyebilir. Bir cihazın bölümleri bağlamasını ve önyüklemeye devam etmesini sağlamak için birinci aşama init
, bir ramdisk'te bulunan çekirdek modüllerini yükleyecek şekilde geliştirilmiştir. Ramdisk, genel ve satıcı ramdisk'lere
bölünmüştür. Tedarikçi çekirdek modülleri, tedarikçi ramdisk'inde depolanır. Çekirdek modüllerinin yüklenme sırası yapılandırılabilir.
Modül konumu
Ramdisk, A/B ve sanal A/B cihazlardaki ilk aşama init,
ve kurtarma/fastbootd resmi için dosya sistemidir. Bu, bootloader tarafından birleştirilen iki cpio arşivinden oluşan bir initramfs
dosyasıdır. Tedarikçi-boot bölümünde tedarikçi ramdisk'i olarak depolanan ilk cpio arşivi şu bileşenleri içerir:
/lib/modules/
konumunda bulunan ilk aşamainit
tedarikçi çekirdek modülleri./lib/modules/
konumunda bulunanmodprobe
yapılandırma dosyaları:modules.dep
,modules.softdep
,modules.alias
,modules.options
./lib/modules/
konumunda ilk aşamanın başlatılması sırasında hangi modüllerin, hangi sırayla yükleneceğini gösterenmodules.load
dosyası./lib/modules/
bölgesinde A/B ve sanal A/B cihazları için tedarikçi kurtarma çekirdek modüllerimodules.load.recovery
, A/B ve Sanal A/B cihazları için/lib/modules
içinde hangi modüllerin, hangi sırayla yükleneceğini gösterir.
boot.img'in ramdisk'i olarak GKI ile birlikte sağlanan ve birincinin üzerine uygulanan ikinci cpio arşivi, first_stage_init
'ü ve bağımlı olduğu kitaplıkları içerir.
İlk aşamada modül yükleme
İlk aşama init
, ramdisk'teki /lib/modules/
modprobe yapılandırma dosyalarını okuyarak başlar. Ardından, /lib/modules/modules.load
(veya kurtarma durumunda /lib/modules/modules.load.recovery
) içinde belirtilen modül listesini okur ve daha önce yüklenen dosyalarda belirtilen yapılandırmaya göre bu modüllerin her birini sırayla yüklemeye çalışır. İstenilen sipariş, zorunlu veya isteğe bağlı bağımlılıkları karşılamak için değiştirilebilir.
Derleme desteği, ilk aşamada başlatma
Tedarikçi ramdisk cpio'ya kopyalanacak çekirdek modüllerini belirtmek için bunları BOARD_VENDOR_RAMDISK_KERNEL_MODULES
içinde listeleyin. Derleme, bu modüllerde depmod
'yi çalıştırır ve ortaya çıkan modprobe yapılandırma dosyalarını tedarikçi firma ramdisk cpio'suna yerleştirir.
Derleme ayrıca bir modules.load
dosyası oluşturur ve bunu tedarikçi ramdisk cpio'sunda depolar. Varsayılan olarak BOARD_VENDOR_RAMDISK_KERNEL_MODULES
bölümünde listelenen tüm modülleri içerir. Söz konusu dosyanın içeriğini geçersiz kılmak için bu örnekte gösterildiği gibi BOARD_VENDOR_RAMDISK_KERNEL_MODULES_LOAD
simgesini 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 önceki sürümlerde olduğu gibi, BOARD_VENDOR_KERNEL_MODULES
içinde listelenen çekirdek modülleri, Android platform derlemesi tarafından /vendor/lib/modules
adresindeki tedarikçi bölümüne kopyalanır. Platform derlemesi bu modüllerde depmod
çalıştırır ve depmod
çıkış dosyalarını aynı konumdaki tedarikçi firma bölümüne kopyalar. /vendor
platformundaki çekirdek modüllerini yükleme mekanizması, Android'in önceki sürümleriyle aynıdır. Bu modülleri nasıl ve ne zaman yükleyeceğinize siz karar verirsiniz. Ancak bu işlem genellikle init.rc
komut dosyaları kullanılarak yapılır.
Joker karakterler ve entegre çekirdek derlemeleri
Cihaz çekirdek derlemelerini Android platform derlemesiyle birleştiren tedarikçiler, cihaza kopyalanacak çekirdek modüllerini belirtmek için yukarıda belirtilen BOARD
makrolarını kullanırken sorunla karşılaşabilir. Tedarikçi, çekirdek modüllerini cihazın platform derleme dosyalarında listelemekten kaçınmak istiyorsa joker karakter ($(wildcard device/vendor/mydevice/*.ko
) kullanabilir. Joker karakterin, entegre çekirdek derlemesi durumunda çalışmadığını unutmayın. Çünkü make çağrıldığında ve makrolar makefile'lerde genişletildiğinde çekirdek modülleri derlenmemiş olur ve bu nedenle makrolar boş olur.
Tedarikçi, bu sorunu çözmek için çekirdek derlemesini, her bölüme kopyalanacak çekirdek modüllerini içeren bir zip arşivi oluşturmasını sağlayabilir.
BOARD_*_KERNEL_MODULES_ARCHIVE
içindeki bu zip arşivinin yolunu ayarlayın. Burada *
, bölümün adıdır (ör. BOARD_VENDOR_KERNEL_MODULES_ARCHIVE
). Android platform derlemesi, bu zip arşivini uygun konuma çıkarır ve modüllerde depmod
'ı çalıştırır.
Çekirdek modülü zip arşivinde, platform derlemesinin gerektiğinde arşivi oluşturmasını sağlayan bir make kuralı olmalıdır.
Kurtarma
Önceki Android sürümlerinde, kurtarma için gereken çekirdek modülleri BOARD_RECOVERY_KERNEL_MODULES
içinde belirtiliyordu. Android 12'de, kurtarma için gereken çekirdek modülleri bu makro kullanılarak belirtilmeye devam eder. Ancak kurtarma çekirdek modülleri, genel ramdisk cpio yerine tedarikçi ramdisk cpio'ya kopyalanır. Varsayılan olarak, BOARD_RECOVERY_KERNEL_MODULES
içinde listelenen tüm çekirdek modülleri ilk aşama init
sırasında yüklenir. Yalnızca bu modüllerin bir alt kümesinin yüklenmesini istiyorsanız BOARD_RECOVERY_KERNEL_MODULES_LOAD
içinde bu alt kümenin içeriğini belirtin.
İlgili dokümanlar
Tedarikçi firma başlatma bölümü (bu sayfada bahsedilen tedarikçi firma RAM'ini içerir) oluşturma hakkında bilgi edinmek için Önyükleme bölümleri'ni inceleyin.