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ı yapıdan ve önyükleyiciden Android 12'ye aktarmaya yönelik bir mekanizmadır.
Bu özellik, Android kullanıcı alanına ilişkin yapılandırma parametrelerini çekirdeğe ait olanlardan ayırmanın bir yolunu sağlar. Uzun androidboot.*
çekirdek parametrelerini bootconfig dosyasına taşımak, çekirdek cmdline'ında alan yaratır ve gelecekte kolayca genişletilebilmesini sağlar.
Hem çekirdek hem de Android kullanıcı alanı bootconfig
desteklemelidir.
- Bu desteğe sahip ilk sürüm: Android 12
- Bu desteğe sahip ilk çekirdek sürümü: 12-5.4.xx çekirdeği
12-5.10.xx çekirdek sürümüyle başlatılan yeni cihazlar için bootconfig özelliğini uygulayın. Cihazları yükseltiyorsanız bunu uygulamanıza gerek yoktur.
Örnekler ve kaynak
Bu bölümdeki örnekleri ve kaynak kodunu görüntülerken, bootconfig
kodunun biçiminin, Android 11 ve daha düşük 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şluklarla değil
\n
yeni satır kaçış dizisiyle ayrılmalıdır.
Önyükleyici Örneği
Bir önyükleyici örneği için Mürekkepbalığı U-önyükleme referans önyükleyici uygulamasına bakın. Referanstaki iki taahhüt aşağıda listelenmiştir. İlki, ö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üm olan v4'e günceller (veya yükseltir). İkincisi iki şey yapar; bootconfig yönetimini ekler ve çalışma zamanında parametre eklemeyi gösterir:
Yapı Örneği
Satıcı önyükleme başlığı v4 ile vendor_boot.img
dosyasını oluşturmaya yönelik mkbootimg
değişikliklerini gösteren bir yapı örneği için bkz mkbootimg changes for bootconfig
. Aşağıdakileri yapmak için Mürekkepbalığı değişikliklerine bakın:
- Satıcı önyükleme başlığı sürüm v4'ü kullanın (veya bu sürüme yükseltme yapın).
-
bootconfig to the kernel cmdline and move selected parameters to bootconfig
.
Uygulama
İş ortakları, önyükleyicilerine destek eklemeli ve derleme zamanı androidboot.*
parametrelerini çekirdek cmdline'ından bootconfig dosyasına taşımalıdır. Bu değişikliği uygulamanın en iyi yolu bunu aşamalı olarak yapmaktır; Artımlı bir süreci takip etme hakkında bilgi için Artımlı uygulama ve doğrulama bölümüne bakın.
androidboot.*
parametrelerini /proc/cmdline dosyasında arayan değişiklikleriniz varsa, bunları bunun yerine /proc/bootconfig dosyasına yönlendirin. ro.boot.*
özellikleri yeni bootconfig
değerleriyle ayarlandığından, bu özellikleri kullanarak kodda değişiklik yapmanıza gerek yoktur.
Değişiklikleri Oluştur
İlk olarak, önyükleme 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, BOARD_BOOTCONFIG
değişkenindeki parametrelerden oluşturulur, tıpkı çekirdek cmdline'ının BOARD\_KERNEL\_CMDLINE
oluşturulduğu gibi.
Herhangi bir androidboot.*
parametresi aşağıdakine benzer şekilde olduğu gibi taşınabilir:
- BOARD_KERNEL_CMDLINE += androidboot..selinux=enforcing
+ BOARD_BOOTCONFIG += androidboot..selinux=enforcing
Önyükleyici Değişiklikleri
Önyükleyici, çekirdeğe atlamadan önce initramfs
ayarlar. Çekirdek önyükleme yapılandırması , bootconfig bölümünü arar ve beklenen fragmanla birlikte initramfs,
en sonunda olmasını arar.
Önyükleyici, satıcı önyükleme görüntüsü başlığından vendor_boot.img
düzen bilgilerini alır.
Şekil 1. Android 12 önyükleme yapılandırması bellek tahsisi
Bootloader bellekte bootconfig bölümünü oluşturur. Bootconfig bölümü aşağıdakiler için bellek ayırmalarını 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 sırasında bilinen parametreler ve derleme sırasında bilinmeyen parametreler. Bilinmeyen parametreler eklenmelidir.
Derleme sırasında bilinen parametreler, bootconfig bölümündeki vendor_boot
görüntüsünün sonuna paketlenir. Bölümün boyutu satıcı önyükleme başlığı alanında vendor_bootconfig_size
saklanır (bayt olarak).
Derleme zamanında bilinmeyen parametreler yalnızca çalışma zamanında önyükleyicide bilinir. Bootconfig fragmanı uygulanmadan önce bunların bootconfig parametreleri bölümünün sonuna eklenmesi gerekir.
Bootconfig fragmanı uygulandıktan sonra herhangi bir parametre eklemeniz gerekirse fragmanın üzerine yazın ve onu yeniden uygulayın.
Artımlı uygulama ve doğrulama
Bu bölümde verilen işlemi takip ederek bootconfig özelliğini aşamalı olarak uygulayın. Bootconfig parametreleri eklenirken çekirdek cmdline parametrelerine dokunmadan bırakın.
Doğrulama ile artımlı uygulamaya yönelik adımlar şunlardır:
- Önyükleyiciyi yapın ve değişiklikler yapın, ardından aşağıdakileri yapın:
- Yeni bir bootconfig parametresi eklemek için
BOARD_BOOTCONFIG
değişkenini kullanın. - Aygıtın doğru şekilde önyüklemeye devam edebilmesi için çekirdek cmdline parametrelerini oldukları gibi tutun. Bu, hata ayıklamayı ve doğrulamayı çok daha kolay hale getirir.
- 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 önyükleyiciyi kullanarakandroidboot.*
parametrelerini çekirdek cmdline'ından bootconfig'e taşıyın . - Parametrelerin her birinin
/proc/bootconfig
dosyasında bulunduğunu VE/proc/cmdline
dosyasında bulunmadığını doğrulayın . Bunu doğrulayabiliyorsanız uygulamanız başarılı olmuştur.
OTA yükseltme ve düşürme hususları
Android'in farklı sürümleri veya farklı çekirdek sürümleri arasında OTA yükseltmelerini ve sürüm düşürmelerini yönetirken özel dikkat gösterilmelidir.
Android 12, bootconfig desteğine sahip ilk sürümdür. Bundan önceki herhangi bir sürüme geçiş yapılıyorsa, bootconfig yerine çekirdek cmdline parametrelerinin kullanılması gerekir.
Çekirdek sürümleri 12-5.4 ve sonraki sürümler bootconfig'i destekler. Bundan önceki herhangi bir sürüme (11-5.4 dahil) geçiş yapılıyorsa, çekirdek cmdline parametrelerinin kullanılması gerekir.
Android 11 ve daha eski sürümlerden Android 12 ve daha yeni sürümlere yükseltmeler, çekirdek cmdline parametrelerini kullanmaya devam edebilir. Aynı şey çekirdek sürümlerini yükseltmek için de geçerlidir.
Sorun giderme
Doğrulama adımını gerçekleştirdiğinizde /proc/bootconfig
dosyasında beklenen parametreleri görmüyorsanız logcat
dosyasındaki çekirdek günlüklerini kontrol edin. Çekirdek destekliyorsa, bootconfig için her zaman bir günlük girişi bulunur.
Örnek günlük çıktısı
$ adb logcat | grep bootconfig
02-24 17:00:07.610 0 0 I Load bootconfig: 128 bytes 9 nodes
Bir hata günlüğünün döndüğünü görürseniz, bootconfig yüklenirken bir sorun var demektir. Farklı hata türlerini görmek için init/main.c dosyasını görüntüleyin.