Pandaboard

written on Saturday, January 5, 2013

Меня нашла очередная работа, на этот раз связанная с встроенными линуксами. Выдали казенный пандаборд и еще мешок оборудования - пару дней сидел и сетапил это барахло.

Традиционно сетапил без консоли, поэтому POEL и заесетапился.

Железка

По функционалу железка радует и чем-то похожа на тримслайс, теоретически может юзаться заместо десктопа - Ethernet, HDMI выход, USB хост для клавиатуры и флешек, набортный WiFI и все такое. Ну и консоль торчит конечно же, для которой у меня нет кабеля и адаптера тоже нет, хотя я думал, что есть. В отличии от тримслайса, тут есть выход для звука, значит можно эту штуку юзать как базу для музыкальной коробочки с каким-нибудь человеческим аналогом mpd. Конечно же есть аппаратне декодер видла и всякие моднявые OpenGL ES.

А теперь начинается угар и трэш, потомучто это непорядок же, когда у людей все хорошо! Сюрприз первый - у железки нету системного флеша, куда можно насетапить свои убунты и срачлинупсармы. Совсем нету. Поэтому систему ставим на SD-карточку, которая конечно же медленная и которая вставляется SD-слот, который один. Ой. В определенном смысле это конечно хорошо - запоротый рут можно подключить к большой машине и там починить, благо что все кроме макоеб умеют EXT4.

Для забавников с паяльником есть опция: поставит на какие-то две ноги резистр на хренадцать килоом и система будет бутиться с USB. Точнее с USB будет бутится ядро и инитрд, а куда мы систему засунем - это в коммандлайне ядра написано и никакой резистор-связистор нам не указ.

Сюрприз номер два: RTC нету тожы, потомучто нету батарейки на плате. Вытащил питалаво, включил обратно - все, бегом в интернеты за священным огнем мирного атома в часах точного времени. Я неодобряю такие архитектурные решения.

Софт

Ну вы же поняли, да? Ну таки да, софт тут совсем да. Система не выглядит, как тихоокенский атолл после испытания ядерной бомбы, как это было на моторолах, но все равно напряг есть. Если прослеживать по тем устройствам, до которых я дотягивался за последние, сколько ж их было, лет, то ситуация стабильно улучшается. Такими темпами все кривомуды, вроде моторолы, наконецто сдохнут и интеграция линупса будет делаться совсем уж руками.

Можно взять обыкновенно-деревянный арчлинуксарм, разбить карту памяти на два раздела - ядро и initrd на первом и рутфс на втором. Ядро, initrd и коммандлайн пакуются стандартным убутовским утилитом, который есть в диструбутива, а не мутными скриптами на перле. Вообще на удивление мало магии.

Ядро ставится относительно свежее - после апдейта приезжает 3.6 прям из репозитария со всякими омапо-патчами.

Wifi

Вайфай - это такая технология, для которой характерно вываливать нахер и не работать на всех аппаратных и програмных платформах. Ни одной системы, где бы вайфай не вешался и не вылетал, я еще не видел. В том тарболе, которые раздают на archlinuxarm.org, wifi типа как есть, но реально не работает. Интерфейс есть, сканит нормально, но при подключении - разнообразные вылетания, от таймаутов и срача в логах до ухода вайфайного чипа в панику с последующим срачем в логах. После апдейта до 3.6 оно чинится, но это как-то подло, ящитаю.

Консоль

Все было бы вообще прекрасно, если бы у меня была консоль. Ну или хотябы монитор с клавиатурой, но я же бомж-турист на пиратском острове, откуда у меня. Специально для таких лохов в линуксе есть сетевой интерфейс поверх usb соединения. Из rc.local Прогрузил g_ether на железке, ойпи проставил и все - можно ходить по ssh. Это конечно у нормальных людей из приличного общества, где есть ssh и стандартные пароли.

Убунту же делаеют странные поцанчики, поэтому там ssh по-дефолту не поднят и вообще не установлен. И сама система бутится в oem-config, чтобы в нее тыкать пальчиком.

Хардварные кодеки

Чтобы заюзать хардварные кодеки, надо накатить апдейты из отдельного репозитария с омапо-специфичными пакетами. Я вообще ожидал увидеть OMX, даже нагуглил какую-то херню, но OMX - мертвая технология, поэтому посоны просто написали плагин для gst. GST - это конечно тот еще рассадник добра, луны и справедливости, но его юзают жывые проекты и там все рабочее.

С хардварными кодеками не все так просто, как хотелось бы. Кроме плагина для гстримера, происходит куча всякой другой порнографии. Начать надо с того, что сам гстример тоже патченый, насколько я понял, на предмет шаринга буферов между компонентами. И пакет с бейз-плагинами тоже патченый.

Сам плагин (gst-ducati) зависит от либы libdce (distributed codecs engine), которая зависит от какого-то плагина к libdrm. При чем тут libdrm я не совсем уловил, но видимо это удобный способ работать с замапленными чертикуда буферами, причем работать как через иксы, так и мимо них. Для сборки каких-то кусков из этого набора, конечно же нужны ядерные хедеры. От всего этого на ланчпаде есть сорцы и пакетированные под убунту бинарники.

Кроме юзерспейсового плагина конечно же есть ядерная часть и там тоже не все настолько просто, как хотелось бы. В ядре есть модуль omapdrm, который пока еще живет в staging каталоге, что намекает. В арчлинуксовом бинарнике ядра он выключен в конфиге. Кроме этого модуля еще есть omapdrm_pvr, то есть специфичный для видеокарты PowerVR SGX. Сама видеокарта меня не интересует соверщенно, но drm нужен. У этого модуля какой-то очень стремный пакет с укуренными мейкфайлами, которые зачем-то вызывают dos2unix и занимаются другими сомнительными вещами и который почему-то пакетируется через DKMS, а не нормально. Насколько я догадываюсь, там бинарные блобы в умеренном количетсве.

На модуле omapdrm_pvr народное творчество не заканчивается. Я даже несколько сомневаюсь, нужен ли он для работы кодеков, но проверить пока не получилось. Общение с сопроцоессором (ipu) идет через еще rmsg, которого в официальном дереве ядра еще нет, а в арчлинуксовое он в виде патча не утащен. По некоторым признакам я догадываюсь, что remotemsg - это такой generic механизм, который используется не только омаповским драйвером, а еще и механизмом virtio для общения паравиртуализированных драйверов с хостовым ядром. Это немного внезапно, но вобщемто логично. Надо проверить, насколько правильно я догадался. Сами модули не грузятся автоматически, поэтому для них в /etc/init кладется специальный таск, с циклом modprobe.

Но на этом опять же не все. Эти ядерные драйвера еще и ждут какого-то особого пинка от udev. Что самое смешное, в самой убунте этот пинок приходит только в случае загрузки с initrd. Без initrd эти драйвера почему-то не дожидаются подключения к ним удева и ругаются на таймаут. Хардварное укорение при этом отваливается с достаточно мутным сообщением от юзерспейсового libdrm.

Когда хардварные кодеки работают, они работают весьма ок. High profile декодитя только в путь, а енкодер успевает фигачить почти в риалтайме, когда софтовый не успевает вообще никак.

Todo

Пост про g_serial, g_ether Пост с конкретикой про кодеки (логи ошибок, замеры циферок, пакеты, драйвера)

This entry was tagged hardware and panda