Альтернативные способы работы с прошивками плат на основе 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