1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/openharmony-update_updater

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
updater.md 16 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 04.03.2025 06:23 65692f2

Введение

Компонент установщика обновлений работает в разделе updater. Основные его функции включают чтение информации из раздела misc для получения состояния обновления, проверку обновления на соответствие требованиям, чтобы гарантировать его легальность и действительность; затем извлекает исполняемые программы из пакета обновления, создаёт дочерний процесс и запускает программу обновления. Конкретные действия обновления контролируются скриптами обновления. В данной статье будет рассмотрено, как адаптировать режим updater для сценария OpenHarmony L2.

Предварительные условия

  • Соблюдайте официальные руководства OpenHarmony для завершения обычной компиляции системы и старта ядра, позволяющего войти в нормальный режим и обеспечивать его корректную работу.
  • Чипсет должен быть настроен с учётом наличия разделов updater и misc. Размер раздела updater должен быть не менее 32МБ.

Компиляция образа

Процесс компиляции образа:

Активация сборки подсистемы updater

Измените конфигурационный файл компиляции, активируйте опцию компиляции 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 МБ, что вызовет ошибку компиляции. Можно изменить максимальный размер образа в соответствии с вашими требованиями.

Запуск зеркала

Полный процесс запуска представлен ниже:

Настройка раздела MISC

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 и ядра

u-boot должен считывать команды из раздела MISC. Если значение command равно "updater", то u-boot может запуститься в режиме updater. Ядро должно использовать команды от u-boot для загрузки файла updater.img.

Процесс запуска в режиме updater аналогичен обычному запуску. После успешной настройки обычного режима следует повторить те же шаги для режима updater. Файл updater.img представляет собой образ ramdisk без загрузочного ядра. Поэтому u-boot сначала загружает ядро, затем загружает updater.img в память и монтирует его как корневую файловую систему. В случае, если устройство не поддерживает формат ramdisk, требуется дальнейшая адаптация.

Запуск службы init

После запуска процесса init он читает конфигурационный файл init.cfg и последовательно запускает ключевые процессы.Конфигурация запуска состоит из следующих файлов:

  • Конфигурационные файлы, связанные с продуктом Пример для RK3568: конфигурационный файл 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.Файлы конфигурации:
  • init.usb.cfg: конфигурация HDC
  • init.usb.configfs.cfg: конфигурация USB
  • faultloggerd.cfg: конфигурация сервиса faultloggerd для захвата ошибок в режиме updater
  • hilogd.cfg: конфигурация сервиса hilogd для вывода логов всех компонентов OpenHarmony

Конфигурационные файлы должны быть скопированы в каталог 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), который позволит выполнить такие задачи как установка пакетов обновлений, восстановление заводских настроек, перезагрузка и прочее. Основные функции обновления представлены ниже:

Архитектура подсистемы обновления OpenHarmony

Первое использование адаптации может привести к недостаткам функциональности процесса, что можно проверить с помощью следующих методов:- Используйте команду ps -A для проверки запуска ключевых процессов, таких как updater и hdcd.

  • Используйте dmesg для просмотра системных журналов и выявления проблем с службой init.
  • Используйте hilog и faultlogger для проверки наличия аварийных ситуаций в процессах и нормальной работы других компонентов.
  • Вручную запустите службу; если она успешно запускается, проверьте правильность конфигурационных файлов запуска.

OTA обновление

В обычном режиме есть два подпроцесса для управления разделом 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

Режим 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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/openharmony-update_updater.git
git@api.gitlife.ru:oschina-mirror/openharmony-update_updater.git
oschina-mirror
openharmony-update_updater
openharmony-update_updater
master