In Android 12 ersetzt die Bootconfig-Funktion die
androidboot.*
-Kernel-Cmdline-Optionen, die mit Android 11 verwendet werden
und niedriger. Das Feature „bootconfig“ ist ein Mechanismus zur Übergabe der Konfiguration.
vom Build und Bootloader bis hin zu Android 12.
Mit dieser Funktion lassen sich die Konfigurationsparameter für Android trennen.
User-Space von denen für den Kernel. Langen androidboot.*
-Kernel verschieben
für die Datei bootconfig schafft Platz auf der Kernel-Cmdline und sorgt dafür,
für eine spätere Erweiterung verfügbar.
Sowohl der Kernel als auch der Android-Nutzerbereich müssen bootconfig
unterstützen.
- Erste Version mit dieser Unterstützung: Android 12
- Erste Kernel-Version mit dieser Unterstützung: 12-5.4.xx Kernel
Implementieren Sie die Bootconfig-Funktion für neue Geräte, die mit einer 12-5.10.xx-Version auf den Markt kommen. Kernel-Version. Sie müssen diese nicht implementieren, wenn Sie Geräte aktualisieren.
Beispiele und Quelle
Wenn Sie sich die Beispiele und den Quellcode in diesem Abschnitt ansehen, beachten Sie, dass das Format
des bootconfig
-Codes unterscheidet sich nur geringfügig vom Format des
die unter Android 11 und niedriger verwendete Kernel-cmdline.
Der folgende Unterschied ist jedoch wichtig für Ihre Verwendung:
- Parameter müssen durch die Escapesequenz
\n
für Zeilenumbrüche getrennt werden, nicht durch Leerzeichen.
Bootloader-Beispiel
Ein Beispiel für einen Bootloader findest du im Referenz-Bootloader von Cuttlefish U-Boot Implementierung. Zwei Commits in der Referenz sind unten aufgeführt. Die ersten Steigerungen Unterstützung der Boot-Header-Version auf die neueste Version. In diesem Beispiel Führen Sie ein Commit von Updates (oder Uprevs) der Versionsunterstützung auf die nächste Version, v4, durch. Die zweite macht zwei Dinge: fügt eine bootconfig-Verarbeitung hinzu und zeigt das Hinzufügen von Parametern zur Laufzeit:
- Unterstützung der Boot-Header-Version auf die neueste Version 4 aktualisieren .
- Bootconfig hinzufügen Umgang mit Daten.
Build-Beispiel
Für ein Build-Beispiel, das mkbootimg
-Änderungen zum Erstellen des
vendor_boot.img
mit Vendor Boot Header Version 4 (siehe mkbootimg changes for
bootconfig
).
In den Änderungen an Sepien sehen Sie Folgendes:
- Die Boot-Header-Version des Anbieters verwenden (oder hoch) Version 4.
- Fügen Sie der Kernel-Cmdline bootconfig hinzu und verschieben Sie ausgewählte Parameter nach bootconfig.
Implementierung
Partner müssen Support für ihre Bootloader hinzufügen und ihre Build-Zeit verschieben
androidboot.*
-Parameter von der Kernel-Cmdline zur Bootconfig
-Datei. Am besten implementieren Sie diese Änderung inkrementell. sieh dir die
Abschnitt Inkrementelle Implementierung und Validierung
finden Sie Informationen zum Durchführen eines inkrementellen Prozesses.
Wenn Sie Änderungen haben, durch die in der /proc/cmdline-Datei nach androidboot.*
gesucht wird
verweisen Sie stattdessen auf die Datei /proc/bootconfig
. Das ro.boot.*
werden mit den neuen bootconfig
-Werten festgelegt, sodass Sie keine
für Code mit diesen Eigenschaften.
Build-Änderungen
Erhöhen Sie zuerst die Boot-Header-Version auf Version 4:
- BOARD_BOOT_HEADER_VERSION := 3
+ BOARD_BOOT_HEADER_VERSION := 4
Fügen Sie den Kernel-cmdline-Parameter bootconfig
hinzu. Dadurch sucht der Kernel nach
den Abschnitt bootconfig an:
BOARD_KERNEL_CMDLINE += bootconfig
Die bootconfig-Parameter werden aus den Parametern im
BOARD_BOOTCONFIG
, ähnlich wie die Kernel-Cmdline, die aus
BOARD\_KERNEL\_CMDLINE
.
Alle androidboot.*
-Parameter können unverändert verschoben werden. Das sieht dann so aus:
- BOARD_KERNEL_CMDLINE += androidboot..selinux=enforcing
+ BOARD_BOOTCONFIG += androidboot..selinux=enforcing
Bootloader-Änderungen
Der Bootloader richtet initramfs
ein, bevor er zum Kernel wechselt. Der Kernel
Bootkonfiguration
sucht nach dem Abschnitt "bootconfig"
und sucht danach, dass er sich ganz am Ende
initramfs,
mit dem erwarteten Trailer.
Der Bootloader ruft die Layoutinformationen für vendor_boot.img
vom Anbieter ab.
Boot-Image-Header.
Abbildung 1: Arbeitsspeicherzuweisung für Android 12-Bootconfig
Der Bootloader erstellt den Bootconfig-Abschnitt im Arbeitsspeicher. Abschnitt „bootconfig“ enthält Arbeitsspeicherzuweisungen für Folgendes:
- Parameter
- 4 B Größe
parameters size
- 4 B Größe
parameters checksum
- 12 Mrd. magischer Bootconfig-String (
#BOOTCONFIG\n
)
Die Parameter stammen aus zwei Quellen: Parameter, die zum Zeitpunkt der Erstellung bekannt sind, und Parameter, die zum Zeitpunkt der Erstellung nicht bekannt sind. Unbekannte Parameter müssen hinzugefügt werden.
Parameter, die zum Zeitpunkt der Erstellung bekannt waren, werden am Ende von vendor_boot
gepackt
im Abschnitt "bootconfig". Die Größe des Abschnitts wird (als Byte) gespeichert.
im Header-Feld vendor_bootconfig_size
des Anbieters.
Die Parameter, die zum Zeitpunkt der Erstellung nicht bekannt sind, sind nur während der Laufzeit in der Bootloader. Diese müssen am Ende des Abschnitts für die Bootconfig-Parameter hinzugefügt werden bevor der bootconfig-Trailer angewendet wird.
Wenn Sie nach dem Anwenden des bootconfig-Trailers Parameter hinzufügen müssen, Trailer zu überschreiben und ihn noch einmal anzuwenden.
Inkrementelle Implementierung und Validierung
Implementieren Sie die bootconfig-Funktion inkrementell, indem Sie dem unter diesem Abschnitt. Lassen Sie die Kernel-Cmdline-Parameter unverändert, während bootconfig-Parameter hinzugefügt.
Dies sind die Schritte für eine inkrementelle Implementierung mit Validierung:
- Nehmen Sie den Bootloader vor, erstellen Sie Änderungen und gehen Sie dann so vor:
<ph type="x-smartling-placeholder">
- </ph>
- Verwenden Sie die Variable
BOARD_BOOTCONFIG
, um eine neue Bootkonfiguration hinzuzufügen. . - Behalten Sie die Kernel-cmdline-Parameter unverändert bei, damit das Gerät weiterhin ordnungsgemäß starten kann. Dadurch wird die Fehlerbehebung und Validierung einfacher zu machen.
- Verwenden Sie die Variable
- Bestätigen Sie Ihre Arbeit, indem Sie den Inhalt von
/proc/bootconfig
überprüfen. Bestätigen dass der neu hinzugefügte Parameter nach dem Starten des Geräts angezeigt wird. - Verschieben Sie die
androidboot.*
-Parameter von der Kernel-Cmdline in bootconfig mit der VariablenBOARD_BOOTCONFIG
und dem Bootloader. - Überprüfen Sie, ob alle Parameter in
/proc/bootconfig
vorhanden sind UND dass Sie sind nicht in/proc/cmdline
. Wenn Sie dies überprüfen können, war erfolgreich.
Überlegungen zum Upgrade und Downgrade von OTA
Wenn Sie OTA-Upgrades und -Downgrades zwischen verschiedenen Android oder anderen Kernel-Versionen sollten Sie besonders vorsichtig sein.
Android 12 ist die erste Version mit bootconfig Support. Bei einem Downgrade auf eine frühere Version: muss anstelle von bootconfig verwendet werden.
Kernel-Versionen 12 bis 5.4 und höher unterstützen bootconfig. Bei Downgrade auf eine beliebige frühere Version(einschließlich 11 bis 5.4) aktualisiert, müssen die Kernel-cmdline-Parameter verwendet.
Bei Upgrades von Android 11 und niedriger auf Android 12 und höher können Kernel-cmdline-Parameter. Dasselbe gilt für das Upgrade der Kernel-Versionen.
Fehlerbehebung
Wenn Sie den Schritt verify ausführen und die erwarteten Parameter nicht sehen,
Prüfen Sie in /proc/bootconfig
die Kernellogs in logcat
. Es gibt immer ein Protokoll
für bootconfig vorhanden, wenn der Kernel dies unterstützt.
Beispiel für eine Logausgabe
$ adb logcat | grep bootconfig
02-24 17:00:07.610 0 0 I Load bootconfig: 128 bytes 9 nodes
Wenn ein Fehlerprotokoll zurückgegeben wird, ist beim Laden der bootconfig aus. Die verschiedenen Fehlertypen finden Sie unter init/main.c