Собираем систему для Orange Pi PC2

2017-01-13

Вместо предисловия - это не исчерпывающее руководство по сборке ядра и системы для Orange Pi PC2. Это сборник граблей, причём далеко не полный.

Disclaimer

Если вы не знакомы с процессом сборки ядер Linux, не знаете, что такое UART или не в состоянии понять, почему не работает тот или иной .sh-скрипт, просто скачайте себе готовый образ какой-нибудь бубунты и не тратьте своё время. Вряд ли у вас получится лучше. Но, если вдруг душа просит тонких извращений или просто хочется взять ситуацию под контроль - думаю, нижеследующий текст должен помочь.

Фигачим

У меня лично всё “взлетело” на Ubuntu 16.04, причём (и это, сука, важно!!) сборка должна происходит на партиции ext4. НЕ btrfs, НЕ xfs, а ext4. Если не забуду - опишу, почему ближе к концу. А ещё весьма рекомендуется приобрести UART-USB конвертер с уровнем сигналов 3.3в. В теории - можно и без него, но, скажем так - заебетесь отлаживать.

Для начала сделайте себе клон репозитария:

git clone https://github.com/OrangePiLibra/OrangePi_H5SDK

Любопытный читатель сразу спросит - а почему бы не использовать официальную репу от xunlong-software ?

Отвечу - потому что автор этого репозитария пока что впереди всех по “инновациям”.

Ползти эта хреновина будет долго, ибо ушлые авторы закатали во внутрь еще и ARM64 компилятор, так что выкачать придётся немало.

Когда всё приедет - понадобится доставить в систему некоторые нужные пакеты, кроме тех, которые описаны здесь.

Точно понадобится:

  • qemu-user-static, при этом нужно будет еще включить поддержку binary format в ядре - это либо отдельный пакет, либо утилита, короче тоже нужно отдельно ставить и включать
  • утилита pv
  • утилита whiptail
  • bsdtar
  • busybox
  • mcopy
  • В системе должно быть работающее sudo. Обычно в Убунту уже всё настроено.
  • Может быть ещё что-то, смотрите на ошибки и доставляйте по мере необходимости.

Перед сборкой нужно дать команду:

sudo modprobe loop

Это нужно, чтобы работало монтирование образов без особых приседаний.

Дальше часть довольно простая. Запускаем сборщика:

./build.sh

Без sudo!

Будет предложено выбрать плату (выбираем Orange Pi PC2). Дальше нас зачем-то спросят о пароле root(!) Это такой китайский юмор. Нужно писать свой пароль, ну так, как будто вы выполняете что-то с sudo.

Вначале собираем UBOOT. Прямо из меню. Если выбрать просто “сделай образ” - выпадет с ошибкой. Короче - вначале пилим uboot.

Дальше можно выбирать “Create Image”. Не торопитесь идти пить чай. После каждой стадии этот скрипт будет рапортовать и придётся нажимать Enter. Страдаем, ждём, исправляем ошибки.

Да, кстати, если кто-то раскатал губу на CentOS - он есть в списке, но не реализован. Упс.

Если всё хорошо - пишем образ на sd-карту. Просто запишите его.

А вот тут начинаются трюки

После записи вы внезапно обнаружите, что первая партиция boot (vfat) пустая. Это нормально.

Убедитесь что microSD вставлена и пока что не смонтирована. Если сработал automount - руками отмонтируем - командой umount.

Опять запускаем скрипт, выбираем плату и пишем пароль. И после этого даем команду “Update U-boot”. Происходит магия, вас спрашивают про имя флешки - вписываем ( например /dev/sdd ). Скрипт обновит uboot прямо на носителе и закончит свою работу.

Теперь пишем:

sync

И перетыкаем флешку. Если сработает automount - бут-партиция будет в системе примерно с таким путём: /media/username/BOOT - запишите это.

Если automount НЕ включен, смонтируйте руками.

Опять запускаем скрипт. Да, сука, ОПЯТЬ!!!

Теперь нам нужно будет выполнить ещё один пункт - “Update kernel Image”. Система спросит, где мол тут у вас образ - укажите там путь, куда подмонитрован BOOT. И, сюрприз, - всё упадет с ошибкой - система не сможет найти файл. Запишите что именно она не нашла и скопируей этот файл “руками” из каталога output и повторите процедуру несколько раз. Всё сработает, папку “backup” можно смело грохнуть.

Ура! Всё готово к загрузке.

Ах да, зачем ext4 ? Да просто при распаковке arch linux - bsdtar  не сможет выставить правильно атрибуты на файловой системе, отличной от ext2/3/4.

Первая загрузка

Время подключать USB-UART, ибо после подачи питания ваш монитор так и останется тёмным.

Если USB-UART есть

Ну тут всё просто - подключаем и бутимся. Внутри ставим ssh-server. Руками. В зависимости от выбранной системы. А ещё нужно дать команду sudo depmod -a для индексации модулей и уже при следующей загрузке модуль mail.ko будет загружен. Если всё ок, можно отключаться и играться с headless-системой, доступной по ssh.

Если USB-UART’a нет

Лучше бы он был. Но можно попробовать обойти эту неприятность. Проблема в том, что ssh-сервера в системе нет, его надо доставить.

  • Вставляем microSD в компьютер, на котором собирали образ и ядро.
  • Монтируем вторую партицию (rootfs)
  • Делаем туда chroot. Поскольку в системе включен binary format support (а он включен, если образ собрался) - проблем быть не должно
  • Ставим ssh, ждём генерации ключей. Всё будет довольно неспешно, ибо мы эмулируем ARM64.
Остальное
Светодиоды

Для начала - некоторая расшифровка текущих значений светодиодов.
Во-первых они гореть не будут, если microSD не вставлена.

  • Если горит красный и зелёный - работает uboot.
  • Если только красный - ядро вроде как стартовало, идёт загрузка
  • После shutdown горит только зелёный, изображая standby.
Потенциальные проблемы

У меня интересная ситуация - есть довольно старый 1Gb свитч. Так вот он не работает с Orange Pi PC2… Настоятельно рекомендуется для начала подключить в 100Mb сеть.

Как уже говорилось - на hdmi нет консоли, причём ухищрения с uEnv.txt, как то прописывание туда явно “пользуй hdmi” в optargs ни разу не помогло.

Хоть какой-то вывод можно получить, установив DE (Desktop Environment) - причем вначале мы ставим X-сервер fdbdev из репозитария, а потом заменяем на fbturbo по этой инструкции. И не забываем поставить gdm/lightdm, ведь руками startx дать не получится.

Кстати, если вы вначале включили OPi PC2, а потом подключили монитор по HDMI, то с огромной долей вероятности на нём будет пусто, даже если всё настроено.

Mali не работает, о чём упоминает сам автор

Mail blobs can be downloaded from the following URL. Does not help much for now, as fbturbo requires mali-drm module to enable this in X11. Might be of some use for framebuffer.

И в ближайшие месяцы его точно не будет.

Ну и наконец блок питания - пожалуйста не жидитесь и купите себе хороший БП 5в 2А. Не шумный, не поддельный, не убитый - хороший и дорогой блок. Ибо в OPi PC2 от этого зависит дофига всего, в частности стабильность работы USB - ладно мышка с клавиатурой сбросятся, а вот если HDD с коллекцией тентаклей - то это уже совершенно другая потеря :)

Вот вроде бы и всё. Думал, было, расписать, как включить Desktop Environment - но если кто-то этого не знает - то ему и не надо. А если знает - справится сам. Хочется верить в светлое будущее и поддержку энтузиастами данного мегадевайса. Ну или будет считать SETI@Home где-нибудь под столом с наклеенным радиатором.


В массы

В трубу