- PVSM.RU - https://www.pvsm.ru -
После нескольких мучительных месяцев ожидания недавно я получил свой HiFive Unleashed [1], и это невероятно круто. Для тех, кто не в курсе, HiFive Unleashed — это первый одноплатник на RISC-V [2] с поддержкой Linux, ориентированный на потребителя. Если ещё не понятно, RISC-V — это открытая [3], свободная архитектура набора команд [4], а HiFive — открытый процессор, реализующий её. И вот он на моём обеденном столе:
Плата реально классная. В течение ближайших месяцев постараюсь подготовить всё необходимое для сервиса непрерывной интеграции builds.sr.ht [5], через который будет автоматизирована оставшаяся часть переноса 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 ещё не завершён и не включён в основную ветку.
Но есть патч [6] для поддержки RISC-V, хотя его никогда не тестировали в таком масштабе. Соответственно, я столкнулся с несколькими багами, для которых написал несколько патчей (1 [7], 2 [8], 3 [9]). Наличие рабочего дистрибутива, основанного на порте RISC-V — убедительный аргумент в пользу зрелости портированной версии, поэтому я рад, что поймал эти баги. До того времени приходилось вручную добавлять порт и свои патчи в пакет Alpine Linux musl.
Компилятор C и реализация libc открывают двери для переноса на вашу платформу огромного объёма программного обеспечения. Следующий шаг — определить и перенести необходимые пакеты для системы самохостинга. Тут в Alpine есть отличный скрипт [10], который готовит кросс-компилятор и собирает базовую систему. Многие (если не большинство) из этих пакетов требовали исправления, настройки и ручного вмешательства — это не готовое решение, но невероятно полезный инструмент. Наиболее важные пакеты на данном этапе — нативные инструменты (то есть компилятор не только компилирует, но и сам работает под 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 [11]. Примерно такая команда установит его в /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
при первой загрузке. Работа ещё продолжается, поэтому настройка остального — упражнение для читателя, пока я не очищу процесс и не сделаю нормальный скрипт установки. Удачи!
Автор: m1rko
Источник [12]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/open-source/303386
Ссылки в тексте:
[1] HiFive Unleashed: https://www.sifive.com/boards/hifive-unleashed
[2] RISC-V: https://en.wikipedia.org/wiki/RISC-V
[3] открытая: https://github.com/riscv
[4] архитектура набора команд: https://en.wikipedia.org/wiki/Instruction_set_architecture
[5] builds.sr.ht: https://meta.sr.ht/
[6] патч: https://github.com/riscv/riscv-musl
[7] 1: https://github.com/riscv/riscv-musl/pull/2
[8] 2: https://github.com/riscv/riscv-musl/pull/3
[9] 3: https://github.com/riscv/riscv-musl/pull/4
[10] скрипт: https://git.alpinelinux.org/cgit/aports/tree/scripts/bootstrap.sh
[11] репозиторий Alpine Linux для RISC-V: https://mirror.sr.ht/alpine/main/
[12] Источник: https://habr.com/post/434382/?utm_campaign=434382
Нажмите здесь для печати.