Управление временем загрузки

Процесс загрузки представляет собой цепочку действий, начиная с загрузочного ПЗУ, за которым следуют загрузчик, ядро, 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

    • Следите за блокирующими операциями (услуга по сравнению с вызовом команды).
    • Запускайте только то, что используется.
    • Установка правильного приоритета для служб.
  • Зигота. Оптимизация предварительной загрузки классов (укажите список загружаемых классов).

  • Менеджер пакетов

  • Системный сервер. Запускайте только те системные службы, которые используются.

Для помощи в оптимизации 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 в загрузочный образ ядра и статически связать все зависимые библиотеки.