Перенос Alpine Linux на RISC-V

https://drewdevault.com/2018/12/20/Porting-Alpine-Linux-to-RISC-V.html
  • Перевод
После нескольких мучительных месяцев ожидания недавно я получил свой 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, так что дорога не была полностью чистой :)
Поделиться публикацией

Похожие публикации

Комментарии 19

    +9

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


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

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

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

      Вопрос открытый, хорошо это для linux или плохо. Плюсы развиваются, в отличие от. Ну и безопасность сейчас в большем приоритете, чем голая скорость.
      0
      а Debian точно поддерживает? расскажи про видео… точно не mali400?
      +1
      Мммм… может не стоит издеваться над SD-карточкой, а завести сеть и использовать AoE/NFS? В случае одного дноплатника с настоящим гигабитным портом у меня это вышло на порядок быстрее microSD.
      Тоже, кстати, использовал его как сборочную машинку ибо некоторые пакеты упорно не хотели кросскомпилироваться.
        0
        а как к нему подключить sata жёсткий диск?
          0
          через Expansion Board
            0
            >Плата реально классная
            Ни SATA, ни USB, и даже флеш убогий микроСД. Вообще не понял чем эта плата классная, по мне так фигня какая-то
          +1
          Покупали или бесплатно получили?

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

            Нет, понятно, что народу хочется «побыстрее», но тратить уйму ресурсов железа просто на поддержку чудовищной прослойки в виде Linux?..
              0
              Вы просто не в теме. HiFive Unleashed — это первая борда на которую можно поставить Linux. Сами процессоры по RISC-V или залитые на FGPA есть уже давно. Собственно уже есть выбор «микроконтроллеров» на RISC-V.
                0
                А, да, точно, снова MIPS рекламируют ))))
                0
                Ну Вы же сами сказали, хочется побыстрее.
                Если Вам нужно иметь функциональность какого нибудь веб-сервера + какую нибудь файловую систему + удаленный доступ + да мало ли чего еще. Если Вы попробуете это сделать на bare metal, то боюсьчто Вы не будете экономить ресурсы разработчика, то есть у величится время разработки, следовательно время выхода на рынок, а это, сейчас, гораздо больше ценится.
                  0
                  Я вот предпочитаю писать bare metal и иметь полный контроль на железом,
                  А сколько процентов Вам удавалось выиграть по производительности отказавшись от линукса в пользу железа? По какой метрике?
                  0
                  Нынче Lattepanda хорошо рекламируется…
                    0
                    В общем поскольку народ совсем не в теме позволю себе маленькую ремарку:

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

                    Данная инициатива интересна своей открытостью, то есть все открыто и бесплатно.
                      0
                      А в какой стадии эмуляторы этой платформы?

                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                    Самое читаемое