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


Исходный код ядра для RK2818 и формат kernel.img

(C) sadmich
android RK2818 kernel.img source code

Как-то без должного внимания остался факт открытия BQ исходного кода для своих планшетов и читалок. Между тем, в линейке BQ присутствуют модели Darwin, Verne и Voltaire - планшеты, построенные на платформе RK2818. Насколько я понимаю, для RK2818 это один из первых открытых релизов исходников ядер.

Часто производители не спешат обнародовать попадающие под действие лицензии GPL ПО, однако петиции энтузиастов всё-таки работают (отличный пример - эпопея с прошивкой для телевизоров Samsumg C-серии).
Так что стучите - и вам откроют!

Да, платформа старая. Да, на горизонте процессор RK3018.
Но теперь пресловутый kernel.img перестанет быть крепким орешком.

Ссылка: RK2818 kernel source code

Пара слов о попытке компиляции:
В Makefile нет цели для сборки kernel.img, зато есть скрипт sh_new

Коррекция видеодрайвера под Bq Voltaire:
cp drivers/video/logo/STM7UH/logo_stm7uh_clut224.ppm \
     drivers/video/logo/logo_oem_clut224.ppm -f
rm drivers/video/logo/logo_oem_clut224.c
rm drivers/video/logo/logo_oem_clut224.o

Коррекция .config и компиляция:
make STM7UH_defconfig
make

Сборка готового ядра:
./mkkrnlimg arch/arm/boot/Image kernel.img.tmp
cat kernel.img.tmp System.map > kernel.img

Формат kernel.img для rk2818

Устройства, реализованные на RK2818 можно условно разделить на два типа:

1. Работающие на частоте 600mhz и выше. Таких аппараты часто работают с SDK2-подобным форматом ядра (boot.img = zImage + initramfs-cpio)
2. Зажатые на ~300mhz (Archos 70b ereader, Bq Voltaire и масса китайских девайсов). Здесь используется свой собственный, скудно документированный формат.

Утилита mkkrnlimg подписывает несжатое ядро (arch/arm/boot/Image) специальным образом:
./mkkrnlimg arch/arm/boot/Image kernel.img.tmp

Ядро склеивается с таблицей адресов System.map
cat kernel.img.tmp System.map > kernel.img

При распаковке прошивки утилитой rkunpack (на AFPTool не сработает) видно следующее:


kernel.img-raw - несжатое ядро (т.е. файл arch/arm/boot/Image поcле компиляции)
kernel.img-symbol - таблица адресов (System.map поcле компиляции)

Результат работы утилиты mkkrnlimg:


dword 0x4C4E524B - маркер-идентификатор KRNL
dword 0x0045D2BC - размер ядра без таблицы адресов

Т.е. mkkrnlimg по функционалу идентична утилите rkcrc из комплекта rkutils, запускаемой с ключом "-k":
./rkcrc -k kernel.img-raw kernel.img-signed
cat kernel.img-signed kernel.img-symbol > kernel.img

При проверке такие ядра полноценно функционировали.

Ох щи...


А вот заставить Bq Voltaire работать на ядре, собранном из исходников мне не удалось. Пока получаю одни бутлупы. Использовал тулчейны arm-eabi-4.4.3, arm-eabi-4.4.0 и от codesourcery. Варьировал опции компиляции.

Непонятно зачем в архиве с исходниками тулза mkbootimg, склеивающая ядро с рамдиском. Формат ядра правильный и всяким ramdisk-boot там не место.

В темах англоязычных форумах уже как месяц молчание.
Скорее всего упускаю из вида что-то очевидное.
- ЧЯНТД?

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