воскресенье, 23 марта 2014 г.

CubieTruck - недо-NAS и пере-Arduino. Часть первая.


Cubietruck — третье поколение плат для разработчика от наших китайских братьев. Размерами она примерно вдвое больше предшественников (8х11см — с пару сигаретных пачек), зато имеет "на борту" 2Гб памяти и VGA разъём. Выведенных GPIO контактов, конечно, гораздо меньше (54 против 96 у предыдущей версии), зато есть 8Гб NAND флеша, гигабитная сетевая карта и комбинированный Wifi+Bluetooth 4 чип с разведённой по плате антенной.

Посчитав расходы на электричество для NAS (Synology DS411), я решил попробовать заменить его и ноутбук, используемый для чтения почты ;) на этого малыша. Заодно избавиться от шума вентиляторов ИБП и NAS.


 Установка и настройка.

Что нам потребуется:
  • Собственно, сам Кубик. Мой был с чипом ревизии "В". Это следует учитывать, потому как кое-что в этой ревизии, говорят, не работает. 
  • Micro SD карта на 4Гб 
  • Адаптер USB-RS232(TTL) 
  • Блок питания USB 5В, 1А для начала (потом заменим на 5+12) 
  • Монитор с VGA или HDMI входом 
  • Компьютер с Linux+VirtualBox или отдельной Windows (пригодится для восстановления)
  • В качестве дополнительных запчастей будут использованы:
    • Блок питания с батарейным резервированием Mean Well ADS-5512 с аккумулятором на 7А•ч
    • 2Tb HDD 3.5" (WD Caviar Green WD20EARS)
    • USB-Hub порта на 4 с внешним питанием (благо +5В у нас навалом)
    • Пара кусков стеклотекстолита в качестве прослойки и платы для подключения к выводам Cubietruck
    • Передатчик NRF24L01 для сбора метео-данных и возможного дальнейшего "поумнения" дома

Первый запуск.

Подключаем монитор, клавиатуру, мышь и поставляемый в комплекте шнурок питания. Включаем и, через несколько секунд, любуемся несколько чудны́м, но местами узнаваемым интрефейсом Android. Cubietruck приходит с предустановленной версией 4.2.2. Ходят упорные слухи, что по-умолчанию, изображение выводится на HDMI выход и, подключив VGA, мы можем очень долго пялиться в черный экран. Отвечу традиционно — у меня заработало ©.

Замечательно. Можно уже установить и начать играться в бешеных птиц™, но наша задача — вернуть обществу полноценного чел… использовать эту мелюзгу в качестве простенького NAS-а, а заодно — как замену ноутбуку/компьютеру в простых ежедневных задачах типа чтения почты, просмотра кина́ и сидения во вконтактике. А поскольку у меня NAS занимается ещё и всякой мелкой домашней автоматизацией, а у Кубика целая куча свободных выводов (тоже бяка — гребёнка с шагом 2мм — хрен найдёшь в магазинах ответную часть на них), то переложу-ка я и эту работу на него.

Планы. Планы. Планы.

Итак, чего же хочется в итоге:
  1. Получить более-менее привычное окружение для простых повседневных задач. Это означает
    • Debian-based linux
    • Видео, звук, книго-читалка
    • Офис, если повезёт — Libre
    • Минимальное окружение для программирования (gcc, python, avr-gcc, avrdude). В идеале хотелось бы wine, но тут уже архитектура не позволит :(
  2. Файлопомойка
  3. Книжная библиотека с выкачивалкой обновлений СамИздат-а
  4. Обслуживание метео-датчиков посредством NRF24L01, отправка данных на narodmon.ru.
  5. Управление через ИК пульт (ибо приёмник в комплекте — надо брать!©)
  6. Ну и прочее управление чем-то — выводов-то как бы не три десятка доступных

Устанавливаем Linux.

Cubietruck может загружаться с трёх носителей (и в такой последовательнсти):
  1. CF Card.
  2. NAND Flash.
  3. SATA HDD.
Для начала экспериментов будем использовать micro-SD карточку — проще. После нескольких попыток заработал дистрибутив под простым и очевидным названием Cubian, поэтому дальнейшее повествование будет основано именно на нём. В desktop версии мне что-то не понравилось, поэтому решено было установить простую "серверную" и уже её доводить до ума.

Создаём загрузочную флешку.

  1. Качаем и распаковываем "text-mode" образ для нашей платы с cubian.org:
    $ wget http://ubuntuone.com/6DsamiUUY8Z75gvwunC91w
    
    $ 7z x Cubian-base-r5-a20.img.7z
  2. Определяем путь к нашей флешке:
    $ sudo sfdisk -s
        /dev/sda: 312571224
        /dev/sdb:  62522712
        /dev/mmcblk0:   3872256
    всего: 378966192 блоков
    В данном случае это /dev/mmcblk0.
  3. Записываем. ВНИМАНИЕ! Все данные на флешке будут стёрты!
    $> pv Cubian-base-r5-a20.img | sudo dd of=/dev/mmcblk0 -bs=4096 ; sync
    Используем pv вместе с dd дабы хоть как-то видеть прогресс записи.
  4. Переставляем флешку в выключенный cubietruck, подключаем его к VGA монитору, сети Ethernet с DHCP сервером и включаем (без сети может минут 10 "висеть" в поисках адреса). Ждём… Ещё ждём… И… НИЧЕГО! А дело всё в том, что линусковые дистрибутивы настроены на вывод через HDMI. Как быть? Ну, во-первых, не отключать сразу питание — подождать с десяток минут пока дистрибутив развернётся, а во-вторых, вспоминаем про USB-UART переходник!
  5. Подключаем USB-UART переходник к ТРЁМ пинам на плате — TX(белый провод), RX(зеленый провод), GND(чёрный провод). Красный провод НИКУДА НЕ ПОДКЛЮЧАТЬ! Подключаем переходник к компьютеру и запускаем любимый терминал примерно такой строкой:
    $> minicom -b 115200 -D /dev/ttyUSB0 -o -c on -t xterm -L
    Если проделать это до включения, то можно было полюбоваться на процесс загрузки. А так — нажимаем Enter и видим приглашение ввести пароль.
  6. Логинимся со стандартными для этой сборки cubie/cubie...
    
    Cubie login: cubie
    Password:
    ...
    $ sudo -i
    [sudo] password for cubie:
    #
  7. И начинаем исправлять настройки. Подробности есть в fex guide, нам же надо поставить тип монитора в VGA:
    # cd /boot
    # cp script.bin script.orig
    # fex2bin script.bin 1.fex
    # nano 1.fex
    ^W
    (поиск): disp_mode<Enter>
    

    Исправляем параметры, чтобы получилось так:
    [disp_init]
    disp_mode = 0
    screen0_output_type = 4
    screen0_output_mode = 4
    fb0_framebuffer_num = 2
    fb0_format = 10
    fb0_pixel_sequence = 0
    fb0_scaler_mode_enable = 1
    fb1_framebuffer_num = 2
    fb1_format = 10
    fb1_pixel_sequence = 0
    fb1_scaler_mode_enable = 1
    Для screen1 можно выставить аналогичные параметры или поставить output_type=3, а disp_mode=4, что, в теории, должно дать режим "clone" для второго дисплея. 3 в output_type означает HDMI, 4 - VGA, output_mode=4 даёт 1024х768 VGA или 720p50 для HDMI.
    Сохраняем результаты работы:
    ^O<Enter>
    ^X
    # fex2bin 1.fex script.bin
    # reboot
    
  8. Через несколько секунд мы должны увидеть в терминале лог загрузки, а на VGA дисплее двух обезьян и тот же лог, заканчивающийся приглашением ввести логин/пароль.
  9. Логинимся, пробуем поработать в текстовом режиме и выключаем.
  10. Вынимаем флешку, запускаем систему и… да, снова — тишина. Это, если не повезло, а коль повезло — снова чудной Андроид.

Восстановление убитого NAND.

Если нам не повезло и загрузка с NAND перестала работать (это как раз одно из "чудес" ревизии "B"), то чуть ли не единственный шанс её вернуть — прошить готовые NAND образы через специальные утилиты. Лучше — официальный Андроид, для гарантии.

  1. Отключаем Cubietriuck от питания и лишних проводов, готовим mini-USB кабель в компьютер
  2. Качаем утилиту для прошивки и нужнуй образ:
    $ wget http://dl.cubieboard.org/software/tools/livesuit/LiveSuitV306_For_Linux64.zip
    $ wget http://ubuntuone.com/3Z95tYxkcpvKq5oc2Zdpka
    $ wget http://dl.cubieboard.org/software/a20-cubietruck/android/ct-nand-v1.01-20140109.img.gz
    

    Не забываем, что образ нужен для ревизии "B", а виндовая утилита тоже может пригодиться.
  3. Настраиваем udev по мануалу из LiveSuit (но надёжнее запускать от рута - у меня что-то чудило)
  4. Распаковываем образ и устанавливаем LiveSuit:
    $ gunzip ct-nand-v1.01-20140109.img.gz
    $ unzip LiveSuitV306_For_Linux64.zip
    $ cd LiveSuit_For_Linux64
    $ chmod +x LiveSuit.run
    $ ./LiveSuit.run
  5. Устанавливается оно в ~/Bin. Переходим туда и из терминала запускаем LiveSuit.sh из-под админа
  6. Выбираем распакованный образ
  7. Зажав кнопку FEL, втыкаем mini-USB в cubietruck и нажимаем его кнопку Power секунд на 5÷10. Повторять можно, выключая и включая устройство без выдёргивания шнурка. Для этого зажать кнопку Power на 5÷10сек, пока не уменьшится яркость (или погаснет) светодиод питания
  8. Как загорятся лампочки, отпускаем всё (в это же время начнёт двигаться прогресс-бар прошивки)
  9. Ждём некоторое время и получаем ошибку. В терминале видно что-то типа "invalid argument" в какой-то строке .cpp файла. Есть подозрение, что более новые версии прошивок будут прошиваться нормально, а пока нам потребуется Windows
  10. Загружаемся в windows, имея под рукой дистрибутив и прошивку из п.2. В случае с VirtualBox потребуются традиционные пляски с бубном вокруг подключения новых USB устройств. Как и при прошивке телефонов, создаётся 2 (или даже 3) USB устройства, которые надо добавить в авто-подключаемые. Первое описано в китайском мануале LiveSuit с ID 1f3a:efe8, второе имеет тот же ID, но другую ревизию. В фильтре VirtualBox надо стереть ревизию и оставить только ID
  11. Далее — аналогично Linux-у, с поправкой на установку драйверов при первом подключении. Выбор образа на второй закладке, прошивка начинается также автоматически при подключении cubieboard, когда задан файл. Шьётся очень долго, минут 10. Можно сходить испить кофею
Итак, всё установлено. Время настраивать и ломать.

В качестве средства управления в text-mode версии установлен ajenti, что само по себе неплохо, но ест довольно много памяти. Если не требуется удалённая админская панель — удаляем. Если требуется — пользуется, помня, что URL надо писать как HTTPS, иначе не заработает: https://my-cool-ip:8000/. Логин по-умолчанию стандартный (root/admin)

Ещё одним сюрпризом станет изменённый порт ssh. Лезем в /etc/ssh/ssh.conf и правим 36000 на стандартный 22, если не беспокоимся о попытках удалённого взлома.

Установка LXDE и видео

Предполагает наличие не менее 1Гб свободного места на флешке.
  1. Обновляем систему:
    $ sudo apt-get update
    $ sudo cubian-update
    $ sudo apt-get upgrade
  2. Добавляем поддержку сетевых шар:
    $ sudo apt-get install cifs-utils nfs-client
    Потянет за собой samba-3, что пригодится для расшаривания будущего NAS
  3. Устанавливаем XOrg:
    $ sudo apt-get install xserver-xorg-core xinit xserver-xorg-video-sunximali sunxi-disp-test
    $ sudo apt-get install libvdpau-sunxi
    $ echo "VDPAU_DRIVER=sunxi" | sudo tee -a /etc/environment
    $ echo "export VDPAU_DRIVER=sunxi" | sudo tee -a /etc/skel/.bashrc
    $ echo "export VDPAU_DRIVER=sunxi" >> ~/.bashrc
  4. Добавляем в /etc/rc.local (до строки exit 0) следующее:
    chmod 777 /dev/cedar_dev
    chmod 777 /dev/disp
    chmod 777 /dev/g2d
    Первые две строки для работы VDPAU, третья — для работы субтитров через ускоритель. Она что-то рушит в не-полноэкранном режиме, поэтому не включается автоматом через переменную. Для активации аппаратных субтитров надо задать
    $ export VDPAU_OSD=1
  5. Тестируем установку:
    $ xinit /usr/bin/sunxi_disp_test -- :0
    Строка запускает х-сервер и показывает разноцветную пирамидку на сером фоне. Если всё получилось, то увидим именно её. Выход по Ctrl+C, но мне пришлось переключиться в терминал (Ctrl+Alt+F4) потому как в иксах комбинация не срабатывала.
  6. Устанавливаем LXDE и запускаем:
    $ sudo apt-get install lxde
    $ sudo adduser cubian video
    $ sudo service mdm restart
    Убеждаемся, что всё работает, но в отвратительном разрешении 1024х768. Снова лезем в /boot/1.fex правим screen0_output_mode на желаемое и перезагружаемся
  7. Устанавливаем SMPlayer для ускоренного видео:
    $ sudo apt-get install smplayer
    $ echo "ao=alsa" >> ~/.mplayer/config
    $ echo "vo=vdpau" >> ~/.mplayer/config
    $ echo "vc=ffmpeg12vdpau,ffh264vdpau,ffvc1cdpau," >> ~/.mplayer/config
    
    Внимание на запятую в конце строки vc — без неё перестанет работать не-VDPAU воспроизведение
  8. Добавляем шару на прежний NAS для тестирования:
    $ echo "10.0.0.5:/volume1/Video /mnt/video nfs,user,rsize=65535,wsize=65535,_netdev,vers=3,auto 0 0" \
     | sudo tee -a /etc/fstab
    $ sudo mkdir /mnt/video
    $ sudo chmod a+x /mnt/video
    $ sudo mount -a

Вместо заключения


Итак, мы получили рабочую систему с лёгким графическим менеджером, способную играть музыку и видео и практически ничего не потребляющую. Тест работы показал потребление 0.17÷0.3А от 12В блока питания в зависимости от нагрузки. Максимальный ток при программном проигрывании видео мало отличался от аппаратного (оба в пределах 0.26÷0.3А) но даже 720p видео можно смотреть только с аппаратным ускорением. Аппаратное ускорение тестировалось на 5Гб BDRip-е 1280х548 "Звёздных войн" и не тормозило на самых динамичных сценах. Загрузка же процессора показывалась в пределах 10%.

Грубый предварительный расчёт  даёт нам потребление порядка 12÷15Вт:
  • 12В х 0.3А х 0.82 = 2.95Вт с учётом КПД импульсного стабилизатора, которого не будет в итоговой схеме
  • 12В х 0.55А + 5В х 0.7А = 10.1Вт — максимальное потребление винчестера, если верить маркировке на нём.
  • Протестировано с Seagate Barracuda 7200.9 (5Вx0.46А, 12Вx0.56А) — фактическое потребление 0.7А х 13.5В =  9.45Вт. НО! При раскрутке блинов диск отъедает не менее 2.6А на 1÷2 секунды.
Для сравнения, Synology DS411 с одним аналогичным винчестером потребляет 60Вт. То есть это уже в 4-5 раз меньше платить за электричество (0.36кВт•ч против 1.44кВт•ч в день при круглосуточной работе)

Конец первой части.

Продолжение читать здесь.

Комментариев нет:

Отправка комментария