HiFive Unmatched: различия между версиями
(не показано 35 промежуточных версий 3 участников) | |||
Строка 3: | Строка 3: | ||
[https://www.sifive.com SiFive] [https://www.sifive.com/boards/hifive-unmatched HiFive Unmatched] -- плата в форм-факторе Mini-ITX с SoC на архитектуре RISCV64GC. Поддерживется [[Ports/riscv64|портом Sisyphus на riscv64]] и используется в нём в качестве основных сборочных узлов. | [https://www.sifive.com SiFive] [https://www.sifive.com/boards/hifive-unmatched HiFive Unmatched] -- плата в форм-факторе Mini-ITX с SoC на архитектуре RISCV64GC. Поддерживется [[Ports/riscv64|портом Sisyphus на riscv64]] и используется в нём в качестве основных сборочных узлов. | ||
В | В дистрибутивных ядрах un-def поддержка Unmatched началась с 5.12.18-alt1.rv64, в u-boot начиная с 2021.07-alt1. | ||
== Образы ALT == | == Образы ALT == | ||
На текущий момент еженедельно собираются регулярные сборки: [[Regular/riscv64]]. | |||
Образы требуется записать через alt-rootfs-installer или вручную. | |||
=== Запись с помощью alt-rootfs-installer === | |||
Требуется установить alt-roofs-installer версии не ниже 0.5.2. | |||
alt- | <source lang="shell"> | ||
root# alt-rootfs-installer --target=HiFive-Unmatched --image-in=/path/to/<image>-riscv64.img.xz --media=/dev/sdX | |||
</source> | |||
Если на плате не установлен графический адаптер и записывается образ с графикой, то необходимо добавить опцию --vnc=1. | |||
Про режим подробнее написано в: [[ Regular/riscv64#VNC ]]. | |||
=== Установка вручную === | === Установка образов вручную === | ||
Для запуска образов на SiFive HiFive Unmatched (FU740) SoC необходимо выполнить следующие шаги: | |||
'''Шаг 0.''' Запись образа и монтирование: | |||
<source lang="shell"> | |||
root$ xzcat /path/to/<image>-riscv64.img.xz | dd of=/dev/sdx bs=4M status=progress | |||
root$ udiskctl mount /dev/sdX2 | |||
</source> | |||
Корневой раздел будет примонтирован в /run/media/root/<UUID> | |||
'''Шаг 1.''' Добавляем разделы для записи U-Boot SPL (Secondary Program Loader) и U-Boot : | |||
<source lang="shell"> | |||
root$ sgdisk -a 1 \ | |||
--new=3:34:2081 --change-name=3:'spl' --typecode=3:5B193300-FC78-40CD-8002-E86C45580B47 \ | |||
--new=4:2082:10273 --change-name=4:'uboot' --typecode=4:2E54B353-1271-4842-806F-E436D6AF6985 \ | |||
/dev/sdX | |||
</source> | |||
'''Шаг 2.''' U-Boot SPL (Secondary Program Loader) и U-Boot находятся в корневом разделе записанного образа. | |||
Запишем их на разделы 3 и 4 соответственно: | |||
<source lang="shell"> | |||
root$ dd if=/run/media/root/<UUID>/usr/share/u-boot/sifive_unmatched/u-boot-spl.bin of=/dev/sdX3 bs=1M | |||
root$ dd if=/run/media/root/<UUID>/usr/share/u-boot/sifive_unmatched/u-boot.itb of=/dev/sdX4 bs=1M | |||
root$ sync | |||
</source> | |||
'''Шаг 2.б.''' Альтернативный вариант: скачаем последнюю версию пакета u-boot-sifive. Можно воспользоваться ссылкой riscv64 со страницы https://packages.altlinux.org/ru/sisyphus_riscv64/srpms/u-boot-sifive/rpms/. | |||
Из пакета нужно извлечь файлы u-boot-spl.bin и u-boot.itb и записать их на разделы 2 и 3 соответственно: | |||
<source lang="shell"> | |||
user$ rpm2cpio u-boot-sifive-*riscv64.rpm | cpio -vi --to-stdout './usr/share/u-boot/sifive_unmatched/u-boot-spl.bin' > u-boot-spl.bin | |||
user$ rpm2cpio u-boot-sifive-*riscv64.rpm | cpio -vi --to-stdout './usr/share/u-boot/sifive_unmatched/u-boot.itb' > u-boot.itb | |||
root$ dd if=u-boot-spl.bin of=/dev/sdX3 bs=1M | |||
root$ dd if=u-boot.itb of=/dev/sdX4 bs=1M | |||
root$ sync | |||
</source> | |||
'''Шаг 3.''' Переключить режим загрузки с EFI на extlinux.conf. Для этого необходимо убрать флаг boot с раздела fat32: | |||
<source lang="shell"> | |||
root$ parted /dev/sdX set 1 boot off | |||
</source> | |||
=== VNC === | === VNC === | ||
По умолчанию образ рассчитан на работу | По умолчанию образ рассчитан на работу с видеокартой. Если видеокарты нет, то нужно активировать режим vnc: [[ Regular/riscv64#VNC ]]. | ||
== Root на NVME == | |||
Можно скопировать корневую файловую систему с SD карты на NVME и настроить её использование следующим образом: | |||
Создайте раздел на NVME, например, с помощью fdisk. | |||
Отформатируйте раздел NVME: | |||
mkfs.ext4 -m1 -L ROOT /dev/nvme0n1p1 | |||
Смонтируйте раздел: | |||
mount /dev/nvme0n1p1 /mnt | |||
Скопируйте на раздел NVME содержимое rootfs: | |||
rsync -ax / /mnt | |||
Опция -x позволяет скопировать только содержимое rootfs, но не других подмонтированных файловых систем. | |||
Копирование может занять значительное время. | |||
Посмотрите UUID раздела NVME, например, так: | |||
lsblk -f | |||
NAME FSTYPE LABEL UUID ... | |||
... | |||
└─nvme0n1p1 ext4 1.0 ROOT dc155086-4ee4-42f6-87be-bcc67b2b93e6 ... | |||
Исправьте значение UUID в файле /mnt/boot/extlinux/extlinux.conf | |||
append root=UUID=dc155086-4ee4-42f6-87be-bcc67b2b93e6 ... | |||
Исправьте значение UUID в файле /mnt/etc/fstab | |||
=== EFI на NVME | UUID=dc155086-4ee4-42f6-87be-bcc67b2b93e6 / ext4 ... | ||
== EFI на NVME == | |||
TBD. | TBD. | ||
=== | == Grub == | ||
В репозиториях собран grub 2.06, работающий на Unmatched с поверх u-boot, реализующего EFI. Однако такая конфигурация работает менее стабильно чем более простая, в которой u-boot непосредственно загружает ядро. Поэтому использование grub с Unmatched пока рекомендуется исключительно для тестирования grub. | |||
TBD: описать установку grub. | |||
== Обновление U-Boot на SD-карте == | |||
[[Файл:HiFive Unmatched -- MSEL=1011.jpg|мини|MSEL[3:0] = 1011]] | |||
На данный момент в ALT u-boot (SPL и proper) автоматически никак не обновляется. Если после обновления пакета u-boot-sifive в репозитории хочется обновить U-Boot на SD-карте, это можно сделать, выполнив следующие команды от рута: | |||
cd /usr/share/u-boot/sifive_unmatched | |||
by_pt () { lsblk -lo NAME,PARTTYPE | grep "$1" | cut -d\ -f1; } | |||
dd if=u-boot-spl.bin of=/dev/$(by_pt 5b193300-fc78-40cd-8002-e86c45580b47) bs=1M | |||
dd if=u-boot.itb of=/dev/$(by_pt 2e54b353-1271-4842-806f-e436d6af6985) bs=1M | |||
sync | |||
Для загрузки с SD-карты (и игнорирования SPI flash) рекомендуется перевести переключатели MSEL (рядом с серийным номером около батарейки) в положение 1011 (см. фото). Это положение по умолчанию, соответвующее загрузке с SD-карты. | |||
== Загрузка с SPI Flash == | |||
На HiFive Unmatched есть встроенная SPI флешка. С её помощью можно загрузиться без SD-карты: на SPI Flash записывается u-boot SPL и основной u-boot, а ядро и корневой раздел находятся на M2 NVME. | |||
Вам понадобится достаточно свежее ядро (подойдёт наш un-def >= 5.16.8-alt2.rv64) и u-boot (u-boot-sifive >= 2022.01-alt2). Инструкция по прошивке есть, например, [https://github.com/u-boot/u-boot/blob/v2022.01/doc/board/sifive/unmatched.rst#booting-from-spi документации U-Boot]. К ALT её можно адаптировать так: | |||
==== Разметим SPI flash ==== | |||
* Загрузитесь, например, с SD-карты. Убедитесь, что флешка обнаружена ядром: | |||
# ls -l /dev/mtdblock0 | |||
brw-rw---- 1 root disk 31, 0 мая 5 21:55 /dev/mtdblock0 | |||
# lsblk | grep mtd | |||
mtdblock0 31:0 0 32M 0 disk | |||
* Поставьте <tt>u-boot-sifive</tt> (содержит собранные u-boot и u-boot SPL, которые мы будем записывать) и <tt>gdisk</tt> (содержит утилиту <tt>sgdisk</tt>, которой мы будем пользоваться). | |||
apt-get install u-boot-sifive gdisk | |||
* Разметьте флешку: | |||
sgdisk --clear -a 1 \ | |||
--new=1:40:2087 --change-name=1:spl --typecode=1:5B193300-FC78-40CD-8002-E86C45580B47 \ | |||
--new=2:2088:10279 --change-name=2:uboot --typecode=2:2E54B353-1271-4842-806F-E436D6AF6985 \ | |||
--new=3:10280:10535 --change-name=3:env --typecode=3:3DE21764-95BD-54BD-A5C3-4ABE786F38A8 \ | |||
/dev/mtdblock0 | |||
==== Запишем u-boot ==== | |||
* Запишите на неё SPL и основной u-boot: | |||
cd /usr/share/u-boot/sifive_unmatched | |||
dd if=u-boot-spl.bin of=/dev/mtdblock0 bs=4096 seek=5 conv=sync | |||
dd if=u-boot.itb of=/dev/mtdblock0 bs=4096 seek=261 conv=sync | |||
Эти же две команды можно использовать для обновления U-Boot на SPI flash после установки новой версии пакета <tt>u-boot-sifive</tt>. | |||
==== Включение загрузки с SPI flash ==== | |||
[[Файл:HiFive Unmatched MSEL 0110.png|мини|альт=MSEL[3:0]: 0110|MSEL[3:0] = 0110]] | |||
* Выключите unmatched | |||
* Переведите переключатели MSEL (рядом с серийным номером около батарейки) в положение 0110 (см. фото, 0 ближе к процессору). | |||
* Можно вынуть SD-карту и загрузиться. Обратите внимание на сообщения вначале загрузки: | |||
U-Boot SPL 2022.01 (Jan 25 2022 - 16:59:30 +0000) | |||
Trying to boot from SPI | |||
U-Boot 2022.01 (Jan 25 2022 - 16:59:30 +0000) | |||
[...] | |||
== Tips & tricks == | |||
=== U-Boot и порядок загрузки === | |||
Порядок загрузки по умолчанию: | |||
boot_targets=nvme0 usb0 mmc0 scsi0 pxe dhcp | |||
'''nvme0''': загрузка с nvme, если есть. | |||
'''usb0''': с USB-флешки (или жёсткого диска или SSD, подключенного к USB через переходник). На Unmatched это работает на USB-портах, расположенных ближе к разъёму ethernet; в двух других U-Boot может не видеть флешку. На флешке может быть ISO, записанная <tt>dd</tt> (протестировано на [[Regular/riscv64|регулярках]]), или готовый rootfs, например записанный <tt>alt-rootfs-installer</tt>. | |||
'''mmc0''': загрузка с SD-карты (если есть). | |||
Даже при наличии других носителей, можно загрузиться с нужного "вручную". Например, для загрузки с USB при подключенном NVME-носителе: | |||
# Подключитесь к uart и включите плату. | |||
# Когда появится приглашение "<tt>Hit any key to stop autoboot:</tt>", нажмите любую клавишу. | |||
# Введите следующие команды | |||
pci enum | |||
run bootcmd_usb0 | |||
Вместо <tt>run bootcmd_usb0</tt> можно дать команду <tt>run bootcmd_mmc0</tt> для загрузки с SD-карты. | |||
=== Светодиоды === | |||
Сменить цвет яркого светодиода на случайный (требуется ядро 6.0.3 или выше): | |||
od -Anone -t u1 -N3 /dev/urandom > /sys/class/leds/d2/multi_intensity | |||
{{Category navigation|title=RISC-V|category=RISC-V|sortkey=*}} | {{Category navigation|title=RISC-V|category=RISC-V|sortkey=*}} | ||
[[en:HiFive Unmatched]] |
Текущая версия от 11:37, 20 декабря 2022
SiFive HiFive Unmatched -- плата в форм-факторе Mini-ITX с SoC на архитектуре RISCV64GC. Поддерживется портом Sisyphus на riscv64 и используется в нём в качестве основных сборочных узлов.
В дистрибутивных ядрах un-def поддержка Unmatched началась с 5.12.18-alt1.rv64, в u-boot начиная с 2021.07-alt1.
Образы ALT
На текущий момент еженедельно собираются регулярные сборки: Regular/riscv64. Образы требуется записать через alt-rootfs-installer или вручную.
Запись с помощью alt-rootfs-installer
Требуется установить alt-roofs-installer версии не ниже 0.5.2.
root# alt-rootfs-installer --target=HiFive-Unmatched --image-in=/path/to/<image>-riscv64.img.xz --media=/dev/sdX
Если на плате не установлен графический адаптер и записывается образ с графикой, то необходимо добавить опцию --vnc=1. Про режим подробнее написано в: Regular/riscv64#VNC .
Установка образов вручную
Для запуска образов на SiFive HiFive Unmatched (FU740) SoC необходимо выполнить следующие шаги:
Шаг 0. Запись образа и монтирование:
root$ xzcat /path/to/<image>-riscv64.img.xz | dd of=/dev/sdx bs=4M status=progress
root$ udiskctl mount /dev/sdX2
Корневой раздел будет примонтирован в /run/media/root/<UUID>
Шаг 1. Добавляем разделы для записи U-Boot SPL (Secondary Program Loader) и U-Boot :
root$ sgdisk -a 1 \
--new=3:34:2081 --change-name=3:'spl' --typecode=3:5B193300-FC78-40CD-8002-E86C45580B47 \
--new=4:2082:10273 --change-name=4:'uboot' --typecode=4:2E54B353-1271-4842-806F-E436D6AF6985 \
/dev/sdX
Шаг 2. U-Boot SPL (Secondary Program Loader) и U-Boot находятся в корневом разделе записанного образа. Запишем их на разделы 3 и 4 соответственно:
root$ dd if=/run/media/root/<UUID>/usr/share/u-boot/sifive_unmatched/u-boot-spl.bin of=/dev/sdX3 bs=1M
root$ dd if=/run/media/root/<UUID>/usr/share/u-boot/sifive_unmatched/u-boot.itb of=/dev/sdX4 bs=1M
root$ sync
Шаг 2.б. Альтернативный вариант: скачаем последнюю версию пакета u-boot-sifive. Можно воспользоваться ссылкой riscv64 со страницы https://packages.altlinux.org/ru/sisyphus_riscv64/srpms/u-boot-sifive/rpms/.
Из пакета нужно извлечь файлы u-boot-spl.bin и u-boot.itb и записать их на разделы 2 и 3 соответственно:
user$ rpm2cpio u-boot-sifive-*riscv64.rpm | cpio -vi --to-stdout './usr/share/u-boot/sifive_unmatched/u-boot-spl.bin' > u-boot-spl.bin
user$ rpm2cpio u-boot-sifive-*riscv64.rpm | cpio -vi --to-stdout './usr/share/u-boot/sifive_unmatched/u-boot.itb' > u-boot.itb
root$ dd if=u-boot-spl.bin of=/dev/sdX3 bs=1M
root$ dd if=u-boot.itb of=/dev/sdX4 bs=1M
root$ sync
Шаг 3. Переключить режим загрузки с EFI на extlinux.conf. Для этого необходимо убрать флаг boot с раздела fat32:
root$ parted /dev/sdX set 1 boot off
VNC
По умолчанию образ рассчитан на работу с видеокартой. Если видеокарты нет, то нужно активировать режим vnc: Regular/riscv64#VNC .
Root на NVME
Можно скопировать корневую файловую систему с SD карты на NVME и настроить её использование следующим образом:
Создайте раздел на NVME, например, с помощью fdisk.
Отформатируйте раздел NVME:
mkfs.ext4 -m1 -L ROOT /dev/nvme0n1p1
Смонтируйте раздел:
mount /dev/nvme0n1p1 /mnt
Скопируйте на раздел NVME содержимое rootfs:
rsync -ax / /mnt
Опция -x позволяет скопировать только содержимое rootfs, но не других подмонтированных файловых систем. Копирование может занять значительное время.
Посмотрите UUID раздела NVME, например, так:
lsblk -f NAME FSTYPE LABEL UUID ... ... └─nvme0n1p1 ext4 1.0 ROOT dc155086-4ee4-42f6-87be-bcc67b2b93e6 ...
Исправьте значение UUID в файле /mnt/boot/extlinux/extlinux.conf
append root=UUID=dc155086-4ee4-42f6-87be-bcc67b2b93e6 ...
Исправьте значение UUID в файле /mnt/etc/fstab
UUID=dc155086-4ee4-42f6-87be-bcc67b2b93e6 / ext4 ...
EFI на NVME
TBD.
Grub
В репозиториях собран grub 2.06, работающий на Unmatched с поверх u-boot, реализующего EFI. Однако такая конфигурация работает менее стабильно чем более простая, в которой u-boot непосредственно загружает ядро. Поэтому использование grub с Unmatched пока рекомендуется исключительно для тестирования grub.
TBD: описать установку grub.
Обновление U-Boot на SD-карте
На данный момент в ALT u-boot (SPL и proper) автоматически никак не обновляется. Если после обновления пакета u-boot-sifive в репозитории хочется обновить U-Boot на SD-карте, это можно сделать, выполнив следующие команды от рута:
cd /usr/share/u-boot/sifive_unmatched by_pt () { lsblk -lo NAME,PARTTYPE | grep "$1" | cut -d\ -f1; } dd if=u-boot-spl.bin of=/dev/$(by_pt 5b193300-fc78-40cd-8002-e86c45580b47) bs=1M dd if=u-boot.itb of=/dev/$(by_pt 2e54b353-1271-4842-806f-e436d6af6985) bs=1M sync
Для загрузки с SD-карты (и игнорирования SPI flash) рекомендуется перевести переключатели MSEL (рядом с серийным номером около батарейки) в положение 1011 (см. фото). Это положение по умолчанию, соответвующее загрузке с SD-карты.
Загрузка с SPI Flash
На HiFive Unmatched есть встроенная SPI флешка. С её помощью можно загрузиться без SD-карты: на SPI Flash записывается u-boot SPL и основной u-boot, а ядро и корневой раздел находятся на M2 NVME.
Вам понадобится достаточно свежее ядро (подойдёт наш un-def >= 5.16.8-alt2.rv64) и u-boot (u-boot-sifive >= 2022.01-alt2). Инструкция по прошивке есть, например, документации U-Boot. К ALT её можно адаптировать так:
Разметим SPI flash
- Загрузитесь, например, с SD-карты. Убедитесь, что флешка обнаружена ядром:
# ls -l /dev/mtdblock0 brw-rw---- 1 root disk 31, 0 мая 5 21:55 /dev/mtdblock0 # lsblk | grep mtd mtdblock0 31:0 0 32M 0 disk
- Поставьте u-boot-sifive (содержит собранные u-boot и u-boot SPL, которые мы будем записывать) и gdisk (содержит утилиту sgdisk, которой мы будем пользоваться).
apt-get install u-boot-sifive gdisk
- Разметьте флешку:
sgdisk --clear -a 1 \ --new=1:40:2087 --change-name=1:spl --typecode=1:5B193300-FC78-40CD-8002-E86C45580B47 \ --new=2:2088:10279 --change-name=2:uboot --typecode=2:2E54B353-1271-4842-806F-E436D6AF6985 \ --new=3:10280:10535 --change-name=3:env --typecode=3:3DE21764-95BD-54BD-A5C3-4ABE786F38A8 \ /dev/mtdblock0
Запишем u-boot
- Запишите на неё SPL и основной u-boot:
cd /usr/share/u-boot/sifive_unmatched dd if=u-boot-spl.bin of=/dev/mtdblock0 bs=4096 seek=5 conv=sync dd if=u-boot.itb of=/dev/mtdblock0 bs=4096 seek=261 conv=sync
Эти же две команды можно использовать для обновления U-Boot на SPI flash после установки новой версии пакета u-boot-sifive.
Включение загрузки с SPI flash
- Выключите unmatched
- Переведите переключатели MSEL (рядом с серийным номером около батарейки) в положение 0110 (см. фото, 0 ближе к процессору).
- Можно вынуть SD-карту и загрузиться. Обратите внимание на сообщения вначале загрузки:
U-Boot SPL 2022.01 (Jan 25 2022 - 16:59:30 +0000) Trying to boot from SPI U-Boot 2022.01 (Jan 25 2022 - 16:59:30 +0000) [...]
Tips & tricks
U-Boot и порядок загрузки
Порядок загрузки по умолчанию:
boot_targets=nvme0 usb0 mmc0 scsi0 pxe dhcp
nvme0: загрузка с nvme, если есть.
usb0: с USB-флешки (или жёсткого диска или SSD, подключенного к USB через переходник). На Unmatched это работает на USB-портах, расположенных ближе к разъёму ethernet; в двух других U-Boot может не видеть флешку. На флешке может быть ISO, записанная dd (протестировано на регулярках), или готовый rootfs, например записанный alt-rootfs-installer.
mmc0: загрузка с SD-карты (если есть).
Даже при наличии других носителей, можно загрузиться с нужного "вручную". Например, для загрузки с USB при подключенном NVME-носителе:
- Подключитесь к uart и включите плату.
- Когда появится приглашение "Hit any key to stop autoboot:", нажмите любую клавишу.
- Введите следующие команды
pci enum run bootcmd_usb0
Вместо run bootcmd_usb0 можно дать команду run bootcmd_mmc0 для загрузки с SD-карты.
Светодиоды
Сменить цвет яркого светодиода на случайный (требуется ядро 6.0.3 или выше):
od -Anone -t u1 -N3 /dev/urandom > /sys/class/leds/d2/multi_intensity