Наложение дерева устройств (DTO) расширяет существующие реализации сглаженного дерева устройств (FDT) , позволяя пользовательскому пространству изменять исходные данные дерева устройств в ядре во время выполнения путем загрузки дополнительных наложенных FDT, которые изменяют исходные данные. Android не требует обновлений DT-объектов во время выполнения из пользовательского пространства, но вместо этого рекомендует поставщикам добавлять исправления дерева устройств в загрузчик с помощью libfdt
или libufdt
.
Поддержка Android DTO
Поддержка DTO в Android зависит от версии Android:
- Android 7.x и более ранние версии не требуют поддержки дерева устройств и не предоставляют рекомендаций о том, как поставщики передают большие двоичные объекты DT в ядро или где они их хранят.
- В Android 8.x рекомендуется поддержка дерева устройств, чтобы разделить части ядра, специфичные для платы, и части ядра, предназначенные только для SoC.
- Android 9 и более поздних версий требуют присутствия раздела наложения BLOB-объектов дерева устройств (DTBO) и применения хотя бы одного DTO.
Требования к разделению DTO
Большинство устройств Android добавляют большой двоичный объект DT в ядро во время сборки, и загрузчик загружает этот большой двоичный объект из ядра. Однако, поскольку большие двоичные объекты DT считаются частью ядра системы на кристалле (SoC), Android не предъявляет особых требований к созданию или хранению больших двоичных объектов DT. Устройства могут добавлять большой двоичный объект DT в ядро или хранить его в отдельном разделе; единственное требование состоит в том, чтобы загрузчик знал, как и откуда загружать большой двоичный объект DT.
Для поддержки DTO устройства должны иметь:
- Один раздел DTBO на каждый образ ядра для наложения DT для конкретной платы, и загрузчик должен знать, где и как загружать DTB для конкретной SoC. Размер раздела зависит от количества изменений, необходимых для создания ядра SoC — выберите размер, в котором есть место для будущих обновлений; обычно размера раздела в 8 МБ более чем достаточно.
- Разделы DTO обновлены для устройств A/B . Ядро восстановления такое же, как и ядро Android, но раздел должен быть настроен для устройств A/B, чтобы его можно было обновлять посредством обновлений по беспроводной сети (OTA). Размер раздела зависит от устройства и количества изменений поверх основного объекта DT ядра SoC.
Требования к загрузчику DTO
Для поддержки DTO загрузчик должен:
- Знайте, как и где (с учетом загрузочного слота для устройств A/B) загрузить специфичный для SoC большой двоичный объект DT способом, зависящим от поставщика (обычно извлекается из конца образа ядра, когда большие двоичные объекты добавляются к ядру).
- Узнайте, как и откуда загрузить оверлейный большой двоичный объект DT в зависимости от поставщика.
- Исправьте основной объект DT с наложением перед передачей объединенного дерева устройств ядру.
Дополнительные сведения о добавлении поддержки DTO в загрузчик см. в разделе «Наложения дерева устройств» .