вторник, 18 марта 2014 г.

Мюллер

Как только где-нибудь вместо слова "здравствуйте" произнесут "хайль" в чей-то персональный адрес - знайте, там нас ждут, оттуда мы начнем свое великое возрождение!

Spaceballs

- Приготовиться к движению!
- Что вы всё время "готовитесь"? Поехали!

воскресенье, 23 февраля 2014 г.

Его даже сравнили пару раз с Жириновским. Степе это было приятно — Жириновский был единственным русским политиком, которого он уважал. Дело было не в политической платформе (про это в хорошем обществе не говорят), а в его высоком артистизме: разница между ним и остальными была такая же, как между актрисами-одногодками, одна из которых все еще пытается петь, а другие, уже не скрываясь, живут проституцией.

вторник, 21 января 2014 г.

RK30xx Kernel

На прошлой неделе при мистической помощи коллеги удалось сдвинуть работы с ядром с мертвой точки:
  • Собрать рабочее ядро 3.0.36+. Правда андроид под ним жил крайне недолго, но в консоли уже стало видно, что ядро работает.
  • В общих чертах понять, что мешает плодотворной совместной работе ядра и андроида. Теперь андроид грузится и работает стабильно, но некоторые изъяны пока остаются.
 Сделали git-репозиторий, чтобы не терять "больного" и паралельно учитывать историю изменений. Код, посвященный rockchip-компонентам крайне крив и присутствует крайне местами. Приходится его собирать по кускам с разных мест.

среда, 30 октября 2013 г.

RK3066 TV box. Ядро и модули.

Поскольку ядро целиком не заработало, решил необходимые мне куски (HDMI Sound) собрать модулями. Повозиться пришлось - сначала системе не нравился version magic, а ключика -f в андроидном insmod нетути. Это победилось довольно легко, но далее модуль выдал ошибку:
ismod:  unknown relocation: 27
Что в свою очередь вылечилось дописыванием флагов компиляции:
CFLAGS_MODULE=-fno-pic
После этих манипуляций модули встраиваются нормально:
shell@android:/ # lsmod
...
snd_soc_rockchip_hdmi 1483 0 - Live 0x00000000
snd_soc_hdmi 1798 0 - Live 0x00000000
...
Правда, дополнительные аудиоустройства в SounDeviceManager так и не увиделись.

среда, 23 октября 2013 г.

RK3066 TV box. boot.img

Проверив в самом начале разборку-сборку boot.img, я как-то упустил из виду то, каким конкретно mkbootimg я это делал. И очень зря - для rk30xx он очень свой - умеет поддерживать pagesize в 16К и по дефолту использует именно этот размер. Любые другие варианты приводили к тому, что после прошивки образа при загрузке ядра и рамдиска вылазило сообщение "Load Failed" и коробка попадала в рекавери-мод.
Тут лежит правильный, для linux x86_64
Теперь самосборное ядро начало грузиться. Правда пока получаю облом и bootloop в самом начале:
[    0.613863] Unable to handle kernel NULL pointer dereference at virtual address 00000019
[    0.621946] pgd = c0404000
[    0.624649] [00000019] *pgd=00000000
[    0.628233] Internal error: Oops: 5 [#1] PREEMPT SMP
[    0.633195] CPU: 0    Not tainted  (3.0.8+ #1)
[    0.637645] PC is at regulator_set_voltage+0x8/0xf8
[    0.642523] LR is at tps65910_post_init+0x418/0x4f8
[    0.647399] pc : []    lr : []    psr: 60000013
Это на ядре от Debian, а следующее - на ядре от mk808:
[    1.390746] Unable to handle kernel paging request at virtual address f700f000
[    1.656040] pgd = c0404000
[    1.658745] [f700f000] *pgd=8fc2c811, *pte=00000000, *ppte=00000000
[    1.665054] Internal error: Oops: 807 [#1] PREEMPT SMP
[    1.670191] CPU: 0    Not tainted  (3.0.36+ #3)
[    1.674731] PC is at cfb_imageblit+0x128/0x4e8
[    1.679172] LR is at fb_show_logo+0x304/0x880
[    1.683525] pc : []    lr : []    psr: 60000013
  

понедельник, 21 октября 2013 г.

Windows 8.1 отсутствует в Store

По этой проблеме нашел на просторах инета решение:

Для тех у кого не появился пункт установки обновления 8.1. Попробуйте выполнить следующие пункты:
1. Закройте полностью Магазин (Завершите в процессах).
2. Откройте диалог Выполнить (Win+R)
3. В поле введите WSReset.exe и выполните (ОК).
4. Выполните перезагрузку.
5. Попробуйте снова отктрыть Магазин и найти обновление.

Все сработало, п.4 - важен.

вторник, 15 октября 2013 г.

Лирика

олег за всё берётся смело
всё превращается в говно
а если за говно берётся
то просто тратит меньше сил
yapavlik

урок труда антон без входа
скворечник дятлу сколотил
пробьётся сам сказал и мельком
взглянул на дарвина портрет
the axy

RK3066 TV box. Тонкости прошивки update.img

Во время работ по "подпиливанию" прошивок для устройства столкнулся с небольшой проблемой: после каких-то определеннйх изменений очередной подготовленный update.img воспринимался девайсом "в штыки", со словами
 
Invalid firmware image!
Found a invalid firmware image file '/sdcard/update.img'.
Would you like to delete it?

Yes/No
 
В тоже время тот же образ легко прошивался в recovery-mode, т.е. образ был вполне пригоден. Начал вспоминать, что менял. А менял довольно многое. Подумалось, что здесь играют роль какие-то свойства самой прошивки, а не того, что у нее внутри. Поискал в интернете. Русскоязычный - порадовал богатством ответов типа "а вас предупреждали, что шится на кастом можно только через USB" или что-то типа того, вплоть до перехода на личности (а что делать мне, если нету у меня в девайсе USB OTG!?), но ни одного толкового, в котором бы упоминалось почему это происходит. Впрочем, это не удивительно - основная масса отечественных "клепателей прошивок" не любят читать мануалы, а те немногие, которые их читают - не спешат раскрывать свои знания. Что вполне логично.
Вцелом, было стойкое подозрение, что данная проблема как-то связана с несоответствием пропертей загруженного андроида и прошивки. В прошивку вкладывается файл parameter, в котором, среди прочего есть параметры

MACHINE_MODEL
MANUFACTURER

Был предпринят "grep -i model system/build.prop" и "grep -i manufacturer system/build.prop", первый выдал результат. Для пущести, гуглу был дан новый запрос, с указанием MACHINE_MODEL, который подтвердил мои подозрения:

rockchip's recovery program compares model name in update.img(machine_model in HWDEF) and running system(ro.product.model). if they are different, you'll get error.
отсюда.

Проверил - всё именно так: если параметр "ro.product.model" совпадает с MACHINE_MODEL из parameter, указанных при сборке имиджа - прошивка не считается инвалидной.

понедельник, 30 сентября 2013 г.

RK3066 TV box. Работы продолжаются.

С утра сделал boot-анимацию (как это делается описано во многих источниках, поэтому не стану распространяться), пересобрал system.img, потом всю прошивку. Залил полученное в коробочку и получил неприятность - коробка загрузилась, показала анимацию и так на ней и застряла. Пришлось изучать вопрос - каким образом её перешить. Замечу, что коробка без USB-OTG, т.е. к компьютеру её не подключить. Кнопок на ней тоже нет. Разобрал, рассмотрел. Нашел отверстия для запайки кнопочки "RES". Поскольку при замыкании оных перезагрузки не произошло, предположил, что это у нас "Restore". Отключил питание, замкнул контакты, включил питание, подождал секунд пять - разомкнул контакты. Счастье есть - попал в restore mode. Там среди прочего есть "erase/wipe" и "rkflash ...". Еще раз всё перепроверил, подправил boot-анимацию (частоту кадров в первом случае поставил низковатую), собрал новый образ, залил на SD-карточку, прошил - коробка ожила. По некоторым непроверенным данным коробка могла "ожить" уже после "erase/wipe".
Где-то недавно видел сентенцию - "опыт - это то, что получаешь, когда не получаешь то, что хочешь". Склонен согласиться. Могу добавить только, что после получения опыта сильно возрастает вероятность получить то, что хочешь. Теперь можно не особо опасаясь пробовать кастомайзить ядро и сам android.
Ну и немного о том, как работать с system.img. Как я говорил в прошлом посте, system.img - в данном случае - это файл, содержащий в себе файловую систему ext3. Сначала монтируем систему и вытаскиваем из нее содержимое:

mkdir system
sudo mount -o loop system.img system
mkdir -p out/system
cp -R --preserve=all system/* out/system/
sudo umount system
mv system.img system-orig.img
Далее производим нужные пассы, после чего запаковываем out/system. Скриптик запаковки выдрал из тулзов сборки ядра для rk30xx:
#!/bin/bash

SYS=$1
OUT="system.img"

if [ -d "$SYS" ]
then
        # Main calculation
        delta=5120
        num_blocks=`du -sk $SYS | tail -n1 | awk '{print $1;}'`
        num_blocks=$(($num_blocks + $delta))
        num_inodes=`find $SYS | wc -l`
        num_inodes=$(($num_inodes + 500))
        ok=0

        echo "Blocks=$num_blocks, inodes=$num_inodes"
        while [ "$ok" = "0" ]
        do
                genext2fs -a -d $SYS -b $num_blocks \
                        -N $num_inodes -m 0 $OUT \
                        2>&1 >/dev/null \
                && \
                tune2fs -j -L system -c -1 -i 0 \
                        $OUT 2>&1>/dev/null \
                && \
                        ok=1 || num_blocks=$(($num_blocks + $delta))
        done
        echo "Recalculate blocks=$num_blocks"
        e2fsck -fy $OUT 2>&1>/dev/null || true

        delta=1024
        num_blocks=`resize2fs -P $OUT 2>&1 \
                | tail -n1 | awk '{print $7;}'`
        rm -f $OUT
        echo "Dirty run end, now building image..."
        ok=0
        while [ "$ok" = "0" ]
        do
                genext2fs -a -d $SYS -b $num_blocks \
                        -N $num_inodes -m 0 \
                        $OUT 2>&1>/dev/null \
                && \
                tune2fs -j -L system -c -1 -i 0 \
                        -O "dir_index,filetype,sparse_super" \
                        $OUT 2>&1>/dev/null \
                && \
                        ok=1 || num_blocks=$(($num_blocks + $delta))
        done
        e2fsck -fyD $OUT 2>&1>/dev/null || true
        echo "Done."

else
        echo "System directory $SYS not found"
        exit 0
fi

Выпольнять скрипт надо из под sudo. Результатом будет новый файл system.img, который надо поместить в Images, для последующей сборки прошивки.