W Androidzie 12 funkcja rozruchu zastępuje
Opcje polecenia cmdline jądra systemu androidboot.*
używane w Androidzie 11
lub niższy. Funkcja bootconfig to mechanizm przekazywania szczegółów konfiguracji z kompilacji i bootloadera do Androida 12.
Ta funkcja umożliwia oddzielenie parametrów konfiguracji przestrzeni użytkownika Androida od parametrów jądra. Przenoszenie długiego jądra systemu androidboot.*
tworzy miejsce w wierszu cmdline jądra i sprawia,
można ją wykorzystać w przyszłości.
Zarówno jądro, jak i przestrzeń użytkownika Androida muszą obsługiwać bootconfig
.
- Pierwsza wersja obsługująca tę funkcję: Android 12
- Pierwsza wersja jądra obsługująca tę obsługę: jądro 12-5.4.xx
Wdróż funkcję rozruchu na nowych urządzeniach z wersjami 12–5.10.xx wersji jądra systemu operacyjnego. Jeśli aktualizujesz urządzenia, nie musisz tego robić.
Przykłady i źródło
Podczas przeglądania przykładów i kodu źródłowego w tej sekcji pamiętaj, że format kodu bootconfig
różni się tylko nieznacznie od formatu polecenia cmdline jądra używanego w Androidzie 11 i starszych.
Jednak z uwagi na sposób korzystania z urządzenia musisz zwrócić uwagę na tę różnicę:
- Parametry muszą być rozdzielone sekwencją znaku nowej linii
\n
, a nie spacją.
Przykład programu rozruchowego
Przykład bootloadera znajdziesz w implementacji bootloadera referencyjnego U-boot firmy Cuttlefish. Poniżej znajdziesz 2 zatwierdzenia w dokumentacji. Pierwsze wzrosty obsługę najnowszej wersji nagłówka rozruchowego. W tym przykładzie pierwszy element zatwierdzenia aktualizacji (lub przyspieszenia) obsługi kolejnych wersji (v4). Druga ma dwie rzeczy: dodaje obsługę konfiguracji rozruchowej i pokazuje dodawanie parametrów w czasie działania:
Przykładowa kompilacja
W przypadku przykładowej kompilacji, w której widać zmiany w elemencie mkbootimg
, aby utworzyć
vendor_boot.img
z nagłówkiem rozruchowym dostawcy w wersji 4: patrz mkbootimg changes for
bootconfig
.
Zapoznaj się ze zmianami w Cuttlefish, które umożliwiają:
- Użyj (lub zaktualizuj) wersji nagłówka dostawcy w bootowaniu v4.
- Dodaj bootconfig do cmdline jądra i przenieś wybrane parametry do pliku bootconfig.
Implementacja
Partnerzy muszą dodać obsługę do swoich bootloaderów i przenieść parametry androidboot.*
z wiersza poleceń jądra do pliku bootconfig. Najlepszym sposobem na wprowadzenie tej zmiany jest stopniowe wprowadzanie tych zmian. zobacz
Sekcja Implementacja i weryfikacja przyrostowa
.
Jeśli masz zmiany, które powodują wyszukiwanie androidboot.*
w pliku /proc/cmdline
, zamiast tego wskaż plik /proc/bootconfig
. Właściwości ro.boot.*
są ustawiane za pomocą nowych wartości bootconfig
, więc nie musisz wprowadzać zmian w kodzie, który ich używa.
Wprowadź zmiany
Najpierw zaktualizuj wersję nagłówka rozruchu do wersji 4:
- BOARD_BOOT_HEADER_VERSION := 3
+ BOARD_BOOT_HEADER_VERSION := 4
Dodaj parametr cmdline bootconfig
jądra. W ten sposób jądro będzie szukać sekcji bootconfig:
BOARD_KERNEL_CMDLINE += bootconfig
Parametry w konfiguracji rozruchowej są tworzone na podstawie parametrów w pliku
Zmienna BOARD_BOOTCONFIG
, podobnie jak cmdline jądra tworzonego
BOARD\_KERNEL\_CMDLINE
Wszystkie parametry androidboot.*
można przenieść w postaci domyślnej, np. w takiej postaci:
- BOARD_KERNEL_CMDLINE += androidboot..selinux=enforcing
+ BOARD_BOOTCONFIG += androidboot..selinux=enforcing
Zmiany programu rozruchowego
Program rozruchowy konfiguruje initramfs
przed przejściem do jądra. Jądro
konfiguracja uruchamiania
wyszukuje sekcję rozruchu i wyszukuje ją na samym końcu
initramfs,
z oczekiwanym zwiastunem.
Bootloader pobiera informacje o układzie vendor_boot.img
z nagłówka obrazu rozruchu.
Rysunek 1. Przydział pamięci bootconfigu w Androidzie 12
Bootloader tworzy w pamięci sekcję bootconfig. Sekcja bootconfig zawiera alokacje pamięci dla:
- Parametry
- Rozmiar 4 B
parameters size
- Rozmiar 4 B
parameters checksum
- Magiczny ciąg znaków konfiguracji rozruchu 12 B (
#BOOTCONFIG\n
)
Parametry pochodzą z 2 źródeł: parametrów znanych w momencie kompilacji oraz Parametry, które są nieznane w momencie kompilacji. Należy dodać nieznane parametry.
Parametry znane w czasie kompilacji są spakowane na końcu vendor_boot
w sekcji
konfiguracji rozruchowej. Zapisywany rozmiar sekcji (w bajtach)
w polu nagłówka rozruchu dostawcy vendor_bootconfig_size
.
Parametry, które nie są znane w czasie kompilacji, są znane tylko w czasie działania programu rozruchowego. Należy je dodać na końcu sekcji parametrów rozruchu przed zastosowaniem zwiastuna rozruchowego.
Jeśli po zastosowaniu zwiastuna rozruchowego musisz dodać jakieś parametry, zastąp zwiastun i zastosuj go ponownie.
Implementacja i weryfikacja przyrostowa
Stopniowo wdrażaj funkcję rozruchu, postępując zgodnie z instrukcjami podanymi w w tej sekcji. Podczas dodawania parametrów bootconfig nie zmieniaj parametrów cmdline jądra.
Oto kroki, które należy wykonać, aby wdrożyć metodę stopniowego wdrażania z weryfikacją:
- Wprowadź zmiany w programie rozruchowym i kompilacji, a potem wykonaj te czynności:
- Dodawanie nowej konfiguracji rozruchowej przy użyciu zmiennej
BOARD_BOOTCONFIG
. - Nie zmieniaj parametrów cmdline jądra, aby urządzenie mogło prawidłowo się uruchamiać. Dzięki temu debugowanie i weryfikacja są znacznie łatwiejsze.
- Dodawanie nowej konfiguracji rozruchowej przy użyciu zmiennej
- Zweryfikuj swoją pracę, sprawdzając zawartość dokumentu
/proc/bootconfig
. Zweryfikuj zobaczysz nowo dodany parametr po uruchomieniu urządzenia. - Przenieś parametry
androidboot.*
z cmdline jądra do bootconfig, używając zmiennejBOARD_BOOTCONFIG
i bootloadera. - Sprawdź, czy każdy z parametrów znajduje się w pliku
/proc/bootconfig
, i czy nie ma go w pliku/proc/cmdline
. Jeśli możesz to potwierdzić, oznacza to, że implementacja została ukończona.
Uwagi na temat uaktualniania OTA i przechodzenia na niższą wersję
Podczas zarządzania aktualizacjami OTA i obniżkami między różnymi wersjami Androida lub różnymi wersjami jądra należy zachować szczególną ostrożność.
Android 12 to pierwsza wersja z rozruchem konfiguracyjnym . Jeśli chcesz wrócić do wersji wcześniejszej, zamiast bootconfig należy użyć parametrów cmdline jądra.
Wersje jądra 12-5.4 i nowsze obsługują bootconfig. Jeśli chcesz wrócić do wersji wcześniejszej (w tym 11-5.4), musisz użyć parametrów cmdline jądra.
Urządzenia ulepszane z Androida 11 lub starszego na Androida 12 lub nowszego mogą nadal używać parametrów cmdline jądra. To samo dotyczy uaktualniania wersji jądra.
Rozwiązywanie problemów
Jeśli po wykonaniu kroku weryfikacji nie widzisz oczekiwanych parametrów
w /proc/bootconfig
sprawdź logi jądra w logcat
. Zawsze znajdziesz dziennik
wpis dla konfiguracji rozruchowej, jeśli ją obsługuje.
Przykładowy wynik działania
$ adb logcat | grep bootconfig
02-24 17:00:07.610 0 0 I Load bootconfig: 128 bytes 9 nodes
Jeśli wyświetli się dziennik błędów, oznacza to, że podczas wczytywania konfiguracji rozruchowej. Aby wyświetlić różne typy błędów, otwórz plik init/main.c.