Ports/riscv64: различия между версиями

Материал из ALT Linux Wiki
(→‎OpenOCD: Перенёс на отдельную страницу)
(не показано 16 промежуточных версий 2 участников)
Строка 1: Строка 1:
= '''RISC-V''' =
== RISC-V ==


RISC-V является [https://riscv.org/risc-v-isa архитектурой с открытым набором комманд (ISA)].
RISC-V (читается как “risk-five”) -- [https://riscv.org/risc-v-isa архитектура процессоров с открытым набором комманд (ISA)]. ISA RISC-V имеют лицензию [https://creativecommons.org/licenses/by/4.0/ Creative Commons license (CC BY 4.0)]. Любой желающий может получить финальную версию [https://riscv.org/specifications/ спецификаций ISA], а также получить черновики разрабатываемых расширений и поучаствовать в их разработке.
ISA RISC-V имеют лицензию [https://creativecommons.org/licenses/by/4.0/ Creative Commons license (CC BY 4.0)].
Любой желающий может получить финальную версию [https://riscv.org/specifications/ ISA пользовательского уровня] и
черновик [https://riscv.org/specifications/privileged-isa/ ISA привилегированного уровня].


Другая ключевая особенность архитектуры RISC-V - её расширяемость, что позволяет создавать разнообразные реализации.
Другая ключевая особенность архитектуры RISC-V - её расширяемость. Базовая спецификация архитектуры RISC-V включает в себя только инструкции для записи, сохранения, переходов и целочисленной арифметики. Минимальная спецификация обозначается RV32I, RV64I или RV128I ("I" означает integer) для размеров операнда 4, 8 или 16 байт соответственно. Конкретные реализации могут дополнять базовую спецификацию расширениями, как стандартными, так и специфичными для конкретного вендора или изделия. Стандартные расширения чаще всего обозначаемыми одной латинской буквой, например расширение '''M''' содержит инструкции для умножения и деления целых чисел, '''A''' -- атомарные операции и т.д.
Минимальная спецификация архитектуры RISC-V включает в себя только инструкции для записи, сохранения, переходов и
 
целочисленной арифметики. Код инструкций не зависит от размера регистра,
На данный момент порт Linux работает со спецификацией "RV64IMAFDC":
минимальная спецификация обозначается RV32I, RV64I или RV128I ("I" означает integer) для размеров операнда
4, 8 или 16 байт соответственно.
На данный момент порт Linux работает со спецификацией "RV64IMAFDC" или "RV64GC" ("G" == "IMAFD"):
* <tt>'''I'''</tt> - целочисленные базовые инструкции;
* <tt>'''I'''</tt> - целочисленные базовые инструкции;
* <tt>'''M'''</tt> - умножение и деление целых чисел;
* <tt>'''M'''</tt> - умножение и деление целых чисел;
* <tt>'''A'''</tt> - атомарные операции;
* <tt>'''A'''</tt> - атомарные операции;
* <tt>'''F'''</tt> - число с плавающей запятой одинарной точности;
* <tt>'''F'''</tt> - числа с плавающей запятой одинарной точности;
* <tt>'''D'''</tt> - число с плавающей запятой двойной точности;
* <tt>'''D'''</tt> - числа с плавающей запятой двойной точности;
* <tt>'''C'''</tt> - сжатые 16-битные инструкции.
* <tt>'''C'''</tt> - "сжатые" (16-битные) инструкции.
 
Для удобства принято сокращение  "G" == "IMAFD", то есть процессоры, поддерживаемые портом, должны реализоввывать архитектуру rv64gc.
 
Архитектура Сизифа и пакетов RPM, собранных под rv64gc, называется <tt>riscv64</tt>.
 
== Порт Сизифа ==
 
Порт [[Sisyphus]] на архитектуру riscv64 (RV64GC) развивается с 2018 года. Поддерживается (и тестируется) работа на платформах:
 
* [[HiFive Unmatched]]
* [[HiFive Unleashed]]
* [[Ports/riscv64/QEMU|QEMU]]
 
Для этих платформ выпускаются [[Regular/riscv64|Регулярные сборки]] (см. также [[Regular]]).


На данной странице можно найти последнюю информацию о статусе порта ALT на RISC-V (RV64GC).
Также для этих платформ выпускался [[Simply Linux 10]].
Сборка системы ведётся на плате SiFive [https://www.crowdsupply.com/sifive/hifive-unleashed HiFive Unleashed].
Для целей тестирования выполняется сборка образов для QEMU и платы HiFive Unleashed. Подробнее об этом можно прочитать [https://www.altlinux.org/Regular/riscv64 тут].


== '''Репозиторий''' ==
== Репозиторий ==


RPM/SRPM репозиторий можно найти по ссылке: http://ftp.altlinux.org/pub/distributions/ALTLinux/ports/riscv64/Sisyphus/


RPM/SRPM репозиторий можно найти по [http://ftp.altlinux.org/pub/distributions/ALTLinux/ports/riscv64/Sisyphus/ этой ссылке]. В виде sources.list для apt:
В виде sources.list для apt:


  rpm [sisyphus-riscv64] http://ftp.altlinux.org/pub/distributions/ALTLinux/ports/riscv64 Sisyphus/riscv64 classic
  rpm [sisyphus-riscv64] http://ftp.altlinux.org/pub/distributions/ALTLinux/ports/riscv64 Sisyphus/riscv64 classic
Строка 38: Строка 45:
  rpm [sisyphus-riscv64] http://mirror.yandex.ru/altlinux/ports/riscv64 Sisyphus/noarch  classic
  rpm [sisyphus-riscv64] http://mirror.yandex.ru/altlinux/ports/riscv64 Sisyphus/noarch  classic


== '''Рабочий план''' ==
Информацию о доступных пакетах удобно смотреть здесь: https://packages.altlinux.org/ru/sisyphus_riscv64/packages/


* Следующие ядра Linux были протестированы на SiFive HiFive Unleashed:
Сборка пакетов проходит на отдельном узле [[girar]], аналогичном [[Git.alt]]. В качестве сборочных узлов сейчас используются платы SiFive [[HiFive Unmatched]]. Сборка пакетов идёт в режиме "догоняющей сборочницы": как только какое-то задание (task) проходит в основной Сизиф, специальный [[Girar/task-rerunner & recycler|робот]] создаёт аналогичное задание в <tt>sisyphus_riscv64</tt>. Это означает, что никаких специальных усилий для сборки пакетов под '''riscv64''' предпринимать не нужно: собирайте в [[Sisyphus]]. Задания подтверждаются вручную, обычно в тот же день или на следующий день. Если какого-то пакета не хватает (мы собираем не всё подряд) или он долго не обновляется, свяжитесь с '''iv@'''.
** 4.15, 4.19-rc2, 4.19.6, 5.0.19, 5.1.9
** 5.9.1, 5.11.8 [http://git.altlinux.org/people/arei/packages/kernel-image-un-def.git?p=kernel-image-un-def.git;a=shortlog;h=refs/heads/sisyphus_riscv64 git]


* Ядро было протестировано на SiFive HiFive Unleashed и Unmatched:
В очень редких случаях (например, для специфичного riscv64-only софта или для ядер с поддержкой какого-нибудь интересного железа) доступ к girar'у для sisyphus_riscv64 может всё же понадобиться. Его может получить любой участник [[Team]] -- попросите '''iv@''' и как-нибудь доверенно передайте ему свой ssh-ключ. Правда, ресурсов там довольно немного, так что умеренность в задачах приветствуется.
** 5.12.18 [http://git.altlinux.org/people/jqt4/packages/?p=kernel-image.git;a=shortlog;h=refs/heads/hifive-unmatched-51218 git]


* Методы загрузки (boot):
== Как сообщить об ошибке ==
** Berkeley bootloader -- '''ГОТОВО'''
** U-BOOT ([http://git.altlinux.org/people/lineprinter/public/u-boot.git?p=u-boot.git;a=blob;f=README.alt;hb=HEAD link]) -- '''ГОТОВО'''


* Порт [[Sisyphus]] -- '''В ПРОЦЕССЕ'''
Сообщения об ошибках принимаются по адресу https://bugzilla.altlinux.org/  (см. [[BugTracking]]).
*# Toolchain -- '''ГОТОВО'''
* если проблема в пакете, выбирайте продукт Sisyphus, компонент соответсвующий имени пакета, платформа riscv64.
*# Linux Kernel -- '''ГОТОВО'''
* если проблема в сборке или образе, выбирайте продукт Regular, компонент, сответствующий DE по умолчанию, платформа riscv64.
*# X11 -- '''ГОТОВО'''
*# Desktop Environments:
*#* XFCE -- '''ГОТОВО'''
*#* GNOME -- '''В ПРОЦЕССЕ'''
*#* MATE -- '''В ПРОЦЕССЕ'''
*#* Cinnamon -- '''В ПРОЦЕССЕ'''
*#* LXQt -- '''В ПРОЦЕССЕ'''


* Образ ALT [http://sisyphus.ru/en/srpm/Sisyphus/mkimage-profiles metaprofile] -- [https://www.altlinux.org/Regular/riscv64 '''ГОТОВО''']
'''ВАЖНО''':
* [http://git.altlinux.org/people/arei/packages/girar.git?p=girar.git;a=shortlog;h=refs/heads/riscvmod Girar Builder] -- '''ГОТОВО'''
* указать <tt>Platform: riscv64</tt> (справа в верхней части формы создания бага)
* Образ для QEMU ([https://www.altlinux.org/Regular/riscv64#%D0%97%D0%B0%D0%BF%D1%83%D1%81%D0%BA_%D0%BD%D0%B0_QEMU ссылка]) -- '''ГОТОВО'''
* назначить ошибку на [[Участник:IvanMelnikov|iv@altlinux.org]]


== '''OpenSBI''' ==
См. также [[BugTracking/BugzillaMiniHowto|Краткое пособие по использованию Bugzilla]]
=== QEMU virt ===
Для запуска образов на QEMU необходимо выполнить следующие шаги:


'''Шаг 0.''' Для запуска порта ALT на RISC-V необходимо установить QEMU с поддержкой riscv64. Например, в случае хостовой системы на ALT x86_64: [http://sisyphus.ru/en/srpm/Sisyphus/qemu qemu-system-riscv-core].
== Полезные ссылки ==
 
'''Шаг 1.a''' Прошивка OpenSBI для QEMU virt находится внутри qcow2/qcow2c. Скопируем её из образа:
 
<source lang=shell>
root$ qemu-nbd -c /dev/nbd0 qemu-riscv64.qcow2c
root$ mount /dev/nbd0p1 /mnt
root$ cp -v /mnt/usr/share/opensbi/qemu/virt/firmware/fw_payload.elf .
user$ FIRM=./fw_payload.elf
</source>
 
'''Шаг 1.b''' Альтернативный вариант: [http://ftp.altlinux.org/pub/distributions/ALTLinux/ports/riscv64/Sisyphus/noarch/RPMS.classic/ загрузить]
и установить последнюю версию пакета прошивки OpenSBI для QEMU virt.
После этого прошивка OpenSBI будет находится в /usr/share/opensbi/qemu/virt/firmware/fw_payload.elf
 
Например:
 
<source lang=shell>
user$ curl -O http://ftp.altlinux.org/pub/distributions/ALTLinux/ports/riscv64/Sisyphus/noarch/RPMS.classic/opensbi-firmware-qemu-0.6-alt1.noarch.rpm
root$ rpm -i opensbi-firmware-qemu-0.6-alt1.noarch.rpm
user$ FIRM=/usr/share/opensbi/qemu/virt/firmware/fw_payload.elf
</source>
 
'''Шаг 2.''' Запуск образа qcow2/qcow2c на QEMU можно осуществить следующей командой, указав в QCOW путь к образу:
 
<source lang="shell">
$ QCOW=qemu-riscv64.qcow2c
$ qemu-system-riscv64 \
          -nographic -machine virt -kernel "$FIRM" \
          -m 2G -smp cpus=4 \
          -drive file="$QCOW",id=hd0 -device virtio-blk-device,drive=hd0 \
          -netdev user,id=eth0,hostfwd=tcp::5900-:5900 -device virtio-net-device,netdev=eth0
</source>
 
'''Шаг 3.''' Дальнейшая настройка графической системы выполняется при помощи [https://www.altlinux.org/Regular/riscv64#VNC VNC]. При подключении по VNC установлен стандартный пароль '''<tt>alt</tt>''', его будет предложено поменять при первоначальной настройке.
 
=== HiFive Unleashed ===
Для запуска образов на SiFive HiFive Unleashed (FU540) SoC необходимо выполнить следующие шаги:
 
'''Шаг 0.''' Предполагается, что microSD карточка находится в /dev/sdb. Выполним разметку microSD и создание файловой системы:
 
<source lang="shell">
root$ sgdisk -g --clear \
        --new=2::+32K    --change-name=2:'fsbl'          --typecode=2:5B193300-FC78-40CD-8002-E86C45580B47 \
        --new=3::+8M:    --change-name=3:'opensbi-uboot' --typecode=3:2E54B353-1271-4842-806F-E436D6AF6985 \
        --new=1::-0      --change-name=1:'root'          --typecode=1:0FC63DAF-8483-4772-8E79-3D69D8477DE4 \
        /dev/sdb
root$ mkfs.ext4 /dev/sdb1
root$ mount /dev/sdb1 /mnt
root$ tar -xpvf hifive-unleashed-riscv64.tar.xz -C /mnt
</source>
 
'''Шаг 1.а.''' First Stage BootLoader (FSBL) и OpenSBI находятся внутри распакованного дерева /mnt.
Запишем их на разделы 2 и 3 соответственно, а затем размонтируем раздел:
 
<source lang="shell">
root$ dd if=/mnt/usr/share/fu540_boot/fsbl.bin of=/dev/sdb2 bs=1M
root$ dd if=/mnt/usr/share/opensbi/sifive/fu540/firmware/fw_payload.bin of=/dev/sdb3 bs=1M
root$ sync; umount /mnt
</source>
 
'''Шаг 1.б.''' Альтернативный вариант: [http://ftp.altlinux.org/pub/distributions/ALTLinux/ports/riscv64/Sisyphus/noarch/RPMS.classic/ загрузить] и установить First Stage BootLoader (FSBL) и OpenSBI для FU540.
 
Например:
 
<source lang="shell">
root$ curl -O http://ftp.altlinux.org/pub/distributions/ALTLinux/ports/riscv64/Sisyphus/noarch/RPMS.classic/fu540-bootloaders-0-alt1.git54bfc90.noarch.rpm
root$ curl -O http://ftp.altlinux.org/pub/distributions/ALTLinux/ports/riscv64/Sisyphus/noarch/RPMS.classic/opensbi-firmware-fu540-0.6-alt1.noarch.rpm
root$ rpm -i fu540-bootloaders-0-alt1.git54bfc90.noarch.rpm
root$ rpm -i opensbi-firmware-fu540-0.6-alt1.noarch.rpm
root$ dd if=/usr/share/fu540_boot/fsbl.bin of=/dev/sdb2 bs=1M
root$ dd if=/usr/share/opensbi/sifive/fu540/firmware/fw_payload.bin of=/dev/sdb3 bs=1M
root$ sync; umount /mnt
</source>
 
'''Шаг 3.''' Система на microSD каточке готова к загрузке. Дальнейшая настройка графической системы выполняется при помощи [https://www.altlinux.org/Regular/riscv64#VNC VNC].  При подключении по VNC установлен стандартный пароль '''<tt>alt</tt>''', его будет предложено поменять при первоначальной настройке.
 
== Полезные ссылки: ==


* [http://0x1.tv/20180929H OSSDEVCONF-2018]
* [https://github.com/dalegr/riscv-bbl-utils утилиты для Berkeley bootloader] для слияния ядра Linux в bbl.bin с dummy payload.
* [https://github.com/dalegr/riscv-bbl-utils утилиты для Berkeley bootloader] для слияния ядра Linux в bbl.bin с dummy payload.
* [https://riscv.org/specifications RISC-V ISA]
* [https://riscv.org/specifications RISC-V ISA]
* [https://www.sifive.com/blog/all-aboard-part-0-introduction All Aboard] -- интересный блог Палмера Даббелта о RISC-V, toolchain, и т.д.
* [https://www.sifive.com/blog/all-aboard-part-0-introduction All Aboard] -- интересный блог Палмера Даббелта о RISC-V, toolchain, и т.д.
* [http://0x1.tv/20180929H OSSDEVCONF-2018]
* [http://www.osp.ru/os/2020/02/13055471/ RISC-V: стандарт, изменивший мир микропроцессоров]
* [http://www.osp.ru/os/2020/02/13055471/ RISC-V: стандарт, изменивший мир микропроцессоров ]
* [http://habr.com/ru/post/234047/ Наборы команд должны быть свободны: доводы за RISC-V]
* [http://habr.com/ru/post/234047/ Наборы команд должны быть свободны: доводы за RISC-V]



Версия от 08:42, 26 января 2022

RISC-V

RISC-V (читается как “risk-five”) -- архитектура процессоров с открытым набором комманд (ISA). ISA RISC-V имеют лицензию Creative Commons license (CC BY 4.0). Любой желающий может получить финальную версию спецификаций ISA, а также получить черновики разрабатываемых расширений и поучаствовать в их разработке.

Другая ключевая особенность архитектуры RISC-V - её расширяемость. Базовая спецификация архитектуры RISC-V включает в себя только инструкции для записи, сохранения, переходов и целочисленной арифметики. Минимальная спецификация обозначается RV32I, RV64I или RV128I ("I" означает integer) для размеров операнда 4, 8 или 16 байт соответственно. Конкретные реализации могут дополнять базовую спецификацию расширениями, как стандартными, так и специфичными для конкретного вендора или изделия. Стандартные расширения чаще всего обозначаемыми одной латинской буквой, например расширение M содержит инструкции для умножения и деления целых чисел, A -- атомарные операции и т.д.

На данный момент порт Linux работает со спецификацией "RV64IMAFDC":

  • I - целочисленные базовые инструкции;
  • M - умножение и деление целых чисел;
  • A - атомарные операции;
  • F - числа с плавающей запятой одинарной точности;
  • D - числа с плавающей запятой двойной точности;
  • C - "сжатые" (16-битные) инструкции.

Для удобства принято сокращение "G" == "IMAFD", то есть процессоры, поддерживаемые портом, должны реализоввывать архитектуру rv64gc.

Архитектура Сизифа и пакетов RPM, собранных под rv64gc, называется riscv64.

Порт Сизифа

Порт Sisyphus на архитектуру riscv64 (RV64GC) развивается с 2018 года. Поддерживается (и тестируется) работа на платформах:

Для этих платформ выпускаются Регулярные сборки (см. также Regular).

Также для этих платформ выпускался Simply Linux 10.

Репозиторий

RPM/SRPM репозиторий можно найти по ссылке: http://ftp.altlinux.org/pub/distributions/ALTLinux/ports/riscv64/Sisyphus/

В виде sources.list для apt:

rpm [sisyphus-riscv64] http://ftp.altlinux.org/pub/distributions/ALTLinux/ports/riscv64 Sisyphus/riscv64 classic
# rpm [sisyphus-riscv64] http://ftp.altlinux.org/pub/distributions/ALTLinux/ports/riscv64 Sisyphus/riscv64 debuginfo 
rpm [sisyphus-riscv64] http://ftp.altlinux.org/pub/distributions/ALTLinux/ports/riscv64 Sisyphus/noarch  classic

Зеркало на Яндексе (скачивается быстрее, иногда отстаёт):

rpm [sisyphus-riscv64] http://mirror.yandex.ru/altlinux/ports/riscv64 Sisyphus/riscv64 classic 
# rpm [sisyphus-riscv64] http://mirror.yandex.ru/altlinux/ports/riscv64 Sisyphus/riscv64 debuginfo
rpm [sisyphus-riscv64] http://mirror.yandex.ru/altlinux/ports/riscv64 Sisyphus/noarch  classic

Информацию о доступных пакетах удобно смотреть здесь: https://packages.altlinux.org/ru/sisyphus_riscv64/packages/

Сборка пакетов проходит на отдельном узле girar, аналогичном Git.alt. В качестве сборочных узлов сейчас используются платы SiFive HiFive Unmatched. Сборка пакетов идёт в режиме "догоняющей сборочницы": как только какое-то задание (task) проходит в основной Сизиф, специальный робот создаёт аналогичное задание в sisyphus_riscv64. Это означает, что никаких специальных усилий для сборки пакетов под riscv64 предпринимать не нужно: собирайте в Sisyphus. Задания подтверждаются вручную, обычно в тот же день или на следующий день. Если какого-то пакета не хватает (мы собираем не всё подряд) или он долго не обновляется, свяжитесь с iv@.

В очень редких случаях (например, для специфичного riscv64-only софта или для ядер с поддержкой какого-нибудь интересного железа) доступ к girar'у для sisyphus_riscv64 может всё же понадобиться. Его может получить любой участник Team -- попросите iv@ и как-нибудь доверенно передайте ему свой ssh-ключ. Правда, ресурсов там довольно немного, так что умеренность в задачах приветствуется.

Как сообщить об ошибке

Сообщения об ошибках принимаются по адресу https://bugzilla.altlinux.org/ (см. BugTracking).

  • если проблема в пакете, выбирайте продукт Sisyphus, компонент соответсвующий имени пакета, платформа riscv64.
  • если проблема в сборке или образе, выбирайте продукт Regular, компонент, сответствующий DE по умолчанию, платформа riscv64.

ВАЖНО:

  • указать Platform: riscv64 (справа в верхней части формы создания бага)
  • назначить ошибку на iv@altlinux.org

См. также Краткое пособие по использованию Bugzilla

Полезные ссылки