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 önyükleyiciden Android 12'ye aktarmak için kullanılan bir mekanizmadır.
Bu özellik, Android kullanıcı alanıyla ilgili yapılandırma parametrelerini çekirdekle ilgili olanlardan ayırmanın bir yolunu sunar. Uzun androidboot.*
çekirdek
parametrelerini bootconfig dosyasına taşımak, çekirdek cmdline'da yer açar ve gelecekteki genişletmeler için kullanılabilir hale getirir.
Hem çekirdek hem de Android kullanıcı alanı bootconfig
'yı desteklemelidir.
- Bu desteğin sunulduğu ilk sürüm: Android 12
- Bu desteğin eklendiği ilk çekirdek sürümü: 12-5.4.xx çekirdek
12-5.10.xx çekirdek sürümüyle piyasaya sürülen yeni cihazlar için bootconfig özelliğini uygulayın. Cihazları yükseltiyorsanız bu özelliği uygulamanız gerekmez.
Örnekler ve kaynak
Bu bölümdeki örnekleri ve kaynak kodunu incelerken bootconfig
kodunun biçiminin, Android 11 ve önceki sürümlerde kullanılan çekirdek komut satırı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şluklarla değil, yeni satır kaçış sırasıyla
\n
ayrılmalıdır.
Bootloader örneği
Önyükleyici örneği için Cuttlefish U-boot referans önyükleyici uygulamasına bakın. Referanstaki iki taahhüt aşağıda listelenmiştir. İlk yükseltme, önyükleme başlığı sürüm desteğini en yeni sürüme yükseltir. Örnekte, ilk commit, sürüm desteğini bir sonraki sürüme (v4) günceller. İkincisi iki işlem yapar: bootconfig işleme özelliğini ekler ve çalışma zamanında parametre eklemeyi gösterir:
Örnek oluşturma
Tedarikçi önyükleme başlığı v4 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ğıdaki işlemleri yapmak için Cuttlefish değişikliklerine bakın:
- vendor boot header version v4'ü kullanın (veya bu sürüme yükseltin).
- bootconfig'i çekirdek cmdline'ına ekleyin ve seçili parametreleri bootconfig'e taşıyın.
Uygulama
İş ortakları, önyükleyicilerine destek eklemeli ve derleme zamanı androidboot.*
parametrelerini çekirdek komut satırından bootconfig dosyasına taşımalıdır. Bu değişikliği uygulamanın en iyi yolu artımlı olarak yapmaktır. Artımlı bir süreci izleme hakkında bilgi edinmek için Artımlı uygulama ve doğrulama bölümüne bakın.
/proc/cmdline dosyasında androidboot.*
parametrelerini arayan değişiklikleriniz varsa bunları bunun yerine /proc/bootconfig
dosyasına yönlendirin. ro.boot.*
özellikleri yeni bootconfig
değerleriyle ayarlanır. Bu nedenle, 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 işlem, ç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. Bu işlem, çekirdek komut satırının BOARD\_KERNEL\_CMDLINE
değişkeninden oluşturulmasına benzer.
Tüm 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
Önyükleyici, çekirdeğe geçmeden önce initramfs
öğesini ayarlar. kernel
boot configuration
bootconfig bölümünü arar ve beklenen fragmanla birlikte initramfs,
'ın en sonunda olmasını bekler.
Önyükleyici, vendor_boot.img
düzen bilgilerini satıcı önyükleme görüntüsü üstbilgisinden alır.
1. şekil. Android 12 bootconfig bellek tahsisi
Önyükleyici, 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 magic string (
#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, satıcı önyükleme üstbilgi alanında vendor_bootconfig_size
(bayt olarak) saklanır.
Derleme zamanında bilinmeyen parametreler yalnızca önyükleyicide çalışma zamanında bilinir. Bunlar, bootconfig fragmanı uygulanmadan önce bootconfig parametreleri bölümünün sonuna eklenmelidir.
bootconfig fragmanı uygulandıktan sonra herhangi bir parametre eklemeniz gerekirse fragmanın üzerine yazın ve yeniden uygulayın.
Artımlı uygulama ve doğrulama
Bu bölümde verilen süreci izleyerek bootconfig özelliğini aşamalı olarak uygulayın. bootconfig parametreleri eklenirken çekirdek cmdline parametrelerine dokunmayın.
Doğrulama ile birlikte artımlı uygulama adımları şunlardır:
- Önyükleyiciyi oluşturun ve derleme değişikliklerini yapın. Ardından aşağıdakileri uygulayın:
- Yeni bir bootconfig
parametresi eklemek için
BOARD_BOOTCONFIG
değişkenini kullanın. - Cihazın doğru şekilde önyüklenmeye devam edebilmesi için çekirdek cmdline parametrelerini olduğu gibi bırakın. 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 parametrenin göründüğünü doğrulayın.BOARD_BOOTCONFIG
değişkenini ve önyükleyiciyi kullanarakandroidboot.*
parametrelerini çekirdek cmdline'dan bootconfig'e taşıyın.- Parametrelerin her birinin
/proc/bootconfig
içinde bulunduğunu ve/proc/cmdline
içinde olmadığını doğrulayın. Bunu doğrulayabiliyorsanız uygulamanız başarılı olmuştur.
OTA ile yükseltme ve düşürme işlemleriyle 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ği sunan ilk sürümdür. Bu sürümden önceki bir sürüme düşürülüyorsa bootconfig yerine çekirdek cmdline parametreleri kullanılmalıdır.
12-5.4 ve sonraki çekirdek sürümlerinde bootconfig desteklenir. Bu sürümden önceki bir sürüme(11-5.4 dahil) düşürülüyorsa çekirdek cmdline parametreleri kullanılmalıdır.
Android 11 ve önceki sürümlerden Android 12 ve sonraki sürümlere yükseltme yapanlar, çekirdek cmdline parametrelerini kullanmaya devam edebilir. Çekirdek sürümlerini yükseltme için de aynı durum geçerlidir.
Sorun giderme
Doğrulama adımını uyguladığınızda /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
Hata günlüğü döndürülürse bootconfig yüklenirken bir sorun oluşmuştur. Farklı hata türlerini görmek için init/main.c dosyasını inceleyin.