Вместо предисловия - это не исчерпывающее руководство по сборке ядра и системы для 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 где-нибудь под столом с наклеенным радиатором.