Android 12'de bootconfig özelliği, Android 11 ve önceki sürümlerde kullanılan androidboot.*
çekirdek cmdline seçeneklerinin yerini alır. Bootconfig özelliği, yapılandırma ayrıntılarını derleme ve bootloader'dan Android 12'ye geçirmek için kullanılan bir mekanizmadır.
Bu özellik, Android kullanıcı alanı yapılandırma parametrelerini çekirdekteki parametrelerden ayırmak için bir yol sunar. Uzun androidboot.*
çekirdek parametrelerini bootconfig dosyasına taşımak, çekirdek cmdline'ında alan oluşturur ve bunu gelecekteki genişletmeler için kullanılabilir hale getirir.
Hem çekirdek hem de Android kullanıcı alanı, bootconfig
öğesini desteklemelidir.
- Bu desteğe sahip ilk sürüm: Android 12
- Şu desteğe sahip ilk çekirdek sürümü: 12-5.4.xx çekirdek
12-5.10.xx çekirdek sürümüyle kullanıma sunulan yeni cihazlar için bootconfig özelliğini uygulayın. Cihazları yeni sürüme geçiriyorsanız bu API'yi uygulamanız gerekmez.
Örnekler ve kaynak
Bu bölümdeki örnekleri ve kaynak kodunu görüntülerken bootconfig
kodunun biçiminin, Android 11 ve önceki sürümlerde kullanılan çekirdek cmdline'ının 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 çıkış sırası
\n
ile ayrılmalıdır.
Bootloader örneği
Bootloader örneği için Cuttlefish U başlatma referansı bootloader uygulamasına bakın. Referanstaki iki kaydetme aşağıda listelenmiştir. İlki, başlatma başlığı sürümü desteğini en yeni sürüme yükseltir. Bu örnekte, ilk taahhüt, sürüm desteğini bir sonraki v4'e günceller. İkincisi ise iki şey yapar: bootconfig işlemeyi ekler ve çalışma zamanında parametre eklemeyi gösterir:
Derleme örneği
Tedarikçi firma başlatma başlığı v4 ile vendor_boot.img
derlemesinde yapılan mkbootimg
değişikliklerini gösteren derleme örneği için mkbootimg changes for
bootconfig
bölümüne bakın.
Aşağıdakileri yapmak için Mürekkep balığı değişikliklerini görün:
- Tedarikçi firma başlatma başlığı sürümünü v4 kullanın (veya bu sürüme yükseltin).
- bootconfig'i çekirdek cmdline'ına ekleyin ve seçilen parametreleri bootconfig'e taşıyın.
Uygulama
İş ortakları, bootloader'larına destek eklemeli ve derleme zamanı androidboot.*
parametrelerini çekirdek cmdline'sından bootconfig dosyasına taşımalıdır. Bu değişikliği uygulamanın en iyi yolu, kademeli olarak yapmaktır. Artımlı bir süreci takip etme hakkında bilgi için Artımlı uygulama ve doğrulama bölümünü inceleyin.
/proc/cmdline dosyasında androidboot.*
parametrelerini arayan değişiklikleriniz varsa bunları /proc/bootconfig
dosyasına yönlendirin. ro.boot.*
özellikleri yeni bootconfig
değerleriyle ayarlandığından, bu özellikleri kullanan kodlarda değişiklik yapmanız gerekmez.
Derleme değişiklikleri
İlk olarak, başlatma başlığı sürümünüzü sürüm 4'e yükseltin:
- BOARD_BOOT_HEADER_VERSION := 3
+ BOARD_BOOT_HEADER_VERSION := 4
bootconfig
çekirdeği cmdline parametresini ekleyin. Bu, çekirdeğin bootconfig bölümünü aramasını sağlar:
BOARD_KERNEL_CMDLINE += bootconfig
bootconfig parametreleri, çekirdek cmdline'ının BOARD\_KERNEL\_CMDLINE
kaynağından oluşturulduğuna çok benzer şekilde, BOARD_BOOTCONFIG
değişkenindeki parametrelerden oluşturulur.
androidboot.*
parametreleri, aşağıdakine benzer şekilde olduğu gibi taşınabilir:
- BOARD_KERNEL_CMDLINE += androidboot..selinux=enforcing
+ BOARD_BOOTCONFIG += androidboot..selinux=enforcing
Bootloader değişiklikleri
Bootloader, çekirdeğe atlamadan önce initramfs
öğesini ayarlar. Çekirdek başlatma yapılandırması, bootconfig bölümünü arar ve beklenen fragmanın bulunduğu initramfs,
bölümünün en sonunda olmasını sağlar.
Bootloader, vendor_boot.img
düzen bilgilerini tedarikçi firma başlatma görüntüsü başlığından alır.
Şekil 1. Android 12 bootconfig bellek ayırma
Bootloader, bellekte bootconfig bölümünü oluşturur. bootconfig bölümü, aşağıdakiler için bellek ayırmaları içerir:
- Parametreler
- 4 B boyutu
parameters size
- 4 B boyutu
parameters checksum
- 12 B bootconfig sihirli dizesi (
#BOOTCONFIG\n
)
Parametreler iki kaynaktan gelir: Derleme zamanı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
görüntüsünün sonuna paketlenir. Bölümün boyutu tedarikçi başlatma başlığı alanında (vendor_bootconfig_size
) depolanır (bayt olarak).
Derleme sırasında bilinmeyen parametreler, yalnızca bootloader'daki çalışma zamanında bilinir. Bunlar, bootconfig fragmanı uygulanmadan önce bootconfig parametreleri bölümünün sonuna eklenmelidir.
bootconfig fragmanı uygulandıktan sonra parametre eklemeniz gerekirse fragmanın üzerine yazın ve yeniden uygulayın.
Artımlı uygulama ve doğrulama
Bu bölümde verilen işlemi izleyerek bootconfig özelliğini aşamalı olarak uygulayın. Bootconfig parametreleri eklenirken çekirdek cmdline parametrelerini olduğu gibi bırakın.
Aşağıda, doğrulamalı artımlı uygulama için adımlar verilmiştir:
- Bootloader'ı ve derleme ayarlarını 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 açılmaya devam edebilmesi için çekirdek cmdline parametrelerini olduğu şekilde tutun. Bu sayede hata ayıklama ve doğrulama çok daha kolay hale gelir.
- Yeni bir bootconfig parametresi eklemek için
/proc/bootconfig
içeriğini kontrol ederek çalışmanızı doğrulayın. Cihaz başlatıldıktan sonra yeni eklenen parametreyi gördüğünüzü doğrulayın.BOARD_BOOTCONFIG
değişkenini ve bootloader'ı kullanarakandroidboot.*
parametrelerini çekirdek cmdline'dan bootconfig'e taşıyın.- Parametrelerin her birinin
/proc/bootconfig
içinde olduğunu VE/proc/cmdline
içinde olmadığını doğrulayın. Bunu doğrulayabiliyorsanız uygulamanız başarılı demektir.
OTA'yı yeni sürüme ve eski sürüme geçirmeyle 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 özellikle dikkatli olmanız gerekir.
Android 12, bootconfig destekli ilk sürümdür. Eski 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 herhangi bir sürüme(11-5.4 dahil) geçiyorsanız çekirdek cmdline parametreleri kullanılmalıdır.
Android 11 ve önceki sürümlerden Android 12 ve sonraki sürümlere yükseltmeler çekirdek cmdline parametrelerini kullanmaya devam edebilir. Aynı durum çekirdek sürümlerini yükseltme için de geçerlidir.
Sorun giderme
Doğrulama adımını gerçekleştirirken /proc/bootconfig
ürününde beklenen parametreleri görmüyorsanız logcat
tablosundaki çekirdek günlüklerini kontrol edin. Çekirdek destekliyorsa bootconfig için her zaman bir günlük girişi vardır.
Örnek günlük çıkışı
$ adb logcat | grep bootconfig
02-24 17:00:07.610 0 0 I Load bootconfig: 128 bytes 9 nodes
Bir hata günlüğü döndürülmesi, bootconfig yüklenirken bir sorun olduğu anlamına gelir. Farklı hata türlerini görmek için init/main.c'yi görüntüleyin.