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. RAM diski, genel ve tedarikçi RAM disklerine ayrılı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/
içinde bulunan birinci aşamainit
tedarikçi çekirdek modülleri./lib/modules/
konumunda bulunanmodprobe
yapılandırma dosyaları:modules.dep
,modules.softdep
,modules.alias
,modules.options
.- İlk aşamada başlatma sırasında hangi modüllerin ve hangi sırayla yükleneceğini belirten bir
modules.load
dosyası./lib/modules/
/lib/modules/
'te A/B ve sanal A/B cihazlar için tedarikçi firma kurtarma çekirdek modüllerimodules.load.recovery
, A/B ve sanal A/B cihazları için yüklenecek modülleri ve bunların yükleneceği sırayı/lib/modules
içinde belirtir.
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şamalı başlatmada modül yükleme
İlk aşama init
, ramdisk'teki /lib/modules/
dosyasından 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'ya 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
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 bölümüne kopyalar. /vendor
'ten çekirdek modüllerini yükleme mekanizması, Android'in önceki sürümlerinde olduğu gibidir. 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.
Karıştırıcı 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 derleme 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 sorunun üstesinden gelmek için çekirdek derlemesinde, her bölüme kopyalanacak çekirdek modüllerini içeren bir zip arşivi oluşturabilir.
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 önyükleme bölümü (bu sayfada bahsedilen tedarikçi firma ramdisk'ini içerir) oluşturma hakkında bilgi edinmek için Önyükleme bölümleri bölümüne bakın.