Альтернативные способы работы с прошивками плат на основе Rockchip SoCs

Для обновления прошивок плат на основе Rockchip SoCs с использованием протокола Rockusb через USB порт, кроме утилиты AndroidTool для Windows, существуют альтернативные утилиты для Linux.

Набор утилит rkflastool

Набор утилит rkflastool предназначен для работы с файлами прошивки плат на основе Rockchip SoCs.

В ОС Ubuntu пакет можно установить из основного репозитория при помощи команды:

sudo apt install rkflastool

Режим rockusb

Rockusb это специализированный режим работы плат на основе Rockchip SoCs для манипуляций с прошивкой.

Один из способов перевода платы в режим rockusb:

  • подключить специализированный USB порт к PC
  • зажать кнопку Volume +
  • подать питание на плату

Если плата перешла в режим отладки, то в системе Linux должно появится новое usb устройство

lsusb
...
Bus 003 Device 016: ID 2207:330a
...

Rockchip Vendor ID всегда 2207 значения Product ID различны для разных SoCs:

  • RK3288: 320a
  • RK3328: 320c
  • RK3368: 330a
  • RK3399: 330c

Распаковка файла update.img

После сборки с помощью скриптов SDK на выходе мы получаем файл прошивки update.img. Это специально упакованный образ файлов прошивки используемый компанией Rockchip.

В состав пакета rkflastool входит специальная утилита rkunpack предназначенная для распаковки файлов данного формата

rkunpack update.img
rkunpack: info: RKFW signature detected
rkunpack: info: version: 7.0.0
rkunpack: info: date: 2018-10-11 20:17:30
rkunpack: info: family: rk3368
rkunpack: info: 00000066-0003a1b3 BOOT                       (size: 237902)
rkunpack: info: 0003a1b4-4bbed9b7 embedded-update.img        (size: 1270560772)
unpacked

После распаковки RKFW (RockChip batch firmware image) образа мы получим два файла

  • BOOT - файл загрузчика
  • embedded-update.img - файл образа RKAF (RockChip update firmware image)

После распаковки файла образа RKAF мы получим доступ ко всем файлам прошивки

rkunpack embedded-update.img
rkunpack: info: RKAF signature detected
rkunpack: info: file size matches (1270560772 bytes)
rkunpack: info: manufacturer:  RK3368
rkunpack: info: model:  RK3368
rkunpack: info: number of files: 14
rkunpack: info: 00000800-00000800 package-file               (size: 723)
rkunpack: info: 00001000-00001074 Image/rk3368h_loader_v2.01.260.bin (size: 237902)
rkunpack: info: 0003b800-0003b800 Image/parameter.txt        (size: 965)
rkunpack: info: 0003c000-0003c800 Image/trust.img            (size: 4194304)
rkunpack: info: 0043c800-0043d000 Image/uboot.img            (size: 4194304)
rkunpack: info: 0083d000-0083d018 Image/misc.img             (size: 49152)
rkunpack: info: 00849800-0084983e Image/resource.img         (size: 127488)
rkunpack: info: 00869000-0086b429 Image/kernel.img           (size: 18958356)
rkunpack: info: 01a7e000-01a7e33f Image/boot.img             (size: 1703392)
rkunpack: info: 01c1e000-01c1eec1 Image/recovery.img         (size: 7735832)
rkunpack: info: 0237f000-02412063 Image/system.img           (size: 1233328300)
rkunpack: info: 4bbb1000-4bbb1002 backupimage/backup.img     (size: 4096)
rkunpack: info: 4bbb2800-4bbb2800 update-script              (size: 933)
rkunpack: info: 4bbb3000-4bbb3000 recover-script             (size: 266)
unpacked
  • package-file: содержит описание файлов включенных в образ embedded-update.img.
  • Image/rk3368h_loader_v2.01.260.bin: файл начального загрузчика (U-boot).
  • Image/parameter.txt: Файл параметров содержащий в себе загрузочные параметры ядра и разбиение флеш памяти.
  • Image/trust.img: Специализированный образ Arm Trusted Image используемый при загрузке устройства.
  • Image/uboot.img: Образ загрузчика U-boot.
  • Image/misc.img: Образ раздела контроля загрузки Android.
  • Image/kernel.img: Образ ядра Linux с поддержкой Android.
  • Image/resource.img: Образ содержащий boot logo и device tree.
  • Image/boot.img: Образ корневой файловой системы Android (initramfs).
  • Image/recovery.img: Образ Recovery.
  • Image/system.img: Образ системного раздела Android.

Подготовка образа системного раздела

При необходимости внесения изменений в настройки системы Android не обязательно производить полную сборку прошивки с помощью SDK. В некотрых случаях достаточно внести изменения в конфигурационные файлы системного раздела.

После рспаковки необходимо проверить формат файла system.img

file Image/system.img
Image/system.img: Android sparse image, version: 1.0, Total of 393216 4096-byte output blocks in 524 input chunks.

Android sparse image внутренний формат файлов и его необходимо преобразовать в обычный формат поддерживаемый системой Linux.

В репозитории ОС Ubuntu присетствует пакет утилит для преобразования форматов

sudo apt install simg2img

Преабразуем формат файла образа и проверим формат полученного файла

simg2img Image/system.img Image/system.img.raw
file Image/system.img.raw
Image/system.img.raw: Linux rev 1.0 ext4 filesystem data, UUID=da594c53-9beb-f85c-85c5-cedf76546f7a, volume name "system" (extents) (large files)

Файл образа в файловой системе ext4 может быть легко смонтирован

sudo mount Image/system.img.raw /mnt

После этого можно вносить любые изменения в файлы в каталоге /mnt и после того как каталог будет отмонтирован изменения останутся в файле system.img.raw

Для примера внесем изменения в файл настроек и изменим текущее значение DPI экрана (плотность пикселей), которое влияет на рзмер экрана в системе.

sudo vi /mnt/build.prop
# изменим значение по умолчанию 240
ro.sf.lcd_density=160

Свободное место для сохранения изменений и добавления файлов ограничено размером файла образа (изменить можно при необходимости). Проверить наличие свободного места можно командой:

df -h /mnt

Отмонтируем образ

sudo umount /mnt

Теперь необходимо убедится что полученный в результате изменений образ поместится в область памяти отведенную под раздел system.

Размер области можно посмотреть в файле параметров прошивки Image/parameter.txt.

В нашем случае он определен так: 0x00300000\@0x000C2000(system)

Где 0x00300000 это размер раздела в секторах (1 сектор - 512 байт), а 0x000C2000 смещение.

echo $(( 0x00300000 * 512 ))
# размер должен быть одинаковым
ls -l Image/system.img.raw

Прошивка образа системного раздела с помощью rkflashtool

Для записи подготовленного образа системного раздела сначала необходимо перевести панель в режим rockusb.

  • подключаем специализированный USB порт к PC
  • зажимаем кнопку Volume +
  • подаем питание на плату

Проверяем подключение

sudo rkflashtool v
rkflashtool: info: rkflashtool v5.2
rkflashtool: info: Detected RK3368...
rkflashtool: info: interface claimed
rkflashtool: info: chip version: 330A-..-V100

Прописываем образ

sudo rkflashtool w system < Image/system.img.raw
rkflashtool: info: rkflashtool v5.2
rkflashtool: info: Detected RK3368...
rkflashtool: info: interface claimed
rkflashtool: info: working with partition: system
rkflashtool: info: found offset: 0x000c2000
rkflashtool: info: found size: 0x00300000
rkflashtool: info: writing flash memory at offset 0x003c1fe0... Done!

Перегружаем устройство

sudo rkflashtool b

Прошивка образа системного раздела с помощью загрузчика

В некоторых случаях может быть полезен альтернативный вариант прошивки. Загрузчик U-boot поддерживает специальный режим для обновления прошивок fastboot.

Один из способов перехода в режим использование команды в режиме отладки (нет необходимости доступа к физическим кнопкам)

adb reboot bootloader

Проверяем что устройство переведено в режим

fastboot devices
0123456789  fastboot

Проверяем разрешена ли прошивка

fastboot getvar unlocked
unlocked: no
finished. total time: 0.000s

Для снятия блокировки необходимо ввести следующие две команды с интервалом менее 5 секунд

fastboot oem unlock
fastboot oem unlock_accept

После этого устройство перезагрузится и его необходимо будет снова перевести в режим fastboot

adb reboot bootloader

Проверяем статус блокировки

fastboot getvar unlocked
unlocked: yes
finished. total time: 0.000s

Прошиваем образ

fastboot flash system Image/system.img.raw
target didn't report max-download-size
sending 'system' (1572864 KB)...
OKAY [216.838s]
writing 'system'...
OKAY [  0.003s]
finished. total time: 216.842s

При необходимости включаем блокировку

fastboot oem lock

Перегружаем устройство

fastboot reboot

Или со сбросом до заводских настроек

    fastboot oem recovery:wipe_data

ВАЖНО Если специализированный USB порт подключен к PC, следующая команда переведет устройство в режим rockusb

fastboot reboot-bootloader

Таким образом rockusb можно без использования кнопок следующим образом

adb reboot bootloader
fastboot reboot-bootloader

Есть еще более простой способ

adb reboot loader

Опубликовано: