W Androidzie 12 funkcja rozruchu zastępuje
Opcje polecenia cmdline jądra systemu androidboot.*
używane w Androidzie 11
lub niższy. Funkcja rozruchu konfiguracji to mechanizm przekazywania konfiguracji
z kompilacji i programu rozruchowego aż po Androida 12.
Ta funkcja umożliwia rozdzielenie parametrów konfiguracji w przypadku Androida.
i przestrzeń użytkownika dla jądra systemu operacyjnego. Przenoszenie długiego jądra systemu androidboot.*
tworzy miejsce w wierszu cmdline jądra i sprawia,
można ją wykorzystać w przyszłości.
Jądro 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. Nie musisz jej wdrażać, jeśli uaktualniasz urządzenia.
Przykłady i źródło
Analizując przykłady i kod źródłowy w tej sekcji, zwróć uwagę na format
kodu bootconfig
różni się tylko nieznacznie od formatu
Instrukcja cmdline jądra używana w Androidzie 11 i starszych wersjach.
Jednak z uwagi na sposób korzystania z urządzenia musisz zwrócić uwagę na tę różnicę:
- Parametry muszą być rozdzielone znakami nowego wiersza
\n
, a nie znakami spacje.
Przykład programu rozruchowego
Przykładowy program rozruchowy Cuttlefish znajdziesz w referencyjnym programie rozruchowym Cuttlefish U-boot. implementacji. 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:
- Zwiększ obsługę wersji nagłówka rozruchowego do najnowszej wersji 4 wersji.
- Dodawanie konfiguracji rozruchowej obsługi klienta.
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
.
Zobacz zmiany w mątwie:
- Używaj (lub zwiększ) wersji nagłówka rozruchowego dostawcy wersja 4.
- Dodaj polecenie bootconfig do wiersza poleceń jądra i przenieś wybrane parametry do konfiguracji rozruchu.
Implementacja
Partnerzy muszą dodać obsługę do swoich programów rozruchowych i skrócić czas kompilacji
Parametry androidboot.*
z wiersza poleceń jądra do konfiguracji rozruchowej
. 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
wskaż plik /proc/bootconfig
. ro.boot.*
właściwości są ustawione z nowymi wartościami bootconfig
, nie musisz więc
zmian w kodzie za pomocą tych właściwości.
Wprowadź zmiany
Najpierw zwiększ wersję nagłówka rozruchowego do wersji 4:
- BOARD_BOOT_HEADER_VERSION := 3
+ BOARD_BOOT_HEADER_VERSION := 4
Dodaj parametr cmdline jądra bootconfig
. Sprawia, że jądro szuka
w sekcji dotyczącej rozruchu:
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 niezmienionej postaci, podobnie jak tutaj:
- 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.
Program rozruchowy pobiera od dostawcy informacje o układzie vendor_boot.img
nagłówek obrazu rozruchowego.
Rysunek 1. Alokacja pamięci w konfiguracji rozruchowej Androida 12
Program rozruchowy tworzy sekcję rozruchu w pamięci. Sekcja konfiguracji rozruchu zawiera alokacje pamięci dla tych elementów:
- Parametry
- 4 B Rozmiar
parameters size
- 4 B Rozmiar
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. Trzeba 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. Pozostaw parametry wiersza poleceń jądra bez zmian, podczas gdy zostaną dodane parametry programu rozruchowego.
Oto kroki implementacji przyrostowej z weryfikacją:
- Wprowadź zmiany w programie rozruchowym i kompilacji, a potem wykonaj te czynności:
- Dodaj nową konfigurację rozruchową przy użyciu zmiennej
BOARD_BOOTCONFIG
. - Zachowaj parametry cmdline jądra bez zmian, aby urządzenie mogą nadal poprawnie się uruchamiać. Debugowanie i weryfikacja
- Dodaj nową konfigurację rozruchową 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 wiersza poleceń jądra do przy użyciu zmiennejBOARD_BOOTCONFIG
i programu rozruchowego. - Sprawdź, czy każdy z parametrów występuje w parametrze
/proc/bootconfig
ORAZ czy nie są w/proc/cmdline
. Jeśli możesz to sprawdzić, implementacja udało się.
Uwagi na temat uaktualniania OTA i przechodzenia na niższą wersję
Gdy zarządzasz uaktualnieniami OTA różnych wersji Zachowaj szczególną ostrożność, gdy korzystasz z Androida i innych wersji jądra.
Android 12 to pierwsza wersja z rozruchem konfiguracyjnym . W przypadku zmiany wersji na dowolną wcześniejszą wersję parametry wiersza poleceń jądra zamiast pliku rozruchowego.
Jądro w wersjach 12–5.4 i nowszych obsługuje konfigurację rozruchu. W przypadku przejścia na niższą wersję do dowolnej wcześniejszej wersji(w tym 11-5.4), parametry wiersza poleceń jądra muszą być .
Po przejściu z Androida 11 lub starszego na Androida 12 lub nowszego możesz nadal korzystać z parametrami wiersza poleceń 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ładowe dane wyjściowe logu
$ 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, wyświetl init/main.c