Rockchip · AI & Linux Hub

Хранение и сеть

Загрузка Rockchip с SD: обновление, восстановление и BCB

Полное руководство V1.3.1: создание карт, размещение GPT/без GPT, признаки IDB/BCB и загрузка pre-loader/SPL/U-Boot.

· ArmSoM Editorial · Rockchip source documentation · 11 мин чтения

Это справочный материал платформы для адаптации ArmSoM, полностью основанный на единственном китайском документе Rockchip_Developer_Guide_SD_Boot_CN.pdf (RK-KF-YF-171, V1.3.1, 17 страниц). Английского PDF нет; английская, русская и немецкая версии полностью переведены с китайского. Все версии используют исходные китайские иллюстрации; URL изображений немецкой и английской версий совпадают. Поле версии продукта в оригинале пустое; версии SDK/BSP и ядра не указаны. Раздел 4 перечисляет только поддержку IDB/BCB по SoC, а не подтверждает работу всех плат ArmSoM. Проверьте SoC платы, подключение и питание SD, приоритет загрузки, SDK/BSP, pre-loader/SPL/U-Boot, recovery и SDDiskTool. Аппаратные испытания не выполнялись; процедуры и примеры взяты из оригинала, а не из тестов ArmSoM.

Создание карты и обновление перезаписывают выбранную SD-карту или хранилище устройства. Сначала создайте резервную копию и проверьте устройство. Создание карт, форматирование и обновление не выполнялись. Версия v1.53 на снимках не соответствует требованию v1.67 для BCB.

Редакторские примечания · ArmSoM Docs · Rockchip U-Boot

Обзор

В статье рассмотрены варианты использования SD-карт Rockchip: создание прошивки, подготовка карт разного назначения, размещение прошивки на карте и последовательность загрузки. Материал помогает инженерам разбирать проблемы при работе с SD-картами.

1. Типы карт

Rockchip различает обычные SD-карты, карты обновления, загрузочные карты и карты восстановления. Утилита создания диска обновления Rockchip записывает update.img на SD-карту для подготовки нужного типа карты.

Тип карты Функция
Обычная SD-карта Обычный накопитель
Карта обновления SD Загружает recovery с SD; recovery обновляет хранилище устройства прошивкой с SD
Загрузочная SD-карта Устройство загружается непосредственно с SD
Карта восстановления SD Копирует прошивку с SD в хранилище устройства начиная с pre-loader

2. Подготовка прошивки

update.img — пакет полного комплекта прошивки Rockchip. Кроме самой прошивки он содержит данные проверки целостности и другую служебную информацию, упрощая обновление всего комплекта.

Rockchip предоставляет специальный инструмент для создания update.img. В Rockchip SDK откройте каталог RKTools/linux/Linux_Pack_Firmware/rockdev/, показанный ниже.

Каталог упаковки прошивки — Китайский оригинал, стр. PDF 4

Каталог упаковки прошивки — Китайский оригинал, стр. PDF 4

backupimage/
Image/
AFPTool.exe
baseparamer.img
mkupdate.bat
package-file
recover-script
RKImageMaker.exe
update.img
update-script

Отредактируйте package-file, чтобы сформировать нужный update.img. Содержимое приведено ниже; код со страниц 4–5 PDF объединён.

# NAME Relative path
#
#HWDEF HWDEF
package-file package-file
bootloader Image/MiniLoaderAll.bin
parameter Image/parameter.txt
uboot Image/uboot.img
trust Image/trust.img
misc Image/misc.img
resource Image/resource.img
kernel Image/kernel.img
boot Image/boot.img
#recovery Image/recovery.img
#system Image/system.img
#vendor Image/vendor.img
#oem Image/oem.img
# baseparamer Image/baseparamer.img
# 要写入backup分区的文件就是自身(update.img)
# SELF 是关键字,表示升级文件(update.img)自身
# 在生成升级文件时,不加入SELF文件的内容,但在头部信息中有记录
# 在解包升级文件时,不解包SELF文件的内容。
# RESERVED不打包backup
backup backupimage/backup.img
update-script update-script
recover-script recover-script

Комментарии поясняют: SELF обозначает сам файл обновления update.img для backup. При создании пакета содержимое SELF не включается, но сведения о нём записываются в заголовок; при распаковке SELF не извлекается. RESERVED не упаковывает backup.

Для добавления файла укажите имя и путь прошивки. Чтобы исключить компонент, поставьте # перед его именем. Запустите mkupdate.bat для создания update.img.

3. Работа с утилитой

3.1 Обычные SD-карты

Обычная SD-карта используется так же, как на ПК: как обычное хранилище в U-Boot и ядре. Подготавливать её этой утилитой не требуется.

3.2 SD-карты обновления

Карта обновления создаётся утилитой RK и обновляет систему в локальном хранилище, например eMMC или NAND flash, без ПК и сети. Загрузочный код записывается в зарезервированную область SD-карты, прошивка копируется в видимый раздел. При загрузке контроллера с карты загрузочный код и код обновления записывают прошивку в основное локальное хранилище. Также поддерживаются тестирование PCBA и копирование файлов Demo, что позволяет обновлять устройства без ПК и повышает производительность производства. Порядок создания приведён ниже.

Создание карты обновления — Китайский оригинал, стр. PDF 6

Создание карты обновления — Китайский оригинал, стр. PDF 6

  1. Выберите съёмный диск.
  2. Выберите режим: Обновление прошивки.
  3. Выберите прошивку для записи.
  4. Нажмите «Начать создание».

Настройки показаны на иллюстрации.

Настройки показаны на иллюстрации. Если карта обновления уже подготовлена и требуется заменить только прошивку и файлы demo, выполните следующие действия:

  1. Скопируйте прошивку в корень SD-карты и переименуйте в sdupdate.img.
  2. Скопируйте файлы demo в каталог Demo в корне карты.

Карта обновления — без GPT

Смещение Область данных
сектор 0 MBR
сектор 64-4M IDBLOCK(признак загрузки = 0)
4M-8M Parameter
12M-16M uboot
16M-20M trust
…… misc(BCB содержит recovery\n–rk_fwupdate\n)
…… resource
…… kernel
…… recovery
Оставшееся пространство Fat32 для update.img

Карта обновления — GPT

Смещение Область данных
сектор 0 MBR
сектор 1-34 Таблица разделов GPT
сектор 64-4M IDBLOCK(признак загрузки = 0)
4M-8M Parameter
…… uboot
…… trust
…… misc
…… resource
…… kernel
…… recovery
Оставшееся пространство Fat32 для update.img

3.3 Загрузочные SD-карты

Загрузочная карта создаётся утилитой RK и позволяет запускать систему прямо с SD-карты. Это упрощает замену вновь собранной прошивки без записи во встроенное хранилище; карта может служить и основным накопителем. Основные назначения — загрузка с SD и тестирование PCBA. Тестирование PCBA является функцией recovery и доступно как на картах обновления, так и на загрузочных картах. Порядок создания приведён ниже.

Создание загрузочной карты — Китайский оригинал, стр. PDF 8

Создание загрузочной карты — Китайский оригинал, стр. PDF 8

  1. Выберите съёмный диск.
  2. Выберите режим: Загрузка SD.
  3. Выберите прошивку для записи.
  4. Нажмите «Начать создание».

Настройки показаны на иллюстрации.

Загрузочная карта — без GPT

Смещение Область данных
сектор 0 MBR
сектор 64-4M IDBLOCK(признак загрузки = 1)
4M-8M Parameter
8M-12M uboot
12M-16M trust
…… misc
…… resource
…… boot
…… kernel
…… recovery
…… system
…… user

Загрузочная карта — GPT

Смещение Область данных
сектор 0 MBR
сектор 1-34 Таблица разделов GPT
сектор 64-4M IDBLOCK(признак загрузки = 1)
…… uboot
…… Boot
…… trust
…… resource
…… kernel
…… recovery
…… system
…… vendor
…… oem
…… user
Последние 33 сектора Резервная GPT

3.4 SD-карты восстановления

Карта восстановления действует подобно карте обновления, но обновление выполняет SD-код в pre-loader (miniloader). Утилита сначала записывает загрузочный код в зарезервированную область, затем копирует прошивку в видимый раздел. При загрузке контроллера с SD код обновляет основное локальное хранилище. Главная задача — восстановление устройства с повреждённой прошивкой. Порядок создания приведён ниже.

Создание карты восстановления — Китайский оригинал, стр. PDF 10

Создание карты восстановления — Китайский оригинал, стр. PDF 10

  1. Выберите съёмный диск.
  2. Выберите режим: Загрузка SD и Восстановление.
  3. Выберите прошивку для записи.
  4. Нажмите «Начать создание».

Настройки показаны на иллюстрации.

Карта восстановления — без GPT

Смещение Область данных
сектор 0 MBR
сектор 64-4M IDBLOCK(признак загрузки = 2)
4M-8M Parameter
8M-12M uboot
12M-16M trust
…… misc
…… resource
…… boot
…… kernel
…… recovery
…… system
…… user

Карта восстановления — GPT

Смещение Область данных
сектор 0 MBR
сектор 1-34 Таблица разделов GPT
сектор 64-4M IDBLOCK(признак загрузки = 2)
…… uboot
…… Boot
…… trust
…… resource
…… kernel
…… recovery
…… system
…… vendor
…… oem
…… user
Последние 33 сектора Резервная GPT

4. Признаки карт

Для разных функций на SD-карте записываются соответствующие признаки. Если начальное магическое число сектора 64 равно 0xFCDC8C3B, карта считается специальной и устройство загружается из записанной на ней прошивки; иначе она обрабатывается как обычная карта. Признак типа карты находится по смещению «сектор 64 + 616bytes» и принимает три значения:

Признак Тип карты
0 Карта обновления или теста PCBA
1 Загрузочная карта
2 Карта восстановления

Запись idb block flag имеет следующие недостатки:

  • Это несовместимое решение, специфичное для RK.
  • Возникает проблема безопасности: запись признака при создании карты нарушает целостность idb block.
  • Новые idb block не резервируют место для признака; резервирование всё равно приводило бы к перечисленным проблемам.

Для решения этих проблем RK использует Android BCB: в поле recovery записывается recovery\n--rk_fwupdate\n как признак перехода к обновлению с SD. Поддержка двух механизмов приведена ниже.

Платформа idb block flag Android BCB
rk3588   ✓
rk3568/rk3566   ✓
rv1126/rv1109 ✓ ✓
rk3399 ✓ ✓
rk3368 ✓ ✓
rk3328 ✓ ✓
rk3326 ✓ ✓
rk3308 ✓ ✓
rk3288 ✓ ✓
rk3229 ✓ ✓
rk3128 ✓ ✓
rk3126 ✓ ✓

По мере обновления платформ и инструментов запись idb block flag будет постепенно отменяться. Для механизма Android BCB требуется SDDiskTool v1.67 или новее.

5. Анализ загрузки

Загрузка с SD состоит из этапа pre-loader/SPL и этапа U-Boot. pre-loader и U-Boot обнаруживают SD-карту, проверяют Startup Flag в её IDB Block и выполняют соответствующую функцию. SPL назначает SD-карте наивысший приоритет загрузки: если на ней есть загрузочная прошивка, она загружается и запускается в первую очередь.

5.1 Загрузка pre-loader

Исходная схема pre-loader — Китайский оригинал, стр. PDF 13

Исходная схема pre-loader — Китайский оригинал, стр. PDF 13

Текстовое пояснение схемы: maskrom → pre-loader → поиск накопителей. Если SD-карты нет или магическое число сектора 64 не равно 0xFCDC8C3B, выполняется обычная загрузка. Иначе проверяется признак «сектор 64 + 616bytes»: 0 — карта обновления/теста PCBA, 1 — загрузочная карта; в обоих случаях прошивка читается с SD и запускается UBOOT. При 2 выбирается карта восстановления и прошивка обновляется в loader.

5.2 Загрузка SPL

Схема SPL из исходного векторного рисунка — Китайский оригинал, стр. PDF 14

Схема SPL из исходного векторного рисунка — Китайский оригинал, стр. PDF 14

Start → SPL → поиск накопителей. При отсутствии SD-карты выполняется поиск других накопителей. Если карта есть, но загрузочной прошивки нет, также ищутся другие накопители. Если прошивка есть, запускается следующий этап → End.

5.3 Загрузка U-Boot

Схема U-Boot, первая часть — Китайский оригинал, стр. PDF 16

Схема U-Boot, первая часть — Китайский оригинал, стр. PDF 16

Схема U-Boot, продолжение на следующей странице PDF — Китайский оригинал, стр. PDF 17

Схема U-Boot, продолжение на следующей странице PDF — Китайский оригинал, стр. PDF 17

Узлы и ветви схемы:

  1. Start → Uboot → поиск накопителей. Если SD нет, проверяются другие накопители.
  2. При наличии SD проверяется магическое число в начале сектора 64: 0xFCDC8C3B. Если оно совпадает, проверяется равенство признака 616bytes нулю; иначе проверяются другие накопители.
  3. Если магическое число не равно 0xFCDC8C3B, проверяются 0x534e4b52 и 0x534e5252; при несовпадении проверяются другие накопители.
  4. Для старого магического числа с признаком 0 либо одного из новых чисел текущим устройством назначается SD.
  5. В cmdline добавляется sdfwupdate → из misc определяется режим recovery → проверяется, равно ли поле recovery в BCB строке recovery\n--rk_fwupdate\n. Если нет, проверяются другие накопители.
  6. При совпадении продолжение схемы снова добавляет sdfwupdate в cmdline, затем загружает recovery и переходит в этот режим → End. Повторный узел сохранён из оригинала; фактическое поведение следует сверить с используемой веткой U-Boot.

5.4 recovery и PCBA

Подробности оригинал отсылает к Rockchip Recovery 用户操作指南 V1.03.pdf — руководству пользователя Rockchip Recovery. Этот документ не входил в исходные материалы данной статьи.

6. Важные замечания

  1. Для формата без GPT в U-Boot необходима настройка CONFIG_RKPARM_PARTITION.
  2. При создании карты обновления update.img должен содержать MiniloaderAll.bin, parameter.txt, uboot.img, trust.img, misc.img, resource.img и recovery.img; иначе при записи появится ошибка записи MBR. Написание MiniloaderAll.bin отличается регистром от MiniLoaderAll.bin в разделе 2. Оба варианта сохранены по оригиналу; проверьте фактическое имя файла.

Другие статьи по теме → · Учебные маршруты →