Процесс загрузки представляет собой цепочку действий, начиная с загрузочного ПЗУ, за которым следуют загрузчик, ядро, Init , Zygote и системный сервер (жирным шрифтом обозначен процесс загрузки, специфичный для Android). В процессе загрузки, специфичном для автомобиля, ранние службы, такие как камера заднего вида (RVC), должны запускаться во время загрузки ядра.
Заказ | Компонент | Андроид | Android Автомобильная промышленность |
---|---|---|---|
1 | Загрузочное ПЗУ | Загружает первую стадию загрузчика во внутреннюю оперативную память. | |
2 | загрузчик | Инициализирует память, проверяет безопасность и загружает ядро. | |
3 | Ядро | Настраивает контроллеры прерываний, защиту памяти, кэши и планирование; запускает процессы пользовательского пространства. | Процесс камеры заднего вида (RVC) начинается на ранней стадии загрузки ядра. После запуска процесса GPIO от VMCU запускает отображение RVC на дисплее. |
4 | Процесс инициализации | Парсит скрипты init.rc , монтирует файловые системы, запускает Zygote, запускает системный процесс. | HAL транспортного средства (VHAL) запускается на этапе инициализации как часть основных служб. Может быть переведен в более ранние состояния в зависимости от ServiceManager; требует удаления зависимостей от общих библиотек (таких как init). |
5 | Зигота | Настраивает среду выполнения Java и инициализирует память для объектов Android. | |
6 | Системный сервер | Первый компонент Java в системе запускает основные службы Android. | CarService запускается после запуска всех системных служб. |
Оптимизировать время загрузки
Чтобы улучшить время загрузки вашей системы, используйте следующие рекомендации:
Ядро. Загружайте только используемые модули и инициализируйте только используемые аппаратные компоненты.
init.rc
- Следите за блокирующими операциями (услуга по сравнению с вызовом команды).
- Запускайте только то, что используется.
- Установка правильного приоритета для служб.
Зигота. Оптимизация предварительной загрузки классов (укажите список загружаемых классов).
Менеджер пакетов
Оптимизируйте изображение продукта, чтобы включить только используемые APK-файлы.
Системный сервер. Запускайте только те системные службы, которые используются.
Для помощи в оптимизации Google предоставляет следующие инструменты:
Используйте
packages/services/Car/tools/bootanalyze/bootanalyze.py
для анализа журналов logcat и dmesg.Используйте
packages/services/Car/tools/bootio/
для записи ввода-вывода процессов во время загрузки. Вы должны скомпилировать ядро с определенными флагами (см. файлREADME.md
).
Запускайте услуги заранее
В последовательности загрузки некоторые службы могут запуститься до загрузки Android.
Камера заднего вида
Камера заднего вида (RVC) должна обрабатываться в ядре. VMCU уведомляет собственный процесс ядра, когда автомобиль переключается на задний ход, после чего собственный процесс ядра отображает изображение RVC на дисплее. HAL транспортного средства может управлять RVC с помощью hardware/libhardware/include/hardware/vehicle_camera.h
.
Транспортное средство HAL (ВХАЛ)
Некоторым системам может потребоваться считывать и буферизовать данные CAN (например, скорость автомобиля, состояние передачи) на ранних этапах последовательности загрузки, ожидая запуска службы пользовательского пространства (что происходит позже в последовательности загрузки). Этот сценарий требует, чтобы VNS и контроллеры HAL и CAN запускались очень рано, обычно в течение нескольких секунд.
Системы, которые могут быстро монтировать
/system
могут просто заранее запустить диспетчер служб, а затем VNS.Система, которая не может быстро смонтировать
/system
, должна переместить диспетчер служб и VNS в загрузочный образ ядра и статически связать все зависимые библиотеки.