После нескольких мучительных месяцев ожидания недавно я получил свой HiFive Unleashed, и это невероятно круто. Для тех, кто не в курсе, HiFive Unleashed — это первый одноплатник на RISC-V с поддержкой Linux, ориентированный на потребителя. Если ещё не понятно, RISC-V — это открытая, свободная архитектура набора команд, а HiFive — открытый процессор, реализующий её. И вот он на моём обеденном столе:


Плата реально классная. В течение ближайших месяцев постараюсь подготовить всё необходимое для сервиса непрерывной интеграции builds.sr.ht, через который будет автоматизирована оставшаяся часть переноса Alpine Linux, а также установка любых других операционных систем (в том числе не-Linux) и пользовательских программ, которые вы захотите портировать на RISC-V. Я вполне уверен, что это будет первый подобный проект на оборудовании RISC-V, открытый для публики.

Есть два этапа портирования операционной системы на новую архитектуру: начальная загрузка (бутстрапинг) и… собственно, портирование. За неимением лучшего термина. Для начальной загрузки нам нужен кросс-компилятор, нужно портировать libc и кросс-компилировать базовые элементы. Начальная загрузка завершается, когда система способна к самохостингу, то есть может скомпилировать себя. Процесс «портирования» включает в себя компиляцию всех пакетов, доступных для вашей операционной системы. Процесс может занять много времени и в целом автоматизирован.

Первым делом кросс-компилятор. Поддержка RISC-V появилась в binutils 2.28 и gcc 7.1 несколько релизов назад, об этом можно не беспокоиться. Достаточно собрать оба компилятора с параметром --target=riscv64-linux-musl. Другая важная часть — стандартная библиотека C или libc. В отличие от компилятора C, этот шаг потребовал некоторых усилий с моей стороны, поскольку Alpine Linux основан на musl libc, а её порт для RISC-V ещё не завершён и не включён в основную ветку.

Но есть патч для поддержки RISC-V, хотя его никогда не тестировали в таком масштабе. Соответственно, я столкнулся с несколькими багами, для которых написал несколько патчей (1, 2, 3). Наличие рабочего дистрибутива, основанного на порте RISC-V — убедительный аргумент в пользу зрелости портированной версии, поэтому я рад, что поймал эти баги. До того времени приходилось вручную добавлять порт и свои патчи в пакет Alpine Linux musl.

Компилятор C и реализация libc открывают двери для переноса на вашу платформу огромного объёма программного обеспечения. Следующий шаг — определить и перенести необходимые пакеты для системы самохостинга. Тут в Alpine есть отличный скрипт, который готовит кросс-компилятор и собирает базовую систему. Многие (если не большинство) из этих пакетов требовали исправления, настройки и ручного вмешательства — это не готовое решение, но невероятно полезный инструмент. Наиболее важные пакеты на данном этапе — нативные инструменты (то есть компилятор не только компилирует, но и сам работает под RISC-V), сам парольный менеджер и разные другие полезные вещи, такие как tar, patch, openssl и так далее.

Как только необходимые пакеты собраны и система может скомпилировать себя, начинается длительный процесс переноса. Здесь обычно разумно отказаться от кросс-компилятора и приступить к нативной сборке, если железо достаточно быстрое. Это компромисс, потому что система RISC-V несколько медленнее, чем моя загрузочная машина x86_64, но многие пакеты требуют много ручных настроек и исправлений для кросс-компиляции. Сэкономленное за счёт этого время компенсирует более медленную сборку (хотя на самом деле я весьма впечатлён скоростью HiFive Unleashed. Основным узким местом является драйвер mmcblk, но как только файлы попадают в кэш ядра, всё становится очень быстро и приятно).

Там тысячи пакетов, поэтому следующий шаг для меня (и всех, кто работает над переносом) — автоматизация оставшейся части процесса. Для меня промежуточным шагом является интеграция с сервисом builds.sr.ht, чтобы организовать собственную работу и сделать циклы доступными для других людей, заинтересованных в RISC-V. Не все пакеты будут портироваться автоматически — но многие будут! Как только вы портируете языки программирования — C, Python, Perl, Ruby (я уже сделал это!) и т. д. — большинство программ с открытым исходным кодом довольно переносимы на разных архитектурах. Одна из моих основных целей в sr.ht — поощрять распространение портируемого программного обеспечения!

Если у кого-то из читателей есть собственное оборудование RISC-V или он хочет попробовать его с qemu, вот репозиторий Alpine Linux для RISC-V. Примерно такая команда установит его в /mnt:

apk add     -X https://mirror.sr.ht/alpine/main/     --allow-untrusted     --arch=riscv64     --root=/mnt     alpine-base alpine-sdk vim chrony

Запустите /bin/busybox --install и apk fix при первой загрузке. Работа ещё продолжается, поэтому настройка остального — упражнение для читателя, пока я не очищу процесс и не сделаю нормальный скрипт установки. Удачи!



В заключение: огромное спасибо за помощь участникам сообщества #riscv на Freenode, а также разработчикам Debian и Fedora, которые во многом расчистили дорогу и выпустили патчи для многих программ! Но мне досталась вся радость переноса musl, так что дорога не была полностью чистой :)

Комментарии (18)


  1. Laney1
    25.12.2018 23:08

    Дрю ДеВолт конечно уникальный тип. В 25 лет ярый фанат email, irc, mutt и всего прочего олдскульного, ненавидит C++ и nvidia в лучших традициях раннего Линуса. Одновременно пилит просто тонну сложных проектов (sr.ht, sway, какая-то ОС для калькуляторов, куча патчей в сторонние проекты), имея при этом хобби вроде изучения японского языка и собственного телескопа.


    Достойная смена растет Линусу, достойная


    1. mspaint
      26.12.2018 08:27
      -1

      Список проектов на патреоне не поражает воображение.
      На замену Линусу не тянет.

      >ненавидит C++

      Вопрос открытый, хорошо это для linux или плохо. Плюсы развиваются, в отличие от. Ну и безопасность сейчас в большем приоритете, чем голая скорость.


  1. xlop-chik
    25.12.2018 23:27

    а Debian точно поддерживает? расскажи про видео… точно не mali400?


    1. LonFas
      26.12.2018 00:13

      У этого одноплатника я что-то видеовыхода не вижу.
      p.s. Для mali аппаратное декодирование пилится www.kickstarter.com/projects/bootlin/allwinner-vpu-support-in-the-official-linux-kernel/posts/2332363


      1. timdorohin
        26.12.2018 00:53

        Мимо. Это никоим образом не касается Mali — это драйвер VPU aka видеодекодера в процессорах Allwinner.
        Свободный драйвер для Mali это Lima — gitlab.freedesktop.org/lima


  1. timdorohin
    25.12.2018 23:59

    Мммм… может не стоит издеваться над SD-карточкой, а завести сеть и использовать AoE/NFS? В случае одного дноплатника с настоящим гигабитным портом у меня это вышло на порядок быстрее microSD.
    Тоже, кстати, использовал его как сборочную машинку ибо некоторые пакеты упорно не хотели кросскомпилироваться.


  1. xlop-chik
    26.12.2018 00:01

    а как к нему подключить sata жёсткий диск?


    1. kiba
      26.12.2018 04:49

      через Expansion Board


      1. konchok
        26.12.2018 17:41

        >Плата реально классная
        Ни SATA, ни USB, и даже флеш убогий микроСД. Вообще не понял чем эта плата классная, по мне так фигня какая-то


  1. maquefel
    26.12.2018 08:34

    Покупали или бесплатно получили?

    Не заметил, что это перевод — прошу пардона.


  1. defecator
    26.12.2018 12:28

    всегда интересовало, а что заставляет на всё это железо постоянно натянуть Linux?
    Я вот предпочитаю писать bare metal и иметь полный контроль на железом,
    тем более таких проектов полно в интернете.

    Нет, понятно, что народу хочется «побыстрее», но тратить уйму ресурсов железа просто на поддержку чудовищной прослойки в виде Linux?..


    1. maquefel
      26.12.2018 12:55

      Вы просто не в теме. HiFive Unleashed — это первая борда на которую можно поставить Linux. Сами процессоры по RISC-V или залитые на FGPA есть уже давно. Собственно уже есть выбор «микроконтроллеров» на RISC-V.


      1. defecator
        26.12.2018 13:03

        А, да, точно, снова MIPS рекламируют ))))


    1. abondarev
      26.12.2018 13:33

      Ну Вы же сами сказали, хочется побыстрее.
      Если Вам нужно иметь функциональность какого нибудь веб-сервера + какую нибудь файловую систему + удаленный доступ + да мало ли чего еще. Если Вы попробуете это сделать на bare metal, то боюсьчто Вы не будете экономить ресурсы разработчика, то есть у величится время разработки, следовательно время выхода на рынок, а это, сейчас, гораздо больше ценится.


    1. DaylightIsBurning
      26.12.2018 18:55

      Я вот предпочитаю писать bare metal и иметь полный контроль на железом,
      А сколько процентов Вам удавалось выиграть по производительности отказавшись от линукса в пользу железа? По какой метрике?


  1. jimmyjonezz
    26.12.2018 13:01

    Нынче Lattepanda хорошо рекламируется…


  1. maquefel
    26.12.2018 13:49

    В общем поскольку народ совсем не в теме позволю себе маленькую ремарку:

    — RISC-V это набор ISA (instruction set architecture) открытых спецификаций, которые небходимо соблюдать, что быть RISC-V совместимыми
    — есть открытые реазизации процессоров соответвующих данным спецификациям (открытые — есть код, бери и заливай на FGPA или запекай, участвуй в разработке)
    — доподлинно известно, что микроконтроллеры по RISC-V уже используют NVIDIA и Western Digital
    — Собственно V — означает пятую попытку :-D

    Данная инициатива интересна своей открытостью, то есть все открыто и бесплатно.


  1. BubaVV
    28.12.2018 11:09

    А в какой стадии эмуляторы этой платформы?