Как я на A20 Debian ставил

Купил я себе вот такую плату. A20, гиг оперативки, 4 гб nand, и куча периферии. Тот же кубиборд, но с русским разрабом и не надо ждать месяц с али.
Лично для меня плюсами данной борды было:

  • На обратной стороне стоит sata-разьем — можно прицеплять hdd без вороха проводов. Очень важно, потому что немножко префекционист и не люблю, когда провода занимают объем больший, чем сама плата.
  • На плате разведено аж два lvds. То есть берем любую матрицу от ноута, отрезаем мелкий разъем, ставим на его место BLD2×15 и все. Если там не провод, а шлейф, то на али можно купить готовый провод за пару долларов. Китайские ноутбучные матрицы стоят копье по сравнению с готовыми экранами тех же разрешений и размеров.
  • Почти все разъемы идут по одному краю платы. Вот никогда не понимал, что движет разработчиком платы в тот момент, когда он ставит разьемы по всем четырем сторонам? Первая малина яркий тому пример. Зачем? Корпус нормальный не сделаешь, на столе занимает места раз в 6–9 больше, чем сама размером, если куда вставить — надо выпаивать все эти разъемы…


Но есть у платы и небольшой минус. Плата новая и разраб сделал под нее только buildroot c QT. А некоторым этого мало… Мне хотелось полноценную систему, как на десктопе. Зачем? Об этом и статья.
Так получилось, что у меня в руках оказалась матрица от ноутбука и старый Wacom Bamboo с оторванным проводом. Ваком был разобран с целью изучения принципов работы, на глаза попалась матрица от ноута… Совпадение ли, но в металлической рамке матрицы было прямоугольное отверстие, идеально подходящее для установки туда платы от вакома. Что я, собственно, и сделал, приклеив плату от вакома туда на двусторонний скотч. Допаял провод, проверил — работает также хорошо, как в родном корпусе. А тут курьер привез заказанную плату на А20 и все заверте…

Подробности аппаратного устройства сего девайса опущу, там ничего интересного особо нет. Питание от 12в 2А, дальше токовый датчик ACS712, потом два DC-DC, один на 5В (питание подсветки и платы), другой на 3.3В — на последнем висит питание матрицы (~0.3А) и будет висеть MSP430 от ланчпада, дабы не вешать на основную плату датчики, светодиоды и кнопки. Все это приклеено двусторонним скотчем на металлическую рамку экрана.

deef8d0bbce7422f8381933c2654b0d6.jpg

Итак, железо собрано в кучу, склеено скотчем, спаяно, где надо, поставлены разъемы… Неплохо бы и софт найти. А софта нет…
В комплекте с платой идет билдрут, и, в принципе, потребности большинства он покрывает: коди, QT, три вида торрент-клиентов, и все прочее. Только вот как на нем использовать ваком, который я приделал к матрице? Никак, и потому были начаты поиски другого дистрибутива.

Первым и очевидным решением был кубиан, дебиан для кубиборда. Но проект оказался заброшен, на раздачах никого, и качать черти-откуда не хотелось.
3949f3bb2b6fa55cc01d2d6f813a3f9a.png

Оказалось, что дебиан уже имеет репу с armhf пакетами и систему можно взять оттуда, немножко пошаманив.
Итак, достаем бубен…

1. Скачиваем образ для сетевой установки с офсайта на компьютер. Улыбаемся, потому что образ для арма упакован в ISO, где логика — не знаю. Любым способом распаковываем данный образ. Нас из всего образа интересует один файл: ./install/network-console/initrd.gz

2. Ставим конвертер для initrd, ибо uboot разборчив в форматах.

apt-get install u-boot-tools


Распаковываем initrd.gz в просто initrd, последний распаковываем совсем. Архивы удаляем, они не нужны.

3. Собираем buildroot по инструкции к плате, там все очень несложно. Параметры любые, однако в сборку обязательно должны войти драйвера mali (mali.ko, ump.ko) и прочие драйвера для чипа, иначе ничего не выйдет. В ядре обязательно должна стоять галка на CONFIG_FHANDLE=y, проще поправить сам .config, чем искать в menuconfig.

4. Когда билдрут собран, то берем из него папку /lib/modules/<версия>/ и копируем по тому же адресу в папку, полученную после распаковки initrd от дебиана. Собираем initrd назад:

find . | cpio -o > ../initrd

5. Полученный initrd прогоняем через конвертер, чтобы uboot образ принял:

mkimage -A arm -O linux -T ramdisk -C none -a 0 -e 0 -n uInitrd -d ./initrd ./uInitrd


Кладем полученный uInitrd в папку /boot загрузочной флешки с подготовленным билдрутом.

6. Подготовленную флешку ставим в плату, ставим hdd, подключаем дисплей и все остальное оборудование, включаем питание и сразу же ловим консоль uboot. Она ожидает нажатия любой клавиши 3 секунды на старте. Дальше делаем следующее:

ext2load mmc0 0 0x43000000 /boot/script.bin
ext2load mmc0 0 0x41000000 /boot/uImage    
ext2load mmc0 0 0x50000000 /boot/uInitrd
bootm 0x41000000 0x50000000


Параметры ядра сейчас нас не интересуют, и они могут быть любыми, какие нравятся. Адреса загрузки взяты с офвики sunxi.

7. Если все сделано верно, попадаем в установщик debian-a. Ура! Половина дела сделана! Ставим все как обычно, можно даже kde поставить. Систему ставим на hdd, но не в mmcblk0, она нам будет еще нужна! Установка идет долго, около часа. Ах, да, система заметит установку через ttyUSB0 и предложит сделать это более удобно, через ssh — соглашаемся, это и правда удобнее. Также предупреждаю, что если разбивка диска будет не по-умолчанию, то и в дальнейшем тексте будут поправки.

8. После установки перезагружаем систему, uboot веточкой не тыкаем, и попадаем в ранее подготовленный buildroot. Оттуда заходим в /media/usb0 (она же /boot/ в дебиане) и удаляем оттуда все, кроме initrd, последний перепаковываем, как это уже делали ранее в п.1,4,5. Копируем ядро и скрипт из билдрута в эту папку.

9. Заходим в /media/usb1/lib/modules/ (она же /lib/modules/ в дебиане) и кладем туда модули, как делали в п.4. Старую папку модулей можно удалить.

10. Перезагружаемся, ловим консоль убута, вводим:

setenv bootargs 'root=/dev/sda2 rootwait consoleblank=0 console=ttyS0,115200'
scsi scan
ext2load scsi0 0 0x43000000 /script.bin 
ext2load scsi0 0 0x41000000 /uImage
ext2load scsi0 0 0x50000000 /uInitrd
bootm 0x41000000 0x50000000


Для того, чтобы не грузить каждый раз ручками, стоит прописать сценарий загрузки в переменную uboot. Я сделал это весьма топорно, потому не показываю, смотрим ман uboot и делаем это правильно.

11. Если все пошло как надо, и не забыли CONFIG_FHANDLE=y в ядре, то увидим запуск системы в консоли и картинку на экране. Но радость быстро уйдет — оно жутко тормозит. И вот почему…

12. Надо собрать драйвер для X, как это сделать написано тут, не вижу смысла дублировать. Драйвер собирается без ошибок с первого раза, правда, чтобы его собрать, надо вытянуть около сотни devel-пакетов. После установки из консоли делаем:

killall Xorg


И радуемся, что окошки тормозить полностью перестали. Отзывчивость системы будет на уровне какого-нибудь eeepc первых серий, то есть вполне юзабельно.

13. Теперь трогаем пером экран и понимаем, что выходит фигня. Курсор живет своей жизнью, и его надо калибровать. Методом тыка нашел вот такие числа:

xsetwacom --set "" area -8700 -4100 22400 13500


С этими магическими числами курсор стоит точно под пером. Дальше правим в гимпе степень давления на перо в сторону уменьшения, дабы не так сильно царапать экран. Планшет отлично закрывает рабочую область в гимпе.

f6ea0e2343054b30b1c2a864070560d8.jpg

14. Корпус. Этот момент опустим, так как с кадами не дружу и посчитать даже простую коробку сильно сложно. Но можно, есть люди, которые помогут сообразить хороший корпус из листового алюминия. В корпусе будет 3+1 USB, порт логического анализатора (с али за $20), примитивный осциллограф из звуковухи, десяток кнопок, и, может быть, lipo-батарея. Выйдет довольно неплохое многофункциональное устройство.

P.S. Если честно, был поражен производительности этого самого А20: гимп со включенным сглаживанием линии не тормозит при рисовании, офис открывается также быстро, как на нетбуке, то есть получилась довольно неплохая система. Видео, скорее всего, играть не будет, потому что драйверов для аппаратных кодеков нет, но эта проблема пока мало волнует.

© Geektimes