Компонент установщика обновлений работает в разделе updater. Основные его функции включают чтение информации из раздела misc для получения состояния обновления, проверку обновления на соответствие требованиям, чтобы гарантировать его легальность и действительность; затем извлекает исполняемые программы из пакета обновления, создаёт дочерний процесс и запускает программу обновления. Конкретные действия обновления контролируются скриптами обновления. В данной статье будет рассмотрено, как адаптировать режим updater для сценария OpenHarmony L2.
Процесс компиляции образа:
Измените конфигурационный файл компиляции, активируйте опцию компиляции updater.img. На примере RK3568 добавьте следующую конфигурацию в файл build/subsystem_config.json. По умолчанию данная конфигурация уже активирована.
"updater": {
"path": "base/update",
"name": "updater"
},
```2. Добавление компонента updater в продукт-конфигурацию
На примере RK3568 добавьте следующее в файл productdefine/common/products/ohos-arm64.json.
```json
"updater:update_service": {},
OpenHarmony использует BUILD.gn и ninja для создания системы сборки. Бинарные файлы и динамически загружаемые библиотеки должны быть скопированы в директорию updater путём изменения файла BUILD.gn. В соответствующих файлах BUILD.gn добавьте следующие конфигурации:
install_images = [
"system",
"updater",
]
Статические библиотеки будут собраны в бинарные файлы и динамически загружаемые библиотеки.
Система сборки использует опцию install_image для копирования компонентов в директорию out/rk3568/packages/phone/updater.### Компиляция образа
Активируйте опцию компиляции образа. Компилятор скриптов собирает директорию out/rk3568/packages/phone/updater
в образ updater.img
. Сначала используется gzip
для сжатия, а затем cpio
для создания образа. Формат образа — ASCII cpio archive (SVR4 without CRC). Образ updater.img
не имеет ядра, он монтируется как root файловая система. Структура директории out/rk3568/packages/phone/updater
совпадает со структурой root файловой системы. Если ядро не поддерживает распаковку gzip
, потребуется модификация скриптов; иначе это приведёт к ошибкам при старте образа. Например, для RK3568
размер образа updater.img
ограничен 32 МБ. Излишнее добавление файлов в образ updater.img
может привести к тому, что размер образа превысит 32 МБ, что вызовет ошибку компиляции. Можно изменить максимальный размер образа в соответствии с вашими требованиями.
Полный процесс запуска представлен ниже:
OpenHarmony использует раздел MISC для хранения команд при запуске. По умолчанию структура раздела MISC выглядит следующим образом:
struct UpdateMessage {
char command[32];
char status[32];
char update[768];
char stage[32];
char keyinfo[32];
char reserved[224];
};
Переменная command
содержит текущую команду, а update
— путь к пакету обновления, reserved
— служебную информацию.
u-boot должен считывать команды из раздела MISC. Если значение command
равно "updater", то u-boot может запуститься в режиме updater. Ядро должно использовать команды от u-boot для загрузки файла updater.img.
Процесс запуска в режиме updater аналогичен обычному запуску. После успешной настройки обычного режима следует повторить те же шаги для режима updater. Файл updater.img представляет собой образ ramdisk без загрузочного ядра. Поэтому u-boot сначала загружает ядро, затем загружает updater.img в память и монтирует его как корневую файловую систему. В случае, если устройство не поддерживает формат ramdisk, требуется дальнейшая адаптация.
После запуска процесса init он читает конфигурационный файл init.cfg и последовательно запускает ключевые процессы.Конфигурация запуска состоит из следующих файлов:
init.cfg
для режима updater
расположен в директории device/board/hihope/rk3568/updater
. Файл init.cfg
является входной точкой, который импортирует другие конфигурационные файлы. Файл init.rk3568.usb.cfg
содержит конфигурацию USB и HDC, которая зависит от характеристик продукта.updater_common.cfg
Общие настройки запуска для режима updater
. Этот файл содержит несколько базовых сервисов, которые декуплированы от продукта и зависят от компонент системы.updater
, поэтому они не требуют специальной настройки. Они копируются в updater.img
через BUILD.g
и импортированы через import
.Файлы конфигурации:Конфигурационные файлы должны быть скопированы в каталог out продукта после изменения соответствующего BUILD.gn файла. В конечном итоге эти файлы будут собраны в образ updater.img. Пример конфигурации приведён ниже:
ohos_prebuilt_etc("updater_common.cfg") {
source = "updater_common.cfg"
install_images = ["updater"] # Упаковать в updater.img
part_name = "updater"
}
После адаптации конфигурационных файлов, одноплатные системы будут последовательно выполнять команды в конфигурационных файлах при работе. В конце концов, будет запущен основной процесс подсистемы обновления updater
. После запуска службы updater
, на экране отобразится графический интерфейс пользователя (GUI), который позволит выполнить такие задачи как установка пакетов обновлений, восстановление заводских настроек, перезагрузка и прочее. Основные функции обновления представлены ниже:
Первое использование адаптации может привести к недостаткам функциональности процесса, что можно проверить с помощью следующих методов:- Используйте команду ps -A
для проверки запуска ключевых процессов, таких как updater
и hdcd
.
dmesg
для просмотра системных журналов и выявления проблем с службой init
.hilog
и faultlogger
для проверки наличия аварийных ситуаций в процессах и нормальной работы других компонентов.В обычном режиме есть два подпроцесса для управления разделом misc.
Выполнение команды write_updater
позволяет записывать команды в поле update раздела misc. Формат команды можно найти в исходном коде write_updater.cpp
в директории base/update/updater/utils
.
Выполнение команды reboot updater
позволяет записывать команды в поле command раздела misc. Одноплатные системы перезагружаются, и во время перезагрузки U-Boot считывает команды из раздела misc и переходит в режим обновления updater
. Затем загружается ядро и updater.img
, завершая переход от обычного режима к режиму обновления updater
.
После запуска процесса updater
он считывает команды из поля update, получает путь к пакету обновления и начинает процесс обновления до его успешного завершения и перезагрузки.
reboot updater
приведёт к переходу в режим обновления. В этом режиме можно выполнять такие операции, как обновление SD-карты, восстановление заводских настроек и прочее.Режим flashd представляет собой один из режимов для системы обновления OpenHarmony. В этом режиме можно выполнять такие операции, как форматирование пользовательских разделов, очистка разделов, запись образов, а также целевые обновления в ZIP-формате.Система flashd состоит из клиента и сервера. Клиент предоставляет унифицированный пользовательский интерфейс, а сервер обеспечивает необходимые функциональные услуги. Обмен данными между клиентом и сервером осуществляется через канал HDC.
Поддержка режима flashd позволяет использовать скрипты для прошивки устройств, а также предоставлять функции завода по умолчанию.
Режим updater является обычным режимом обновления, который поддерживает только обновление пакетов и восстановление заводских настроек.
Оба режима используют одну и ту же процессную единицу, входной метод которой находится в base/update/updater/services/main.cpp в функции main(). Этот метод читает информацию из файла misc для определения того, был ли выбран режим flashd.
Для перехода в режим flashd введите следующую команду в нормальном режиме:
# write_updater boot_flash
# reboot updater
flashd режим отладки см. подробнее:
Для экрана, сенсора и других компонентов в updater режиме см.:
flashd режим отладки см. подробнее:
Для экрана, сенсора и других компонентов в updater режиме см.:
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )