Ночные оргии с RK2918 и Android OS.

для раздела Блоги

С чего бы начать. Вероятнее всего начать лучше с начала, так и сделаю. Год 2010й, лето, на сайте #shopname# одиноко лежит неремонтопригодный IconBit NETTAB PRIDE 8Gb с пометкой "не включается" аж за полторы тысячи рублей. Возможно так бы он там и лежал, если бы не его дисплей - большой, матовый с разрешением 1280 на 800 точек. Трупик незамедлительно был выкуплен и принесён домой для опытов. При нажатии на кнопку питания происходило ничего - экран не загорался, динамики молчали, амперметр лабораторного блока питания ничего не показывал ибо блок уходил в защиту. Родной литий-железный (вероятно) аккум был прикурен от 5ти вольт прямо от USB и оставлен в таком виде на три часа (необоснованная жестокость). Через три часа выяснилось, что при подключении аккумелятора к планшету он выдавал нехилую искру и нагревал до появления характерного запаха один из огромного множества преобразователей напряжения на плате. Преобразователь предназначался для OTG усб, поэтому был попросту оторван, тем не менее планшет не запустился (что странно учитывая то, что ну не нужно ему на плате нигде 5 вольт). Беглый осмотр трупонариума выявил mp3 ресивер с точно таким же преобразователем, откуда последний был незамедлительно снят. 
И так он ожил! ( it's alive! it's alive mua-ha-ha-ha-ha...) На этом бы всё и закончилось, если бы не мои кривые руки. Собирая планшет я что то коротнул отвёрткой и у пациента начал отваливаться Wi-Fi, периодически и бессимптомно. Однако он уже был прошит, напичкан программами и GTA3, да и вайфайка скорее работала нежели нет, в таком виде он был отдан отцу и похоронен в памяти. Позже Wi-Fi сдох, сэмпл (он одночиповый) мне слать отказались, а заказывать 10штук по очень выгодной цене я как то не захотел, в общем девайс долго эксплуатировался как есть. Ещё позже планшеты подешевели до неприличия и надобность в несчастном инвалиде отпала.
Сейчас. 2013й год, IconBit NETTAB PRID с мёртвым вайфаем, Androin 2.3 и ночь. Совершенно случайно был установлен CWM реакавери, до сих пор не понимаю как это вышло, далее убит андроид, долгие танцы с бубном, поиски прошивки в формате рекавери, попытки установить чужую, установить родную, отпаять флеш и войти в какой то магический бланк режим. Всё закончилось хорошо. Вот тут переходим к самой истории.
Замечательный иструмент RK29Kitchen. Сырой, глючный удобный и гибкий, но к сожалению требующий ос линукс был найден в ту безумную ночь. Ну просто нельзя было пройти мимо такой возможности. Сейчас я пишу эту заметку просто для того, что бы не забыть как всё это делалость:
1 Качаем образ кубунты. (12.04 в моём случе)
2 Ставим на компьютер или в вмварь.
3 Качаем RK29kitchen и кидаем в домашний каталог.
4 Идём в каталог src и делаем там sudo <путь> make&make install, материмся.
5 Качем зависмости и нужные пакеты 
sudo apt-get make libusb-1.0 libusb-1.0-devel libssl libssl-devel dialog sudo gcc cpio libssl-dev libppc-poln
понимаем что некоторых не существует, вычёркиваем, запускаем снова.
6 Идём в каталог src и делаем там sudo <путь> make&make install
7 Идём в каталог src и делаем там sudo <путь> update.sh
8 Идём в каталог src и делаем там sudo <путь> make&make install, радуемся.
Если есть файл с прошивкой пропускаем эти пункты и переходим к 12му. 12й пункт относится к запакованному образу прошивки, с дампом он не работает.
9 переводим зверька в flash-режим (зажимаем "power" и "-" ), подтыкаем усб, привыкаем к ощущениям, держать ещё долго.
10 переходим в рабочий каталог и делаем sudo <путь> flashdump.sh мужественно держим кнопки, размышляем о китайцах и о том почему бы не запаять их нафиг. (кнопки)
PS: не пугаемся, можно потыкать энтер свободными конечностями, если оно не пишет ошибку - оно работает. 
11 радуемся, обозреваем папку flashdump если нет пустых файлов всё ок, если есть... надо было лучше держать кнопки.
12 делаем sudo <путь> menu.sh материмся. sudo <путь> menu.sh <путь к прошивке> на самом деле.
13 выбираем пункт 2 Extract image files. Если всё сделано верно увидим файл с прошивкой. Выбираем, радуемся.


Что происходит вконсоли при сливе прошивки:


satins@satins:~$ sudo /home/satins/rk29/flashdump.sh

~/rk29 ~

~

Check that your tablet is in the firmware flash mode and connected to computer



rkflashtool: info: interface claimed

rkflashtool: info: reading flash memory at offset 0x00000100

unpacking...OK

Dumping misc (rkflashtool29 r 0x00002000 0x00002000 )

Dumping kernel (rkflashtool29 r 0x00004000 0x00004000 )

Dumping boot (rkflashtool29 r 0x00008000 0x00008000 )

Dumping recovery (rkflashtool29 r 0x00010000 0x00008000 )

Dumping backup (rkflashtool29 r 0x00018000 0x00078000 )

Dumping system (rkflashtool29 r 0x001cc000 0x00080000 )

satins@satins:~$


Процесс занимает до 20ти минут.


Что происходит при распаковке образа:
satins@satins:~/stock$ sudo /home/satins/rk29/menu.sh /home/satins/stock


Первое окно:

____________________________________________________________________

Work dir: /home/satins/stock/ Mode:*img file Parameter file:

────────────────────────────────────────────────────────────────────

┌──────────────────────────RK29xx toolkit────────────────────────────┐

│     Select command        

│ ┌─────────────────────────────────────────────────────────────┐ │

│ │ 1 Change work directory                                         

│ │ 2 Extract image files                                   

│ │ 3 Mount /system to Image/system            

│ │ 4 Umount /system from Image/system                          

│ │ 5 Check filesystem /system                                         

│ │ 6 Edit parameter file                      

│ │ 7 Resize system.img (/system partition)

│ │ 8 System apps 

│ │ 9 Modify build.prop 

│ │ 10 Make update.img image file 

│ │ 11 Make update.img image file v2 

│ │ 12 Flashing update to tablet                                          

│ │ 13 Exit                                              

│ └─────────────────────────────────────────────────────────────┘ │

├────────────────────────────────────────────────────────────────────┤

│ < OK > <Отмена>          

└────────────────────────────────────────────────────────────────────┘


 


Второе окно:


______________________________________________________________________

Work dir: /home/satins/stock/ Mode:*img file Parameter file:

──────────────────────────────────────────────────────────────────────

┌───────────────────────Extract image files──────────────────────────┐

│ Choose img file 

│ ┌────────────────────────────────────────────────────────────────┐ │

│ │ W15.img 

│ │ 

│ │ 

│ │ 

│ │ 

│ │ 

│ │ 

│ │ 

│ │ 

│ │ 

│ │ 

│ │ 

│ │

│ └────────────────────────────────────────────────────────────────┘ │

├────────────────────────────────────────────────────────────────────┤

│ < OK > <Отмена> 

└────────────────────────────────────────────────────────────────────┘



rom version: 0.2.3

build time: 2011-11-28 11:23:28

chip: 50

checking md5sum....OK

Check file...OK

------- UNPACK -------

package-file 0x00000800 0x0000021C

RK29xxLoader(L)_V2.06.bin 0x00001000 0x00021FDA

parameter 0x00023000 0x0000026E

Image/misc.img 0x00023800 0x0000C000

Image/boot.img 0x0002F800 0x00690000

Image/recovery.img 0x006BF800 0x00AE0000

Image/system.img 0x0119F800 0x0AC46C00

SELF 0x00000000 0x0BDE7804

Skip SELF file.

update-script 0x0BDE6800 0x000003A5

recover-script 0x0BDE7000 0x0000010A

UnPack OK!

writing boot image config in bootimg.cfg

extracting kernel in zImage

extracting ramdisk in initrd.img

writing boot image config in recovery.cfg

extracting kernel in recovery-zImage

extracting ramdisk in recovery-initrd.img

2267 блок

17053 блоков

Press Enter to continue...



Теперь в нашем распоряжении есть образа флеш памяти целиком и по отдельности всех разделов. В файле parameter можно посмотреть таблицы разделов. Имея на руках и установочный образ и планшет с рабочей прошивкой я естественно захотел сравнить дампы разделов и их образы из прошивки. В папке stock у меня находится распакованная стоковая прошивка в папке flashdump дамп флеша соответственно.
stock:


flashdump:




parametr - важный файл, без него нельзя собрать прошивку. В этом файле записаны адреса разделов.
boot.img - присутствует в обеих папках, rk29kitchen распаковал его в стоковой прошивке на ramdisk (boot.img) и ядро (zImage), но не смог проделать ту же операцию с его дампом. В дампе он как то вырезал ядро из boot.img и слепил из него kernel.img хотя известно, что у RK29 устройств ядро лежит в раздере boot.img. Перевожу на человеческий - boot.img из стоковой прошивки для последующей сборки не пригоден, но из дампа вполне себе живой.
kernel.img - ядро.
misc.img - хз, оба файла пустые, какой то пустой раздел.
recovery.img - рекавери собственно, ядро (такое же) и другой рамдиск.
system.img - системный раздел в ext4. Можно подмонтировать прямо в линуксе командой. 
sudo mount -o loop system.img /media/system
Редактировать образ раздела нельзя не из под линукса не из под виндовс (или я плохо искал) есдиственный вариант - скопировать все файлы и пересоздать образ. Далее можно поковыряться в системном разделе, поудалять системные программы, подобавлять свои, поредактировать файлы отвечающие за разметку флешки при установке. Добавить свои драйвера, сделать своё меню и т.п.


Это были общие файлы, теперь рассмотрим остальные: 
parm.img - образ раздела с единственным файлом parametr. Остальное забито FF. (в запакованом виде бесполезен)
backup.img - сам дамп, можно прошить в планшет. (если честно не пробовал, не рекомендую)
package-file - как я понял файл с описанием используемых разделов ( ядро там закомментировано) и нужных для сборки ядра файлов.
recover-script и update-script - вот тут я не разобрался, предполагалось что первый скрипт делает полную перепрошивку устройства, а второй предназначен для апдейта существующей прошивки, содержимое файлов этому противоречит, прочитайте их сами :) нужны оба.
RK29xxLoader(L)_V2.06.bin - загрузчик вестимо. В интернетах уже лежит версия RK29xxLoader(L)_V2.26.bin


Для обратной сборки нам нужный файлы recover-script, update-script, RK29xxLoader(L)_V2.06.bin, package-file, parametr и папка Image, в которой должны быть: boot.img, misc.img, system.img, recovery.img.
Обратную сборку и прошивку я решил не описывать и даже стереть части по расковыриванию образов по нескольким причинам - это сложно, это долго, это бесполезно. Если интересно можете почитать тут, человек проделал всё то же самое, что и я и даже больше и даже на год раньше)) жаль я не нашёл эту статью с самого начала. Ещё один повод распрощаться с RK29kitchen это найденный набор инструментов RKwinTools_v132, работает эта штука идеально и без проблем. В описании не нуждается, всё есть в readme.
PS: инструкция для тех кто не хочет ждать - яндекс маркет - ищем устройства на rk2918 на андроиде 4.0 (их ровно 4ре, считал по аппарантым платформам не по названиям) скачиваем их прошивки, выковыриваем zImage и пытаемся прилепить к родной, у меня два ядра запустились НО там другое управление дисплеем =\ 
 
Лирическое отступление.
Изначально, девайс ковырялся с целью установить на него полноценный линукс, но я слишком увлёкся изучением андроида, сейчас бедное устройство переживает по 30-40 перепрошивок в сутки. Как только получится более-менее стабильный результат, я об этом напишу :) Но полноценный линукс отодвинулся на второй план =\
Опубликовано потому что нельзя кинуть ссылку на черновик. Не дописано. Да, как всегда. Будет удалено, не плюсовать и особенно не минусовать. Отпуск закончился, потому статью перепишу в необозримом будущем :)
 
пакеты для сборки пакетов для сборки фигни собирающей ядро...


sudo apt-get install libmpc-dev gcc make

Make the temp directory to build in

mkdir toolchain

cd toolchain

wget -c ftp://sources.redhat.com/pub/newlib/newlib-1.19.0.tar.gz

wget -c http://ftp.gnu.org/gnu/gdb/gdb-7.2.tar.gz

wget -c http://ftp.gnu.org/gnu/binutils/binutils-2.21.tar.bz2

wget -c http://ftp.gnu.org/gnu/gcc/gcc-4.6.0/gcc-core-4.6.0.tar.bz2

wget -c http://ftp.gnu.org/gnu/gcc/gcc-4.6.0/gcc-g++-4.6.0.tar.bz2


некоторые мёртвые, их легко найти


tar -xvf binutils-2.21.tar.bz2

tar -xvf gcc-core-4.6.0.tar.bz2

tar -xvf newlib-1.19.0.tar.gz

tar -xvf gdb-7.2.tar.gz

tar -xvf gcc-g++-4.6.0.tar.bz2

export target=arm-eabi

export prefix=/usr/local/$target

export PATH=$prefix/bin:$PATH

sodo mkdir -p $prefix/bin



собираем binutils
cd binutils-2.21

mkdir build-$target

cd build-$target

../configure --target=$target --prefix=$prefix\ --enable-interwork --enable-multilib --disable-werror

make  ( идём пить чай )

sudo make install



собираем временный gcc что бы с ним собрать другую либу.

cd ../../gcc-4.6.0

mkdir build-$target

cd build-$target

../configure --target=$target --prefix=$prefix \

--enable-languages=c,c++ --enable-interwork \

--enable-multilib --with-dwarf2 --with-newlib \

--with-headers=../../newlib-1.19.0/newlib/libc/include

make all-gcc ( чайку? )

sudo make install-gcc



собираем newlib

cd ../../newlib-1.19.0

mkdir build-$target

cd build-$target

../configure --target=$target --prefix=$prefix --enable-interwork --enable-multilib

make

sudo make install



собираем gcc

cd ../../gcc-4.6.0/build-$target

make

sudo make install



собираем gdb

cd ../../gdb-7.2

mkdir build-$target

cd build-$target

../configure --target=$target --prefix=$prefix

make

sudo make install
 
Подпишитесь на наш канал в Яндекс.Дзен или telegram-канал @overclockers_news - это удобные способы следить за новыми материалами на сайте. С картинками, расширенными описаниями и без рекламы.
Оценитe материал
рейтинг: 1.0 из 5
голосов: 2

Возможно вас заинтересует

Популярные новости

Сейчас обсуждают