Одноплатные компьютеры на RISC-V процессоре сравнительно новое веяние. Поднебесная активно работает над снижением зависимости от западных информационных систем и технологий, именно поэтому новая открытая архитектура RISC-V одна из ключевых ставок Китая. Для продвижения в массы китайский чипмейкер Allwinner на базе ядра Alibaba/T-Head Xuantie C906 RISC-V разработал процессор Allwinner D1 и упрощенную модификацию Allwinner D1s. На сегодня разработано несколько одноплатников на RISC-V процессоре, и в первенство по массовости вырвалась компания Sipeed с модульным компьютером Система-на-Модуле Lichee RV с 512 Мб ОЗУ всего за $16.90, работающим на Linux. Разработчик может спроектировать несущую плату для данного модуля, добавив необходимые периферийные устройства и разъемы. В результате получится решение максимально подготовленное для себя. Данный модуль предназначен для создания интеллектуальных информационных систем, терминалов, роботов, и т.д. В первой части рассмотрим архитектуру процессора, возможности модуля, дистрибутивы, программное обеспечение. Во второй части детально рассмотрим порты и интерфейсы для программирования, напишем программы на Python и C#.
Архитектура RISC-V
Архитектура RISC-V предоставляет открытую и гибкую систему машинных инструкций, позволяющую создавать микропроцессоры для различных задач, не ограничивает сферы использования (включая военную промышленность), и при этом не требует отчислений (royalties). RISC-V позволяет создавать полностью открытые SoC и процессоры. В настоящее время на базе спецификаций RISC-V компании и сообщества под свободными лицензиями (BSD, MIT, Apache 2.0) разрабатывают несколько десятков вариантов микропроцессорных ядер, SoC. Архитектура RISC-V поддерживается GNU/Linux (присутствует начиная с Glibc 2.27, binutils 2.30, gcc 7 и ядра Linux 4.15), FreeBSD и OpenBSD, многие пакеты доступные для архитектуры x86 и ARM уже перекомпилировы под новую архитектуру RISC-V.
Разработкой связанной с RISC-V занимаются различные китайские компании. Среди них выделяется компания Alibaba/T-Head предоставив миру, в открытый доступ ядра C906 и C910. На базе этих ядер можно самостоятельно разработать свой процессор (SoC) и начать массовое производство. Открытый доступ к документации ядра процессора облегчает разработку программного обеспечения и портирование необходимых драйверов.
Схемы, описания аппаратных блоков на языке Verilog, симулятор и сопутствующая проектная документация опубликованы на GitHub под лицензией Apache 2.0. Отдельно опубликованы адаптированные для работы с чипами XuanTie версии компиляторов GCC и LLVM, библиотека Glibc, инструменты Binutils, загрузчик U-Boot, ядро Linux, middleware с интерфейсом OpenSBI (RISC-машины-V Supervisor Binary Interface), платформа для создания встраиваемых систем на базе Linux Yocto Project, а также патчи для запуска Android. Ядра OpenE902, OpenE906, OpenC906 и OpenC910, доступны на GitHub под лицензией Apache 2.0.
Чип XuanTie C910 наиболее мощный из доступных на сегодняшний момент, выпускается по 12-нм техпроцессу в 16-ядерном варианте с тактовой частотой 2,5 ГГц. Производительность чипа в тесте Coremark достигает 7,1 Coremark/МГц, что превосходит процессоры ARM Cortex-A73. Всего Alibaba разработала 11 различных чипов RISC-V, из которых уже выпущено более 2,5 млрд экземпляров, и компания работает над созданием экосистемы для дальнейшего продвижения архитектуры RISC-V не только для IoT-устройств, но и для других типов вычислительных систем.
Процессор Allwinner D1 на RISC-V архитектуре
Ядро XuanTie C906 предназначено для высокоэнергоэффективных систем, для которых не требуется высокая производительность. Alibaba обещает дополнительную поддержку, включая предоставление SDK без каких либо финансовых отчислений.
Однако те, кто заинтересован в разработке SoC на базе данных ядер, должны помнить, что они были созданы до ратификации некоторых стандартов RISC-V, в частности, векторных расширений. В результате разработанные ядра технически не полностью соответствуют текущей спецификации RISC-V и разработчики ядра Linux уже высказывали опасения по поводу того, как C906, будет поддерживаться в основной ветке Linux ядра. Идет речь о соответствие ядра ядра XuanTie C906 спецификации векторных расширений (RISC-V Vector Extension) версии v0.7.1 от 2019 г., в то время как ратифицирован окончательный вариант версии 1.0 от 20 сентября 2021.
Возможности процессора Allwinner D1 на ядре XuanTie C906
Процессор Allwinner D1 основан на ядре Alibaba/T-Head XuanTie C906 64-bit RISC-V ISA, работает на частоте 1 ГГц, содержит 5-ступенчатый конвейер, кеш 64KB для инструкций и данных, контроллер прерываний и 128-bit шину AXI 4.0. Максимально поддерживаем объем ОЗУ составляет 2 Гб DDR3. Компания Allwinner добавила в процессор DSP HiFi4, ускоритель G2D для 2D графики и декодирования видео. Это позволяет выводить видео H.265/H.264 с качеством 1080p@60fps (или 4K@30fps), и кодировать JPEG/MJPEG (CSI/CVBS) до 1080p@60fps. Как и другие SoC RISC-V на сегодняшний день, в нем отсутствует 3D-графический процессор (GPU). Для видео вывода доступны интерфейсы: RGB LCD до 1080p@60fps, LVDS до 1080p@60fps, 4-lane MIPI DSI до 1080p@60fps, HDMI V1.4 до 4K@30fps, CVBS OUT с поддержкой NTSC и PAL. Техпроцесс изготовления составляет 22 нм.
Структурная схема процессора Allwinner D1
Модуль Sipeed Lichee RV
Форм-фактор платы Sipeed Lichee RV это модуль SoM (System-on-Module) с двойным разъемом M.2. На плате размещена память 512 МБ DDR3, порт USB-C OTG, слот для карт MicroSD и разъем для подключения SPI дисплея. На разъем M.2 выведены интерфейсы HDMI, MIPI-DSI, RGB/MCU display, RGMII, audio, SDIO, GPIO, и другие. Размер платы составляет 46,2 x 25 мм (1,8" x 1") питается от источника питания в 5V, потребление составляет 500 mAh.
Детальное рассмотрение Lichee RV
Вид сверху и снизу платы Lichee RV
Спецификация Sipeed Lichee RV:
Процессор: SoC – Allwinner D1 single-core XuanTie C906 64-bit RISC-V processor @ 1.0 GHz with HiFi4 DSP, G2D 2D graphics accelerators.
Оперативная память: 512MB DDR3 memory @ 792 MHz.
Пользовательская память: слот для MicroSD карт.
Видео: опционально дисплей диагональю 1.14 дюйма на SPI интерфейсе.
GPU: поддержка только ускорения 2D, пост-обработка Allwinner SmartColor 2.0, поддержка деинтерлейсинга, аппаратный ускоритель G2D.
USB: порт USB Type-C OTG.
Отладка(Debugging): 4-pin UART разъем для Serial Console, USB ADB debugging.
Разное: индикатор подачи питания, FEL кнопка.
GPIO и программируемые интерфейсы: разъем 2x M.2 B-key edge для контактов ввода/вывода интерфейсов: HDMI, MIPI DSI, RGB, Ethernet, Audio, SDIO, GPIO и т.д.
Питание: 5V/0.5A через порт USB-C.
Размер: 43.2 x 25 мм.
Возле разъема USB-C располагается интерфейс UART предназначенный для отладки запуска операционной системы, по умолчанию контакты не припаяны.
Продается по цене $16.90, что существенно дешевле аналогичной платы Nezha SBC. Доступно два варианта платы, только модуль Lichee RV D1 (вариант licheeRV D1) и с 1.14 дюймовым дисплеем на SPI интерфейсе (вариант licheeRV D1 Suit).
Sipeed Lichee RV с дисплеем на SPI интерфейсе aka «Sipeed LicheeRV Suit»
Дополнительный дисплей 1.14" 135×240 SPI LCD работает на контроллере Sitronix ST7789V (Datasheets). Драйвер включен в основную ветку ядра Linux, раздел FBTFT для использования RGB порта. Так же существует версия драйвера TinyDRM.
Терминал Lichee RV 86 Panel на базе Lichee RV
Lichee RV 86 Panel
Для разработчиков информационных систем компания Sipeed разработала Starter kit терминал Lichee RV 86 Panel предназначенный для систем управления, например для умного дома. Терминал оборудован 4-дюймовым IPS Touch LCD экраном, двумя MEMS микрофонами и небольшим динамиком, Ethernet RJ45 разъемом, 2.4G Wi-Fi + BT модулем, 2x8 pin GPIO 2.54 мм. Корпус сделан из SLA пластика на 3D-принтере. Поддерживается WAFT (WebAssembly Framework для вещей).
Основные элементы и разъемы несущей платы для Lichee RV 86 Panel
Видео о Lichee RV 86 Panel:
Несущая плата Lichee RV Dock для Sipeed Lichee RV
Форм-фактор платы Lichee RV подразумевает подключение к несущей плате с разводкой периферийных устройств и линий электропитания. В конце прошлого года Sipeed выпустила несущую Dock-плату с разводкой контактов GPIO шагом 2.54 мм, разъемом HDMI и USB, опционально устанавливается модуль Wi-Fi.
При небольших размерах 65 x 40 мм (2.56″ x 1.57″) несущая плата Lichee RV Dock включает в себя модуль Realtek RTL8723DS беспроводной связи Wi-Fi 4 (802.11b/g/n) и Bluetooth 4.2, порт HDMI с поддержкой вывода 4K@30fps, порт USB Type-A, 40-контактный разъем GPIO частично совместимый с аналогичным разъемом на Raspberry Pi 3, и различные разъемы включая возможность подключения динамиков. Присутствует RGB светодиод и кнопка сброса (reset).
Спецификация платы Lichee RV Dock:
Система на модуле (System on Module или SOM): модуль Lichee RV на базе RISC-V процессора Allwinner D1@1 GHz, 512MB DDR3.
Пользовательская память: опционально SPI память.
Видео: HDMI порт с поддержкой видео до 4K@30fps, опционально RGB интерфейс с поддержкой видео до 720p@30fps через модуль «Display Shell», опционально MIPI DSI интерфейс с поддержкой видео до 1080p@60fps через модуль «Display Shell».
Связь: опционально беспроводной модуль Realtek RTL8723DS с поддержкой Wi-Fi 4 (802.11b/g/n) и Bluetooth 4.2. На плате размещена встроенная SMT антенна и разъем IPEX для подключения внешней антенны.
Звук: 3 Вт усилитель вывода на динамики, 1x аналоговый электретный микрофон, поддержка микрофонного массива Mic Array R6 (включает шесть микрофонов) через плату расширения, подключается на разъем 30P FPC.
USB: порт USB Type-A, дополнительно еще один порт USB-C OTG на самом модуле Lichee RV.
Разное: светодиод RGB на микросхеме WS2812, кнопка сброса (reset key), пользовательская кнопка (user key, ADC).
Expansions Header: разъем 40-pins с шагом 2,54 мм частично совместимый с Raspberry Pi включая GPIOs, I2C/TWI, SPI, UART, PWM.
Размер: 65 x 40 мм.
После установки основного модуля Lichee RV в Lichee RV Dock, плата очень походит на Raspberry Pi Zero.
Sipeed Lichee RV Dock с подключенной платой Lichee RV
Sipeed Lichee RV Dock без платы Lichee RV
Размещение основных модулей и разъемов на плате
Модуль беспроводной связи Realtek RTL8723DS
Sipeed Lichee RV Dock, вид снизу
В официальном магазине Sipeed доступно несколько вариантов приобретения платы. Можно купить плату Dock вместе с основным модулем Lichee RV и без него. Если желаете выбрать другой Wi-Fi модуль, то доступен вариант платы Dock без напаянного модуля Realtek RTL8723DS. Доставка в РФ осуществляется службой Hongkong Post. Для надежности продавец упаковывает товар в твердую картонную коробку. Для более простой работы рекомендуется приобретать Dock с модулем Wi-Fi в связи с возможностью сразу из коробки подключить плату к сети Интернет для установки и обновления ПО.
Видео о Sipeed Lichee RV Dock:
Распиновка
Разъем GPIO на 40-pins с шагом 2,54 мм частично совместим с аналогичным разъемом Raspberry Pi, так же присутствую линии питания на 3.3V и 5V, но некоторые выводы GND не соответствуют выводам на Raspberry Pi.
Выведены интерфейсы: 1x TWI, 1x SPI, 6x PWM, 4x UART, MIPI DSI, RGB, LVDS.
Для отладки используется интерфейс UART0, контакты PB8 — UART0_TX и PB9 — UART0_RX.
Распиновка Lichee RV Dock
Дополнительные модули
На плате Lichee RV Dock специально выведен разъем 30P FPC для подключения массива микрофонов Mic Array R6. Данный модуль предназначен для создания интеллектуальных голосовых систем.
Mic Array R6
Плата Display Shell подключается к Lichee RV Dock на 40-pins разъем GPIO. Предоставляет разводку FPC разъемов для подключения LCD панелей по RGB и MIPI DSI включая сенсорные. На субъективный взгляд бесполезная вещь т.к. разводку под конкретную LCD панель придется делать самостоятельно.
Плата Display Shell для Lichee RV Dock
Операционные системы
Из операционных систем поддерживаются:
- Tina Linux на базе OpenWrt;
- Debian Desktop;
- Linux с поддержкой среды Alibaba WAFT (WAFT — это Framework для AIOT, созданный компанией Alibaba на основе WebAssembly и собственного механизма рендеринга).
Часть образов опубликовано на сайте разработчика Sipeed /LICHEE/D1/Lichee_RV/SDK/image, другая на Mega.nz.
Все дальнейшие работы выполнялись на образе 20211230_LicheeRV_debian_d1_hdmi_8723ds.7z (1,07 ГБ). Данный образ построен на Debian и предназначен для использования вместе с Lichee RV Dock, поддерживается вывод видео по HDMI и Wi-Fi чип 8723ds.
Для загрузки прошивки на microSD карту (минимальный размер 16 Гб) необходимо использовать специализированную программу PhoenixCard, интерфейс который выполнен на китайском языке. Если в вашей версии Windows не добавлен китайский язык, то скорее всего кнопки и метки будут без надписей. Но на самом деле это не проблема, все предельно просто, вот документация на китайском языке.
Программа записи прошивки PhoenixCard
Первое, выбираем распакованный образ в формате *.img. Второе, выбираем второй пункт меню. Третье, нажимаем на первую кнопку из трех доступных и ждем 15 минут в не зависимости от размера исходного образа.
Подключение по UART
Если для взаимодействия с системой у вас нет возможности подключить экран по HDMI интерфейсу, то используя простой USB-TTL UART конвертер можно решить эту задачу. Для этого необходимо подключить контакты RX, TX, GND конвертера к соответствующим контактам Dock платы. Для примера, подключим конвертер на базе чипа CH340G.
Схема подключения USB-TTL UART конвертера
Для подключения удобно использовать терминал MobaXterm. Выберем появившийся COM порт в операционной системе, выставим скорость 115200 bps, и в терминале появится загрузочный экран:
Загрузочный экран Lichee RV
Debian. Настройка Wi-Fi и оборудование
После подачи питания по умолчанию загрузится графическая оболочка LXDE. Для авторизации необходимо указать: логин — sipeed или root, пароль — licheepi. Для удаленного доступа по SSH и UART входите в систему под именем sipeed. Выполним команды uname -a и lsb_release -a.
Результат выполнения:
root@sipeed:~# uname -a
Linux sipeed 5.4.61 #217 PREEMPT Thu Dec 30 06:50:31 UTC 2021 riscv64 GNU/Linux
root@sipeed:~# lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 11 (bullseye)
Release: 11
Codename: bullseye
Образ построен на Debian 11 (bullseye), ядро Linux 5.4.61.
Запуск утилиты neofetch
Первым делом подключимся к сети Интернет, для этого включим Wi-Fi сеть, кнопка «Пуск» > Preferences > Connman Settings. Включаем модуль Wi-Fi и подключаемся к беспроводной сети.
Вызов менеджера подключения Wi-Fi в Debian
Выберем беспроводную сеть Wi-Fi и подключимся к ней.
Подключение к Wi-Fi сети
Откроем свойство подключения сети и включим автоподключение при запуске системы
Включение автоподключения к сети Wi-Fi
Включение автоподключения к сети Wi-Fi
Оборудование
USB устройства клавиатура, мышь, хабы USB 2.0 и 3.0 поддерживаются без проблем. Вывод списка устройств утилитой inxi:
root@sipeed:~# inxi -Fc0
System:
Host: sipeed Kernel: 5.4.61 riscv64 bits: 64 Console: pty pts/3
Distro: Debian GNU/Linux 11 (bullseye)
Machine:
Type: RISCV System: sun20iw1p1 details: N/A
CPU:
Info: single core model: N/A variant: riscv bits: 64 type: UP
Speed: N/A min/max: N/A core: No per core speed data found.
Graphics:
Device-1: sunxi-disp driver: disp v: N/A
Device-2: sunxi-hdmi driver: allwinner,sunxi_hdmi v: N/A
Display: server: Moba/X 1.20.11 driver: loaded: fbdev
resolution: 1920x1080
OpenGL: renderer: llvmpipe (LLVM 11.0.1 128 bits) v: 4.5 Mesa 20.3.5
Audio:
Device-1: simple-audio-card driver: sunxi_audio_card
Device-2: sunxi-daudio driver: sunxi_daudio
Device-3: simple-audio-card driver: sunxi_audio_card
Device-4: sunxi-hdmiaudio driver: sunxi_hdmiaudio
Device-5: sunxi-hdmi driver: allwinner,sunxi_hdmi
Sound Server-1: ALSA v: k5.4.61 running: yes
Sound Server-2: PulseAudio v: 14.2 running: yes
Network:
Message: No RISCV data found for this feature.
IF-ID-1: sit0 state: down mac: 00:00:00:00
IF-ID-2: wlan0 state: up mac: xx:xx:xx:xx:xx:xx
IF-ID-3: wlan1 state: down mac: xx:xx:xx:xx:xx:xx
Drives:
Local Storage: total: 29.72 GiB used: 3.05 GiB (10.3%)
ID-1: /dev/mmcblk0 vendor: SanDisk model: SD32G size: 29.72 GiB
Partition:
ID-1: / size: 7.75 GiB used: 3.05 GiB (39.4%) fs: ext4 dev: /dev/mmcblk0p7
Swap:
Alert: No swap data was found.
Sensors:
Message: No sensor data found. Is lm-sensors configured?
Info:
Processes: 96 Uptime: 1h 10m Memory: 491.8 MiB used: 238.3 MiB (48.5%)
Shell: Bash inxi: 3.3.12
Дополнительный дисплей 1.14" 135×240 SPI LCD
Небольшой дисплей используется в образе licheerv_d1_1.14lcd_ub2004.tgz. Но его не удалось запустить из-за допущенной ошибки Sipeed в инструкции к записи образа на карту памяти. Вчера вечером после общения с Sipeed удалось решить проблему и запустить дисплей, классно выглядит и прекрасно работает. Немного позже этот раздел будет обновлен. Пока предоставляется фото дисплея пользователя Twitter Daniel Maslowski aka CyReVolt:
Источник Twitter @OrangeCMS
Работа с беспроводной сетью
Сеть Wi-Fi полноценно не работает. При вызове команды iwconfig сообщается, что интерфейсы wlan0 и wlan1 не поддерживают Wi-Fi.
Результат выполнения команды:
root@sipeed:~# sudo iwconfig
wlan0 no wireless extensions.
wlan1 no wireless extensions.
lo no wireless extensions.
sit0 no wireless extensions.
Подключение к Wi-Fi с помощью wpa_supplicant не увенчалось успехом, хотя на странице Sipeed LicheeRV указано, что это должно работать. Bluetooth на данный момент не поддерживается.
Пара слов об утилиты nmtui для подключения к Wi-Fi сети
Для подключения к Wi-Fi сети из консоли, не используя графическую оболочку, используется удобная утилита nmtui (пакет network-manager) с возможностью подключения к Wi-Fi сети в интерактивном режиме, без ручной правки конфигурационных файлов. Так это прекрасно работает в Armbian. Но в Lichee RV после перезагрузки системы, Debian автоматически не подключается к настроенной Wi-Fi сети через утилиту nmtui, поэтому загрузку LXDE придется оставить.
RGB светодиод
RGB светодиод на микросхеме WS2812 включен в конфигурацию, управляется с помощью виртуальной файловой системы Sysfs. По пути /sys/class/leds располагаются три устройства: sunxi_led0b, sunxi_led0g, sunxi_led0r. Задавая свойство brightness от 0 до 255 каждого цвета RGB можно задать итоговый цвет. Включим фиолетовый цвет, по модели RGB, для этого необходимо задать свойства (128, 0, 255). Выполним команды:
$ echo 128 > /sys/class/leds/sunxi_led0r/brightness
$ echo 0 > /sys/class/leds/sunxi_led0g/brightness
$ echo 255 > /sys/class/leds/sunxi_led0b/brightness
Включение RGB светодиода на Sipeed Lichee RV Dock
GPIO, I2C, SPI
Для управления контактами GPIO используется библиотека Libgpiod. В отличие от Armbian, в репозитории размещен пакет последней версии (версия 1.6), поэтому установим данную библиотеку командой:
$ sudo apt-get update
$ sudo apt-get install -y libgpiod-dev gpiod
После этого выполним команду gpiodetect для вывода списка всех чипов GPIO, метки и количество линий
Результат выполнения:
root@sipeed:~# gpiodetect
gpiochip0 [2000000.pinctrl] (224 lines)
Результат выполнения команды gpioinfo
root@sipeed:~# gpioinfo
gpiochip0 - 224 lines:
line 0: unnamed unused input active-high
...
line 31: unnamed unused input active-high
line 32: unnamed kernel input active-high [used]
line 33: unnamed kernel input active-high [used]
line 34: unnamed unused input active-high
...
line 39: unnamed unused input active-high
line 40: unnamed kernel input active-high [used]
line 41: unnamed kernel input active-high [used]
line 42: unnamed kernel input active-high [used]
line 43: unnamed kernel input active-high [used]
line 44: unnamed unused input active-high
...
line 63: unnamed unused input active-high
line 64: unnamed kernel input active-high [used]
line 65: unnamed unused input active-high
...
line 139: unnamed unused input active-high
line 140: unnamed unused output active-high
line 141: unnamed unused input active-high
line 142: unnamed kernel input active-high [used]
line 143: unnamed unused output active-high
line 144: unnamed unused output active-high
line 145: unnamed kernel input active-high [used]
line 146: unnamed unused input active-high
...
line 159: unnamed unused input active-high
line 160: unnamed kernel input active-high [used]
line 161: unnamed kernel input active-high [used]
line 162: unnamed kernel input active-high [used]
line 163: unnamed kernel input active-high [used]
line 164: unnamed kernel input active-high [used]
line 165: unnamed kernel input active-high [used]
line 166: unnamed "cd" input active-high [used]
line 167: unnamed unused input active-high
...
line 191: unnamed unused input active-high
line 192: unnamed kernel input active-high [used]
line 193: unnamed kernel input active-high [used]
line 194: unnamed kernel input active-high [used]
line 195: unnamed kernel input active-high [used]
line 196: unnamed kernel input active-high [used]
line 197: unnamed kernel input active-high [used]
line 198: unnamed kernel input active-high [used]
line 199: unnamed kernel input active-high [used]
line 200: unnamed kernel input active-high [used]
line 201: unnamed kernel input active-high [used]
line 202: unnamed "wlan_hostwake" input active-high [used]
line 203: unnamed unused input active-high
line 204: unnamed "wlan_regon" output active-high [used]
line 205: unnamed unused output active-high
line 206: unnamed "fts_irq_gpio" input active-high [used]
line 207: unnamed "fts_reset_gpio" output active-high [used]
line 208: unnamed unused input active-high
line 209: unnamed unused input active-high
line 210: unnamed "bt_rst" output active-high [used]
line 211: unnamed unused input active-high
...
line 223: unnamed unused input active-high
Результат выполнения команды: cat /sys/kernel/debug/gpio
root@sipeed:~# cat /sys/kernel/debug/gpio
gpiochip0: GPIOs 0-223, parent: platform/2000000.pinctrl, 2000000.pinctrl:
gpio-166 ( |cd ) in hi IRQ
gpio-202 ( |wlan_hostwake ) in hi
gpio-204 ( |wlan_regon ) out hi
gpio-206 ( |fts_irq_gpio ) in hi IRQ
gpio-207 ( |fts_reset_gpio ) out hi
gpio-210 ( |bt_rst ) out lo
В продолжение поста займемся программированием и работой с аппаратными интерфейсами, но для этого потребуется сформировать образ операционной системы с помощью SDK на последней версии ядра Linux.
BSP SDK
Информации об BSP SDK немного, предлагается загрузить архив достаточно большого размера (9.66 Гб) для формирования образа, дополнительно доступен на Docker Hub zepan/d1compile. Как работать с SDK сказано ссылка1, ссылка2, ссылка3.
От разработчика процессора Allwinner доступна регистрация (по e-mail, китайский номер мобильного телефона не требуется) на сайте open.allwinnertech.com в качестве разработчика. Заполняем форму регистрации и получаем доступ к SDK.
Allwinner SDK Page
На странице whycan.com/t_6440.html собрана документация об аппаратных интерфейсах на китайском языке, в формате PDF.
Использование RISC-V процессоров в обучение
Одноплатный компьютер Sipeed Nezha 64bit на процессоре XuanTie C906 RISC-V используется для обучения в информационных дисциплинах Норвежским университетом естественных и технических наук (NTNU).
Одноплатный компьютер Sipeed Nezha Allwinner D1
Норвежский университет естественных и технических наук является университетом мирового класса, подготавливает высококлассных специалистов с сильными техническими и академическими знаниями в области нефтяных и морских технологий, физиологии и медицины, химической инженерии, электротехники и электроники, производства и инженерии качества. Морская инженерия университета занимает второе место в мире. В 2021 году NTNU занял 101–150 место в мировом рейтинге университетов мира. Пять выпускников NTNU получили Нобелевские премии. Для сравнения МГУ имени М.В. Ломоносова занимает 97 место, второе место по России Санкт-Петербургский государственный университет — 301-400 место.
Профессор Michael Engel подробно рассказывает как работают операционные системы на примере запуска (портирования) ОС xv6 MIT под архитектуру RISC-V, а именно запуск на одноплатнике Sipeed Nezha.
Sipeed Nezha в программе курса
ОС xv6 — это операционная система предназначенная для использования в обучение студентов, разработана Массачусетским технологическим институтом (MIT) для курса «Инженерия операционных систем» (код 6.828).
В отличие от систем Linux или BSD, ОС xv6 очень проста и может быть изучена всего за один семестр. Весь программный код составляет немного более 8000 строк, но он по-прежнему включает важные концепции и организационные структуры Unix.
Благодаря высокой производительности и широкому спектру применения одноплатного компьютера Sipeed Nezha, удалось получить широкое признание в информационной отрасли, не только достигнув цели использование для разработки в различных областях, но и сделав первый шаг к тому, чтобы китайские процессоры вышли в лидерство на мировой рынок.
MangoPi MQ-Pro
Еще один интересный проект, на таком же процессоре Allwinner D1 RISC-V, от стартапа MangoPi (на момент публикации сайт не работает), одноплатный компьютер MangoPi MQ-Pro. В отличие от Lichee RV, на плате размещен 40 Pins разъем GPIO, который полностью совместимый с аналогичным разъемом на Raspberry Pi 3. Форм фактор платы выполнен в стиле Raspberry Pi Zero, что более удобнее для DIY проектов, чем исполнение в виде модуля (SoM). Отдельно выведен разъем MIPI DSI для подключения дисплеев с сенсорным экраном. Если вам интересно поработать с RISC-V процессором в более комфортных условиях, то лучше дождаться выпуска MangoPi MQ-Pro.
MangoPi MQ-Pro
Ориентировочная стоимость около $20 без учета доставки. Массовое производство планируется запустить 15-20 февраля, как раз после празднования Китайского Нового года. Скорее всего, где-то в марте появятся в магазинах.
«Допиливание» системы
Расширение раздела rootfs
Китайцы очень шустро делают новые платы, но с поддержкой программного обеспечения возникают некоторые сложности. Не смотря на указанные требования в размере 16 Гб для microSD, фактический размер раздела rootfs (образ с Debian) составит 4 Гб. В отличие от Armbian, при запуске системы, раздел с rootfs не расширяется автоматически до максимального размера карты памяти. Поэтому для карты microSD объемом 32 Гб необходимо расширить раздел с rootfs.
Расширение раздела с rootfs до максимального размера карты microSD
Расширение раздела выполняется «на лету» в загруженной системе, выполним следующие шаги:
1 Шаг. Отобразим текущий список точек монтирования, командой df -h:
В первой строке видим корень файловой системы размером всего 4 Гб.
2 Шаг. Выведем список разделов на microSD карте, командой fdisk -l
Подключена карта памяти объемом 30 Гб. Необходимо раздел /dev/mmcblk0p8 удалить, а раздел /dev/mmcblk0p7 расширить до максимального размера.
3 Шаг. Работаем с разделами утилитой parted, выполним команду parted /dev/mmcblk0, затем введем команду вывода списка всех разделов p:
В первую очередь удалим раздел под номером 8, затем раздел под номером 7 (rootfs) расширим до максимального размера.
4 Шаг. Удаляем раздел под номером 8, команда rm 8
5 Шаг. Расширяем раздел под номером 7, команда resizepart 7. Указываем точку окончания раздела на 30 Гб.
6 Шаг. Выходим из программы parted, командой quit
7 Шаг. Расширяем раздел /dev/mmcblk0p7 утилитой resize2fs, выполним команду
Ход выполнения:
8 Шаг. Перезапускам систему командой, reboot now
9 Шаг. Повторно выводим информацию о точках монтирования командой, df -h
Как видим теперь раздел rootfs составляет 28 Гб.
1 Шаг. Отобразим текущий список точек монтирования, командой df -h:
В первой строке видим корень файловой системы размером всего 4 Гб.
2 Шаг. Выведем список разделов на microSD карте, командой fdisk -l
Подключена карта памяти объемом 30 Гб. Необходимо раздел /dev/mmcblk0p8 удалить, а раздел /dev/mmcblk0p7 расширить до максимального размера.
3 Шаг. Работаем с разделами утилитой parted, выполним команду parted /dev/mmcblk0, затем введем команду вывода списка всех разделов p:
В первую очередь удалим раздел под номером 8, затем раздел под номером 7 (rootfs) расширим до максимального размера.
4 Шаг. Удаляем раздел под номером 8, команда rm 8
(parted) rm 8
5 Шаг. Расширяем раздел под номером 7, команда resizepart 7. Указываем точку окончания раздела на 30 Гб.
(parted) resizepart 7
End? [8642MB]? 30000
6 Шаг. Выходим из программы parted, командой quit
(parted) quit
7 Шаг. Расширяем раздел /dev/mmcblk0p7 утилитой resize2fs, выполним команду
$ sudo resize2fs /dev/mmcblk0p7
Ход выполнения:
root@sipeed:~# resize2fs /dev/mmcblk0p7
resize2fs 1.46.2 (28-Feb-2021)
Filesystem at /dev/mmcblk0p7 is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 2
The filesystem on /dev/mmcblk0p7 is now 7311480 (4k) blocks long.
8 Шаг. Перезапускам систему командой, reboot now
9 Шаг. Повторно выводим информацию о точках монтирования командой, df -h
Как видим теперь раздел rootfs составляет 28 Гб.
Обновление ключей репозитория пакетов
При обновление пакетов возникла ошибка верификации корневых ключей публичного репозитория. Выполнение команды apt-get update приводит к следующей ошибке:
root@sipeed:/etc/apt# apt-get update
Get:1 http://ftp.ports.debian.org/debian-ports sid InRelease [65.1 kB]
Err:1 http://ftp.ports.debian.org/debian-ports sid InRelease
The following signatures couldn't be verified because the public key is not available: NO_PUBKEY E852514F5DF312F6
Reading package lists... Done
W: GPG error: http://ftp.ports.debian.org/debian-ports sid InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY E852514F5DF312F6
E: The repository 'http://ftp.ports.debian.org/debian-ports sid InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
Проблема заключается в наличие просроченных ключей, необходимо загрузить в ручном режиме новые ключи. Для этого со страницы debian-ports-archive-keyring загружаем DEB-пакет debian-ports-archive-keyring_2021.12.30_all.deb, копируем его на Lichee RV, используя терминал MobaXterm, и запускаем установку командой:
$ sudo dpkg -i debian-ports-archive-keyring_2021.12.30_all.deb
После обновления ключей все заработает включая обновление. Обновим систему, выполним команды:
$ sudo apt-get update
$ sudo apt-get -y upgrade
Установка дополнительных пакетов
Для работы с текстовыми конфигурационными файлами удобнее пользоваться не древним программами vi или nano, а нормальным редактором с поддержкой псевдографики и мыши. В состав пакета mc входит файловый менеджер Midnight Commander и текстовый редактор mcedit. Установим пакет mc и htop, командой:
$ sudo apt-get install -y mc htop usbutils
Настройка расширения экрана для LXDE
В не зависимости от диагонали подключаемого экрана, Xorg будет выводить картинку с разрешением 1080p. Но если у вас небольшой портативный LCD на 8 дюймов, то это проблема. Для задания других разрешений экрана необходимо создать конфигурационный файл с настройками для вашего монитора. Для этого необходимо создать конфигурационный файл по пути /usr/share/X11/xorg.conf.d/99-fbdev.conf и разместить в нем следующий фрагмент:
Файл 99-fbdev.conf
Section "Device"
Identifier "myfb"
Driver "fbdev"
Option "fbdev" "/dev/fb0"
EndSection
Section "Screen"
Identifier "Default Screen"
Monitor "Configured Monitor"
Device "myfb"
DefaultDepth 24
SubSection "Display"
Depth 24
Modes "640x480" "800x600" "1024x768" "1024x600" "1280x720" "1920x1080"
EndSubSection
EndSection
Section "InputDevice"
Identifier "Keyboard0"
Driver "keyboard"
Option "Floating" "off"
Option "XkbRules" "xorg"
Option "XkbModel" "pc105"
Option "XkbLayout" "us"
EndSection
Section "InputDevice"
Identifier "Mouse0"
Driver "evdev"
Option "Name" "Logitech USB Gaming Mouse"
Option "evBits" "+1-2"
Option "keyBits" "~272-287"
Option "relBits" "~0-2 ~6 ~8"
Option "Pass" "3"
Option "CorePointer"
EndSection
Section "ServerLayout"
Identifier "Default Layout"
Screen 0 "Default Screen" 0 0
InputDevice "Keyboard0" "CoreKeyboard"
InputDevice "Mouse0" "CorePointer"
EndSection
В строке Modes задайте необходимые разрешения экрана, остальные параметры изменять не требуется.
Далее, необходимо выставить значение dpi. В папке домашней директории (/root) создаем файл .Xresources, командой:
$ sudo mcedit /root/.Xresources
В файле размещаем единственною строку параметр:
Xft.dpi: 100
Сохраняем изменения <F2> и выходим из редактора <F10>. Перезапускаем систему и входим в под пользователем root.
После перезапуска системы, в LXDE откроем меню «Пуск» > Preferences > Monitor Settings, выберем необходимое разрешение экрана.
Выбор разрешения экрана
Итог
Поднебесная, в отличие от российских разработчиков процессоров МЦСТ и Байкал электроникс, стремится к максимальной открытости не только в виде документации по использованию, но и открывает открытый доступ к исходникам ядер процессора. Ставка на открытость очень сильно подкупает.
Учитывая что спецификацию RISC-V сделали буквально вчера, а на руках уже работающая плата по низкой цене, это весьма впечатляющий результат. Пока драйверов и софта под архитектуру RISC-V очень мало, но многие макеты уже скомпилированы под новую архитектуру.
Для полноценного теста необходим нормально работающий образ операционной системы, поэтому никакие тесты скорости не выполнялись. Поэтому следующий шаг, это сборка и настройка своего образа на базе Debian или Ubuntu.
Отдельно хотелось бы отметить проект Carlos Eduardo по портированию Docker на RISC-V архитектуру с последующей сборкой пакетов для этой архитектуры. Carlos Eduardo предлагает запускать QEMU эмулятор RISC-V архитектуры на x86 машине. Для эксперимента были установлены бинарные пакеты Docker от Carlos Eduardo на Lichee RV, но демон Docker не запустился. На данный момент с помощью инструмента Buildx (при сборке указать платформу --platform linux/riscv64) собираются контейнеры не только для ARM архитектуры, но и для RISC-V архитектуры, но об этом в продолжение.
Коротко:
- На Lichee RV образ с Debian запускается в среднем за 1 минуту;
- Видео не воспроизводится, показывается только первый кадр, далее видео замирает;
- Браузера нет. Пока нет порта ни Firefox, ни Chrome;
- Что-то намудрили с запуском диспетчера LXDE, иногда система зависает при инициализации GPU. Перезагрузка не спасает, только обесточивание платы и LCD панели решает проблему;
- Образ Debian «кривой», необходимо собирать свой;
- Вся текущая документация на плату и SDK только на китайском языке.
Благодарю за внимание, пишите в комментариях что вы бы хотели проверить, протестировать на новом одноплатнике Sipeed Lichee RV.
Ресурсы
- About D1-H SoC — AWOL
- Quick start with Lichee RV (китайский)
- Начало работы — Sipeed Wiki (китайский)
- BBS LicheeRV — AWOL (китайский)
- Официальный сайт компании Sipeed — AIoT opensource hardware platform
- Sipeed Docs & Images
- Sipeed Docs & Images Mega.nz
- Sipeed Telegram Channel
- Sipeed @SipeedIO Twitter
- GitHub — T-Head Semiconductor Co., Ltd.
- GitHub — Allwinner D1 RISC-V