Ночные оргии с 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
реклама
Теги
Лента материалов
Соблюдение Правил конференции строго обязательно!
Флуд, флейм и оффтоп преследуются по всей строгости закона!
Комментарии, содержащие оскорбления, нецензурные выражения (в т.ч. замаскированный мат), экстремистские высказывания, рекламу и спам, удаляются независимо от содержимого, а к их авторам могут применяться меры вплоть до запрета написания комментариев и, в случае написания комментария через социальные сети, жалобы в администрацию данной сети.
Сейчас обсуждают