Android 12'de bootconfig özelliği, Android 11 ve önceki sürümlerde kullanılan androidboot.*
kernel cmdline seçeneklerinin yerini alır. bootconfig özelliği, yapılandırma ayrıntılarını derleme ve önyükleme yükleyiciden Android 12'ye aktaran bir mekanizmadır.
Bu özellik, Android kullanıcı alanı yapılandırma parametrelerini çekirdek yapılandırma parametrelerinden ayırmanın bir yolunu sağlar. Uzun androidboot.*
çekirdek parametrelerini bootconfig dosyasına taşımak, çekirdek cmdline'sinde yer açar ve gelecekteki genişletmeler için kullanılabilir hale getirir.
Hem çekirdek hem de Android kullanıcı alanı bootconfig
'ü desteklemelidir.
- Bu desteğin sunulduğu ilk sürüm: Android 12
- Bu desteğin sunulduğu ilk çekirdek sürümü: 12-5.4.xx çekirdeği
12-5.10.xx çekirdek sürümüyle kullanıma sunulan yeni cihazlar için bootconfig özelliğini uygulayın. Cihazları yükseltiyorsanız bunu uygulamanız gerekmez.
Örnekler ve kaynak
Bu bölümdeki örnekleri ve kaynak kodu görüntülerken bootconfig
kodunun biçiminin, Android 11 ve önceki sürümlerde kullanılan çekirdek cmdline biçiminden yalnızca biraz farklı olduğunu unutmayın.
Ancak kullanımınız açısından aşağıdaki fark önemlidir:
- Parametreler boşlukla değil, yeni satır kaçış dizisi
\n
ile ayrılmalıdır.
Bootloader örneği
Önyükleme programı örneği için Cuttlefish U-boot referans önyükleme programı uygulamasına bakın. Referanstaki iki taahhüt aşağıda listelenmiştir. İlk önizleme, önyükleme başlığı sürüm desteğini en son sürüme yükseltir. Örnekte, ilk taahhüt, sürüm desteğini bir sonraki sürüme (v4) günceller (veya yükseltir). İkinci örnekte, bootconfig işlemeyi eklemenin yanı sıra çalışma zamanında parametre ekleme işlemi gösterilmektedir:
Derleme örneği
Tedarikçi firma önyükleme başlığı sürüm 4 ile vendor_boot.img
oluşturmak için mkbootimg
değişikliklerini gösteren bir derleme örneği için mkbootimg changes for
bootconfig
bölümüne bakın.
Aşağıdakileri yapmak için Cuttlefish değişikliklerine bakın:
- Satıcı önyükleme üstbilgisi sürüm 4'ü kullanın (veya önceki sürümden yükseltin).
- bootconfig'i çekirdek cmdline'ine ekleyin ve seçili parametreleri bootconfig'e taşıyın.
Uygulama
İş ortakları, önyükleyicilerine destek eklemeli ve derleme zamanı androidboot.*
parametrelerini çekirdek cmdline'den bootconfig dosyasına taşımalıdır. Bu değişikliği uygulamanın en iyi yolu, artımlı olarak uygulamaktır. Artımlı bir süreç izleme hakkında bilgi edinmek için Artımlı uygulama ve doğrulama bölümüne bakın.
/proc/cmdline dosyasında androidboot.*
parametreleri arayan değişiklikleriniz varsa bunları /proc/bootconfig
dosyasına yönlendirin. ro.boot.*
özellikleri yeni bootconfig
değerleriyle ayarlandığından bu özellikleri kullanan kodda değişiklik yapmanız gerekmez.
Derleme değişiklikleri
Öncelikle önyükleme başlığı sürümünüzü 4. sürüme yükseltin:
- BOARD_BOOT_HEADER_VERSION := 3
+ BOARD_BOOT_HEADER_VERSION := 4
bootconfig
çekirdek cmdline parametresini ekleyin. Bu, çekirdeğin bootconfig bölümünü aramasına neden olur:
BOARD_KERNEL_CMDLINE += bootconfig
bootconfig parametreleri, kernel cmdline'in BOARD\_KERNEL\_CMDLINE
değişkeninden oluşturulduğu gibi BOARD_BOOTCONFIG
değişkenindeki parametrelerden oluşturulur.
Tüm androidboot.*
parametreleri aşağıdaki gibi olduğu gibi taşınabilir:
- BOARD_KERNEL_CMDLINE += androidboot..selinux=enforcing
+ BOARD_BOOTCONFIG += androidboot..selinux=enforcing
Önyükleme değiştirici değişiklikleri
Önyükleme yükleyici, çekirdeğe geçmeden önce initramfs
'ü kurar. Çekirdek önyükleme yapılandırması, bootconfig bölümünü arar ve bu bölümün, beklenen fragmanla birlikte initramfs,
dosyasının en sonunda olmasını bekler.
Önyükleme yükleyici, vendor_boot.img
düzen bilgilerini tedarikçi firma önyükleme resmi üstbilgisinin
Şekil 1. Android 12 bootconfig bellek tahsisi
Önyükleme yükleyici, bellekte bootconfig bölümünü oluşturur. bootconfig bölümünde aşağıdakiler için bellek tahsisleri bulunur:
- Parametreler
- 4 B boyutu
parameters size
- 4 B boyutu
parameters checksum
- 12 B bootconfig sihirli dizesi (
#BOOTCONFIG\n
)
Parametreler iki kaynaktan gelir: Derleme sırasında bilinen parametreler ve derleme sırasında bilinmeyen parametreler. Bilinmeyen parametreler eklenmelidir.
Derleme zamanında bilinen parametreler, bootconfig bölümündeki vendor_boot
resminin sonuna paketlenir. Bölümün boyutu, vendor_bootconfig_size
tedarikçi önyükleme üstbilgi alanında bayt olarak depolanır.
Derleme sırasında bilinmeyen parametreler yalnızca önyükleyicide çalışma zamanında bilinir. Bunlar, bootconfig ön ekinden önce bootconfig parametreleri bölümünün sonuna eklenmelidir.
bootconfig fragmanı uygulandıktan sonra parametre eklemeniz gerekirse fragmanın üzerine yazıp yeniden uygulayın.
Artımlı uygulama ve doğrulama
Bu bölümde verilen süreci uygulayarak bootconfig özelliğini aşamalı olarak uygulayın. bootconfig parametreleri eklenirken çekirdek cmdline parametrelerine dokunmayın.
Doğrulama içeren artımlı uygulama adımları şunlardır:
- Önyükleyici ve derleme değişikliklerini yapın, ardından aşağıdakileri yapın:
- Yeni bir bootconfig parametresi eklemek için
BOARD_BOOTCONFIG
değişkenini kullanın. - Cihazın doğru şekilde önyükleme yapmaya devam edebilmesi için çekirdek cmdline parametrelerini olduğu gibi bırakın. Bu sayede hata ayıklama ve doğrulama işlemleri çok daha kolay hale gelir.
- Yeni bir bootconfig parametresi eklemek için
/proc/bootconfig
dosyasının içeriğini kontrol ederek çalışmanızı doğrulayın. Cihaz açıldıktan sonra yeni eklenen parametreyi gördüğünüzü doğrulayın.BOARD_BOOTCONFIG
değişkenini ve önyükleyiciyi kullanarakandroidboot.*
parametrelerini çekirdek cmdline'den bootconfig'e taşıyın.- Parametrelerin her birinin
/proc/bootconfig
içinde bulunduğundan VE/proc/cmdline
içinde bulunmadığından emin olun. Bunu doğrulayabiliyorsanız uygulamanız başarılı olmuştur.
OTA'da sürüm yükseltme ve düşürmeyle ilgili dikkat edilmesi gereken noktalar
Android'in farklı sürümleri veya farklı çekirdek sürümleri arasında OTA yükseltme ve düşürme işlemlerini yönetirken özel dikkat gösterilmelidir.
Android 12, bootconfig desteğine sahip ilk sürümdür. Bundan önceki bir sürüme geçiyorsanız bootconfig yerine çekirdek cmdline parametreleri kullanılmalıdır.
12-5.4 ve sonraki çekirdek sürümleri bootconfig'i destekler. Bundan önceki bir sürüme(11-5.4 dahil) geçiş yaparsanız çekirdek cmdline parametreleri kullanılmalıdır.
Android 11 ve önceki sürümlerden Android 12 ve sonraki sürümlere yapılan yükseltmelerde çekirdek cmdline parametreleri kullanılmaya devam edilebilir. Aynı durum çekirdek sürümlerini yükseltmek için de geçerlidir.
Sorun giderme
Doğrula adımını gerçekleştirirken /proc/bootconfig
içinde beklenen parametreleri görmüyorsanız logcat
içindeki çekirdek günlüklerini kontrol edin. Çekirdek destekliyorsa bootconfig için her zaman bir günlük girişi bulunur.
Örnek günlük çıkışı
$ adb logcat | grep bootconfig
02-24 17:00:07.610 0 0 I Load bootconfig: 128 bytes 9 nodes
Döndürülen bir hata günlüğü görürseniz bootconfig yüklenirken bir sorun oluşmuştur. Farklı hata türlerini görmek için init/main.c dosyasını görüntüleyin.