Allwinner D1: различия между версиями
Нет описания правки |
(→U-Boot) |
||
(не показано 9 промежуточных версий этого же участника) | |||
Строка 6: | Строка 6: | ||
* [[Allwinner Nezha]] | * [[Allwinner Nezha]] | ||
* [[Lichee RV]] | * [[Sipeed Lichee RV]] | ||
* [[MangoPi MQ-Pro]] | |||
На практике низкая производительность CPU и объёмы памяти сильно ограничивают применение. | |||
Работоспособная поддержка устройств на базе D1 появилась в ядрах un-def, начиная с 6.6; существуют также отдельный flavour, <code>d1-un</code>, поддерживающий больше периферии. | Работоспособная поддержка устройств на базе D1 появилась в ядрах un-def, начиная с 6.6; существуют также отдельный flavour, <code>d1-un</code>, поддерживающий больше периферии. | ||
Строка 12: | Строка 15: | ||
Загрузчик собран в пакет [https://packages.altlinux.org/en/sisyphus_riscv64/srpms/u-boot-sunxi-riscv/ u-boot-sunxi-riscv]. | Загрузчик собран в пакет [https://packages.altlinux.org/en/sisyphus_riscv64/srpms/u-boot-sunxi-riscv/ u-boot-sunxi-riscv]. | ||
== Известные проблемы == | |||
При использовании ядра d1-un с USB ethernet, зачастую встроенный dhcp-клиент NetworkManager не может продлить lease. Переходите на [[Systemd-networkd|systemd-networkd]] или попросите NetworkManager не использовать свой встроенный клиент, например так: | |||
# cat /etc/NetworkManager/conf.d/dhcp-client.conf | |||
[main] | |||
dhcp=dcpcd | |||
== Создание образов == | == Создание образов вручную == | ||
Для всех устройств на основе D1 образы создаются схожим образом. Вам понадобится компьютер с установленной ОС Linux и права root на него. | |||
=== Возьмите SD-карту === | === Возьмите SD-карту === | ||
Подключите к компютеру и определите устройство. Для удобства копирования приведённых ниже команд задайте переменные оболочки: | |||
card=/dev/sdX | card=/dev/sdX | ||
part1=/dev/sdX1 | |||
part2=/dev/sdX2 | |||
или | или | ||
card=/dev/mmcblkX | card=/dev/mmcblkX | ||
part1=${card}p1 | |||
part2=${card}p2 | |||
X замените на нужную букву (чтобы получилось, например, /dev/sda) или цифру (чтобы получилось, например, /dev/mmcblk0). | X замените на нужную букву (чтобы получилось, например, /dev/sda) или цифру (чтобы получилось, например, /dev/mmcblk0). | ||
Строка 29: | Строка 47: | ||
Отчистите sd-карту: | Отчистите sd-карту: | ||
wipefs -a $card | # wipefs -a $card | ||
dd if=/dev/zero of=$card bs=1M count=1 | |||
# dd if=/dev/zero of=$card bs=1M count=1 | |||
Понадобятся 2 раздела: на одном u-boot будет хранить свои переменные (u-boot-sunxi-riscv сконфигурирован сохранять окружение в файл на FAT); на другом другом будет ОС. При использовании GPT необходимо уменьшить размер таблицы, чтобы можно было записать u-boot (см. ниже). | Понадобятся 2 раздела: на одном u-boot будет хранить свои переменные (u-boot-sunxi-riscv сконфигурирован сохранять окружение в файл на FAT); на другом другом будет ОС. При использовании GPT необходимо уменьшить размер таблицы, чтобы можно было записать u-boot (см. ниже). | ||
sfdisk $card << EOF | # sfdisk $card << EOF | ||
label: gpt | label: gpt | ||
first-lba: 8k | first-lba: 8k | ||
Строка 45: | Строка 64: | ||
Создайте файловые системы: | Создайте файловые системы: | ||
mkfs.vfat -n ENV | # mkfs.vfat -n ENV $part1 | ||
mkfs.ext4 -L ROOT / | # mkfs.ext4 -L ROOT $part2 | ||
Важно задать корневому разделу метку <tt>ROOT</tt>, именно на неё будет ориентироваться ОС при поиске корневого раздела. | |||
=== Распаковка rootfs === | === Распаковка rootfs === | ||
TBD | Можно взять достаточно свежую [[Regular/riscv64|регулярную сборку]]. Скачайте тарбол (*.tar.xz) отсюда: http://nightly.altlinux.org/sisyphus-riscv64/snapshots/ | ||
Cмонтируйте второй раздел и распакуйте тарбол в него | |||
# mount $part2 /mnt/ | |||
# cd /mnt | |||
# tar -xavf /path/to/regular-[...].tar.xz | |||
=== Дополнительные действия === | |||
TBD: | |||
* настройка VNC | |||
* ??? | |||
==== Установка ядра d1-un ==== | |||
Проще после загрузки на плате, если на ней есть сеть: | |||
# apt-get update | |||
# update-kernel -y -t d1-un | |||
Но можно и на основной машине при помощи qemu-user (TODO: описать на отдельной странице). | |||
=== U-Boot === | === U-Boot === | ||
Пакет с собраным u-boot можно [https://packages.altlinux.org/en/sisyphus_riscv64/srpms/u-boot-sunxi-riscv/rpms/ скачать] и поставить себе в систему, или просто распаковать. Также он установлен в образе, так что если rootfs ещё смонтирован, можно найти его там. В папке /usr/share/u-boot найдите каталог, соответствующий Вашему устройству, и перейдите в него. Например, для [[Sipeed_Lichee_RV|Lichee RV]] Dock это: | |||
# cd ./usr/share/u-boot/lichee_rv_dock/ | |||
U-Boot должен быть записан на SD-карту по одному из известных смещений, например 8k. | |||
dd if=u-boot-sunxi-with-spl.bin of=$card bs=1024 seek=8 | dd if=u-boot-sunxi-with-spl.bin of=$card bs=1024 seek=8 | ||
=== Завершаем работу === | |||
Не забудьте отмонтировать раздел с корневой файловой системой | |||
# cd; umount ${part2} | |||
На всякий случай дождитесь, пока устройство полностью синхронизируется | |||
# sync | |||
Можно извлечь SD-карту и попробовать загрузиться. Удачи! | |||
== Полезные ссылки == | |||
* https://d1.docs.aw-ol.com -- официальная документация | |||
* https://linux-sunxi.org/D1 -- неофициальная документация от linux-sunxi | |||
{{Category navigation|title=RISC-V|category=RISC-V|sortkey=*}} |
Текущая версия от 14:18, 10 сентября 2024
Allwinner D1 (sun20iw1p1) -- первый SoC от компании Allwinner с архитектурой riscv64. Содержит одно ядро XuanTie C906 (RV64GCV, причём v версии 0.71), разработанное T-Head.
Некоторые устройства на этом SoC поддерживаются портом Сизифа на архитекуру riscv64, включая:
На практике низкая производительность CPU и объёмы памяти сильно ограничивают применение.
Работоспособная поддержка устройств на базе D1 появилась в ядрах un-def, начиная с 6.6; существуют также отдельный flavour, d1-un
, поддерживающий больше периферии.
Загрузчик собран в пакет u-boot-sunxi-riscv.
Известные проблемы
При использовании ядра d1-un с USB ethernet, зачастую встроенный dhcp-клиент NetworkManager не может продлить lease. Переходите на systemd-networkd или попросите NetworkManager не использовать свой встроенный клиент, например так:
# cat /etc/NetworkManager/conf.d/dhcp-client.conf [main] dhcp=dcpcd
Создание образов вручную
Для всех устройств на основе D1 образы создаются схожим образом. Вам понадобится компьютер с установленной ОС Linux и права root на него.
Возьмите SD-карту
Подключите к компютеру и определите устройство. Для удобства копирования приведённых ниже команд задайте переменные оболочки:
card=/dev/sdX part1=/dev/sdX1 part2=/dev/sdX2
или
card=/dev/mmcblkX part1=${card}p1 part2=${card}p2
X замените на нужную букву (чтобы получилось, например, /dev/sda) или цифру (чтобы получилось, например, /dev/mmcblk0).
Разбивка диска
Отчистите sd-карту:
# wipefs -a $card # dd if=/dev/zero of=$card bs=1M count=1
Понадобятся 2 раздела: на одном u-boot будет хранить свои переменные (u-boot-sunxi-riscv сконфигурирован сохранять окружение в файл на FAT); на другом другом будет ОС. При использовании GPT необходимо уменьшить размер таблицы, чтобы можно было записать u-boot (см. ниже).
# sfdisk $card << EOF label: gpt first-lba: 8k table-length: 56 start= 40M, size= 100M, type=C12A7328-F81F-11D2-BA4B-00A0C93EC93B, name="ENV" start= , type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, name="ROOT", attrs="LegacyBIOSBootable" EOF
Создайте файловые системы:
# mkfs.vfat -n ENV $part1 # mkfs.ext4 -L ROOT $part2
Важно задать корневому разделу метку ROOT, именно на неё будет ориентироваться ОС при поиске корневого раздела.
Распаковка rootfs
Можно взять достаточно свежую регулярную сборку. Скачайте тарбол (*.tar.xz) отсюда: http://nightly.altlinux.org/sisyphus-riscv64/snapshots/
Cмонтируйте второй раздел и распакуйте тарбол в него
# mount $part2 /mnt/ # cd /mnt # tar -xavf /path/to/regular-[...].tar.xz
Дополнительные действия
TBD:
- настройка VNC
- ???
Установка ядра d1-un
Проще после загрузки на плате, если на ней есть сеть:
- apt-get update
- update-kernel -y -t d1-un
Но можно и на основной машине при помощи qemu-user (TODO: описать на отдельной странице).
U-Boot
Пакет с собраным u-boot можно скачать и поставить себе в систему, или просто распаковать. Также он установлен в образе, так что если rootfs ещё смонтирован, можно найти его там. В папке /usr/share/u-boot найдите каталог, соответствующий Вашему устройству, и перейдите в него. Например, для Lichee RV Dock это:
# cd ./usr/share/u-boot/lichee_rv_dock/
U-Boot должен быть записан на SD-карту по одному из известных смещений, например 8k.
dd if=u-boot-sunxi-with-spl.bin of=$card bs=1024 seek=8
Завершаем работу
Не забудьте отмонтировать раздел с корневой файловой системой
# cd; umount ${part2}
На всякий случай дождитесь, пока устройство полностью синхронизируется
# sync
Можно извлечь SD-карту и попробовать загрузиться. Удачи!
Полезные ссылки
- https://d1.docs.aw-ol.com -- официальная документация
- https://linux-sunxi.org/D1 -- неофициальная документация от linux-sunxi