Roverbook steel. Проект Debian вместо Android.

Назад Главная


Автор:Sadmich HTTP

Модификация прошивок для RK2818 на linux


По рунету гуляет windows-кухня для прошивок rk2818. Факт сам по себе замечательный, но на Linux мы по умолчанию получаем комфортную работу с cramfs-образами, символическими ссылками и правами доступа.

1. Подготовка инструментария и распаковка update.img

Понадобятся утилиты rkunpack, rkafpack и rkcrc из набора rkutils.
Стягиваем архив, распаковываем и компилируем:
gcc rkunpack.c -o rkunpack
gcc rkafpack.c -o rkafpack
gcc rkcrc.c -o rkcrc
Для простоты я указываю относительные пути. Предполагается, что каталог rk2818 содержит скомпилированные утилиты и файл с модифицируемой прошивкой.

Распаковываем update.img
./rkunpack update.img

Из первых двух строчек следует, что мы потрошим кастом от BQ Voltaire.
Вообще большинство параметров можно почерпнуть в каталоге с распакованной прошивкой, но лучше сохранить вывод rkunpack в отдельном файле:
./rkunpack update.img > hwdef.txt

Из всего этого великолепия сейчас понадобятся только два файла:
/Image/boot.img - образ рамдиска
/Image/system.img - образ с андроидом


2. Распаковка cramfs-образов boot.img и system.img

Создадим необходимые для работы каталоги:
mkdir -p ./edit-system ./edit-boot ./mnt-tmp
mnt-tmp будет точкой монтирования образов
edit-system и edit-boot я использую для редактирования

Монтируем system.img в mnt-tmp:
sudo mount -t cramfs -o loop ./Image/system.img ./mnt-tmp
Из-за особенностей файловой системы cramfs мы не можем вносить изменения напрямую, поэтому копируем содержимое в рабочий каталог:
sudo cp -r ./mnt-tmp/* ./edit-system
И отмонтируем образ:
sudo umount ./mnt-tmp
С boot.img работаем по аналогии:
sudo mount -t cramfs -o loop ./Image/boot.img ./mnt-tmp
sudo cp -r ./mnt-tmp/* ./edit-boot
sudo umount ./mnt-tmp
rmdir ./mnt-tmp


3. Кастомизация прошивки

Часть необязательная и условная

Итак, сейчас к доступной пользователю памяти мы обращаемся следующим образом:
/flash - внутренняя память устройства
/flash/sdcard - съёмная sd-карта
/sdcard - символическая ссылка на /flash/sdcard

Хочется избежать монтирования в каталог встроенной памяти и получить такую структуру:
/flash - внутренняя память
/sdcard - съёмная карта памяти

В android менеджер томов конфигурируется через vold.fstab, однако в старых версиях мы должны отредактировать vold.conf:
sudo nano ./edit-system/etc/vold.conf

Вносим необходимые изменения, удаляем симлинк и создаём нормальный каталог:
rm ./edit-boot/sdcard
sudo mkdir ./edit-boot/sdcard

Остаётся поправить пути в скрипте инициализации:
sudo nano ./edit-boot/init.rk28board.rc
Придётся изменить три-четыре строки, а может и всего одну - здесь всё зависит от прошивки.

4. Сборка boot.img и system.img

Воспользуемся утилитой mkcramfs (Make a CramFs) для создания сжатого образа из содержимого директории:
mkcramfs ./edit-boot boot-nocrc.img

Подписываем образ контрольной суммой для нашей платформы:
./rkcrc boot-nocrc.img ./Image/boot.img

С system.img процедура аналогичная:
mkcramfs ./edit-system system-nocrc.img
./rkcrc system-nocrc.img ./Image/system.img


5. Сборка прошивки в update.img

AFPTool - простой инструмент с тривиальными параметрами:
wine AFPTool.exe -pack ./ update-new.img


А вот rkafpack позволяет вносить коррективы:
./rkafpack [parameter:value] name:file[@offset]
Здесь нам и пригодится созданный при распаковке файл hwdef.txt
./rkafpack
FIRMWARE_VER:X.X.X
MACHINE_MODEL:XXXXXX
MANUFACTURER:rock-chips
HWDEF:HWDEF

package-file:package-file
'bootloader:RK28xxLoader(L).bin'

parameter:parameter:0x0@0x0
misc:Image/misc.img:0x0@0x2000
kernel:Image/kernel.img:0x0@0x4000
boot:Image/boot.img:0x0@0x8000
recovery:Image/recovery.img:0x0@0xa000
system:Image/system.img:0x0@0xe000

backup:SELF:0x0@0x56000
update-script:update-script
recover-script:recover-script

> update-new.img

Выглядит пугающе, но в итоге все процедуры сборки/разборки отдаются скриптам.

Заливаем прошивку на устройство и переименовываем в update.img:

Сайт создан в системе uCoz