Доброго вечера мои любители треша, ада и эмбеддеда. В прошлой серии триллера я рассказывал о первых впечатлениях от рокчиповской кухни. Теперь, пожалуй продолжу повествование большим количеством треша и ада. На данном этапе даже я уже не уверен, что у меня получится довести дело до конца.
Бут. Тут они без сомнения финалисты. С горем пополам, матом, экспериментами и болтовней в #rockchip-linux удалось понять, что мой пад грузит ядро из boot в андройдовском image формате, подписанным rkcrc. Дальше написание паковщика и скриптов для прошива было делом 5 минут.
Как и ожидалось, для нанда забубенен FTL, который превращает их нанд в блок девайс, и делает балансировку нагрузки. Но вместо написания отдельного кривого блочного устройства, как это сделали содомиты из sunxi, рокчиповцы пошли дальше - контузили немного mtd подсистему и впихнули wear-leveling в свой standalone mtd device и монтируют в итоге /dev/mtdblockX как ext4.
Что самое неприятное, их огороженный загрузчик, который они не дают даже своим клиентам под NDA в BSP работает поверх этого же самого FTL, потому выпилить его из ядра ради нормального ubifs чревато тем, что нельзя будет потом загрузиться.
Меня долго удивляло - зачем у них включен FIQ дебаггер на последовательном порту, а консолька висит на ttyFIQ0. Оказывается консоль на их драйвере последовательного порта не работает, потому это «официальный» (tm) способ подцепить консоль на уарте. Поздравляю, первое место в номинации костыль года.
В msdos_partition.c у них воткнут какой-то странный их дебаг, который радостно сообщает о том, что на карточке MBR таблица разделов. Страшно подумать зачем они это делали.
Много спагетти в arch/arm/mach-rk3188, нетривиально инклюдятся сырцы из arch/arm/mach-rk30 и arch/arm/mach-rk29. Ядро вообще минное поле. Один неправильный конфиг - и оно упадет не при компайл-тайме, так в рантайме.
Экранчик - честная ипадовская ретина, которая сидит через anx6345 преобразователь на их lcdc0 (или 1?) интерфейсе. Из anx6345 к экрану торчит DisplayPort.
В общем, пока взлетели (детектятся и загружаются дрова): акселерометр (gs_lis3dh), компас (ak8975), гироскоп (l3g4200d_gryo), USB и 3г модем (MT6229) на одном из внутренних портов, оба SDIO порта (в одном карта с дебианом whezy, в другом сидит wifi), rtc (rtc_hym8563), подсветка экрана (pwm выход на одной из ног рокчипа), тачскрин(ct36x), cpufreq степпинг, и ddr_freq степпинг (хотя частоты/напряжения надо будет докрутить немного, чтобы получить заявленные 1.8Ghz, сейчас потолок 1.6Ghz. Да и память тоже может работать быстрее явно)
Не взлетело: anx6345 (детектиться по i2c на стоке, на моем ядре по этому адресу отсутствует. WTF? Подозреваю надо хитро врубать питание) и соответственно LCD панелька.
Напряжение логики VCC_IO для LCDC (1,8 или 3,3 вольта) задается параметром Kconfig для каждого LCDC интерфейса. Дефолт в BSP - 3,3 вольта. (Не загружайте дефолт на других падах посоны, попалите панель!!!!)
Не дошли руки врубить/затестить: WiFi, BT, GPS, звук, mali, спящий режим
Скорее всего забью: HDMI (нафиг нужен). Соответственно дебиан уже стартанул, потихоньку привожу систему в порядок:
Debian GNU/Linux 7 arvale ttyFIQ0
arvale login: root
Password:
Linux arvale 3.0.36+ #28 SMP PREEMPT Thu Nov 21 22:37:06 MSK 2013 armv7l
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
root@arvale:~# uname -a
Linux arvale 3.0.36+ #28 SMP PREEMPT Thu Nov 21 22:37:06 MSK 2013 armv7l GNU/Linux
root@arvale:~# cat /proc/cpuinfo
Processor : ARMv7 Processor rev 0 (v7l)
processor : 0
BogoMIPS : 1631.46
processor : 1
BogoMIPS : 1631.46
processor : 2
BogoMIPS : 1631.46
processor : 3
BogoMIPS : 1631.46
Features : swp half thumb fastmult vfp edsp neon vfpv3
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x3
CPU part : 0xc09
CPU revision : 0
Hardware : PipoMaxM6
Revision : 0000
Serial : 0000000000000000
root@arvale:~#