Allwinner D1: различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
 
(не показано 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 /dev/РАЗДЕЛ1
  # mkfs.vfat -n ENV $part1
  mkfs.ext4 -L ROOT /dev/РАЗДЕЛ2
  # 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 ===


TBD
Пакет с собраным 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

Stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.


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

Проще после загрузки на плате, если на ней есть сеть:

  1. apt-get update
  2. 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-карту и попробовать загрузиться. Удачи!

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