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 için yapılandırma parametrelerini ayırmak üzere bir yol sağlar
için de aynı değeri sunar. 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
öğesini 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 bu işlemi uygulamanız gerekmez.
Örnekler ve kaynak
Bu bölümdeki örnekleri ve kaynak kodunu görüntülerken biçimin
bootconfig
kodunun biçiminden yalnızca biraz farklı
kernel cmdline komutu
Ancak kullanımınız açısından aşağıdaki fark önemlidir:
- Parametreler ile değil, yeni satır çıkış sırası
\n
ile ayrılmalıdır alanlar'a dokunun.
Bootloader örneği
Önyükleme programı örneği için Cuttlefish U-boot referans önyükleme programı uygulamasına bakın. Referanstaki iki kaydetme 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 iki şey yapar: bootconfig işlemeyi ekler ve parametrelerin çalışma zamanında:
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 Mürekkep balığı değişikliklerini görün:
- Tedarikçi firma ö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 sırasındaki 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.*
için arama yapan değişiklikleriniz varsa
bu parametreleri /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
İ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
çekirdekli 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
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 bunun en sonunda
Beklenen fragmanla initramfs,
.
Önyükleme yükleyici, vendor_boot.img
düzen bilgilerini tedarikçi firma önyükleme resmi üstbilgisinin
Şekil 1. Android 12 bootconfig bellek ayırma
Bootloader, bellekte bootconfig bölümünü oluşturur. Bootconfig bölümü şunları içeren 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 bilinmeyen parametreler olabilir. Bilinmeyen parametreler eklenmelidir.
Derleme zamanında bilinen parametreler, vendor_boot
öğesinin sonuna paketlenir
görüntüsüne bakalım. Bölümün boyutu depolanır (bayt olarak)
vendor_bootconfig_size
tedarikçi firma başlatma başlığı alanına girin.
Derleme sırasında bilinmeyen parametreler yalnızca bootloader'ı tıklayın. Bunlar, bootconfig parametreleri bölümünün sonuna eklenmelidir. başlamadan önce izlemelisiniz.
bootconfig fragmanı uygulandıktan sonra herhangi bir parametre eklemeniz gerekirse fragmanın üzerine yazıp tekrar uygulayabilirsiniz.
Artımlı uygulama ve doğrulama
Bu bölümde verilen süreci uygulayarak bootconfig özelliğini aşamalı olarak uygulayın. bootconfig parametreleri eklendi.
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 eklemek için
BOARD_BOOTCONFIG
değişkenini kullanın parametresinden sonra bir değer girin. - Cihazın doğru şekilde önyükleme yapmaya devam edebilmesi için çekirdek cmdline parametrelerini olduğu gibi bırakın. Bu, hata ayıklama ve doğrulama sürecini kolaylaştırmaktadır.
- Yeni bir bootconfig eklemek için
/proc/bootconfig
dosyasının içeriğini kontrol ederek çalışmanızı doğrulayın. Doğrula gösterildikten sonra yeni eklenen parametreyi görürsünüz.-
androidboot.*
parametrelerini çekirdek cmdline'ındanBOARD_BOOTCONFIG
değişkenini ve bootloader'ı kullanarak bootconfig'i açı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'yı yeni sürüme ve eski sürüme geçirmeyle ilgili dikkat edilmesi gereken noktalar
ya da farklı çekirdek sürümlerini kullanıyorsanız özel bir dikkat gösterilmelidir.
Android 12, bootconfig'e sahip ilk sürümdür destek. 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ş yapılırsa ç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 parametreleridir. Aynı durum çekirdek sürümlerini yükseltme için de geçerlidir.
Sorun giderme
Beklenen parametreleri görmüyorsanız doğrulama adımını gerçekleştirirken
/proc/bootconfig
dizininde, logcat
adresindeki çekirdek günlüklerini kontrol edin. Her zaman bir günlük vardır
Çekirdek destekliyorsa bootconfig için giriş var.
Ö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 olduğu için emin olun.