Zum Hauptinhalt springen

Verwendung von integrierten Funktionen

Der Ruyi-Paketmanager bietet neben den grundlegenden Funktionen zur Verwaltung von Softwarepaketen auch Integrationen für Toolchains, Emulatoren, Images und andere Pakete.

Sie können:

  • Auf die gängigen Quellcode-Pakete von RuyiSDK zugreifen
  • Toolchains und Emulatoren bequem kombinieren, um eine Ruyi-virtuelle Umgebung für eine bestimmte RISC-V-CPU-Plattform einzurichten, ohne zu viele Details verstehen zu müssen
  • Unabhängige Umgebungen im System erstellen, um eine Isolation der Umgebungen für unterschiedliche Versionen von Compiler-Toolchains und Bibliotheksdateien zu gewährleisten, was die Effizienz des Entwicklungsprozesses sichert
  • Ein System-Image, das Sie verwenden möchten, auf ein RISC-V-SOC-Entwicklungsboard mit einer bestimmten Modell- und Konfigurationsnummer flashen
  • Ein gut unterstütztes Echtzeitbetriebssystem für einen bestimmten RISC-V-Mikrocontroller finden

Ruyi virtuelle Umgebung

Der Ruyi-Paketmanager bietet mit dem Befehl venv die Möglichkeit, Toolchains und Emulatoren zu kombinieren, um eine virtuelle Umgebung zu erstellen. Die Entwicklungsumgebung stellt die erforderlichen Konfigurationen für verschiedene Entwicklungsboards bereit und übergibt automatisch die benötigten Parameter für den Build.

Konfiguration der virtuellen Umgebung

Im Ruyi-Software-Repository sind bereits einige vorkonfigurierte Einstellungen verfügbar, die ohne Installation verwendet werden können. Diese Konfigurationen können mit dem Befehl ruyi list profiles aufgelistet werden:

$ ruyi list profiles
generic
baremetal-rv64ilp32 (needs flavor(s): {'rv64ilp32'})
xiangshan-nanhu
sipeed-lpi4a (needs flavor(s): {'xthead'})
milkv-duo

Einige Konfigurationen benötigen eine Ruyi-Toolchain-Version, die bestimmte flavor(s) unterstützt. Diese Informationen können Sie in der Ausgabe von ruyi list --verbose abrufen, um zu überprüfen, ob eine bestimmte Toolchain diese Merkmale unterstützt. Alternativ können Sie auch auf die Tabelle im Abschnitt „Toolchain- und vorkonfigurierte Konfigurationen“ zurückgreifen.

Toolchain- und vorkonfigurierte Konfigurationen

Der Ruyi-Paketmanager überprüft vor der Erstellung der virtuellen Umgebung, ob Konflikte bestehen, garantiert jedoch nicht, dass die erstellte Umgebung verwendbar ist. Um diese Funktion flexibel zu verwenden, sollten Sie ein gewisses Verständnis für diese Toolchains haben. In der Regel können Sie einfach die folgende Tabelle verwenden.

Hier sind die getesteten und bestätigten Konfigurationen aufgeführt:

ToolchainsysrootVorkonfigurationBuild-Ziel
gnu-plctintegriertgenericLinux-Betriebssystem für die Architektur riscv64
gnu-plctintegriertmilkv-duoImage des MilkV Duo-Entwicklungsboards mit glibc
gnu-plctintegriertxiangshan-nanhuXiangshan Nanhu
gnu-upstreamintegriertgenericLinux-Betriebssystem für die Architektur riscv64
gnu-plct-xtheadintegriertsipeed-lpi4aThead C910
gnu-plct-rv64ilp32-elfkeinebaremetal-rv64ilp32Bare-Metal rv64ilp32
llvm-plctgnu-plctgenericLinux-Betriebssystem für die Architektur riscv64
llvm-upstreamgnu-upstreamgenericLinux-Betriebssystem für die Architektur riscv64
Herstellerveröffentlichte Binär-ToolchainsysrootVorkonfigurationBuild-Ziel
gnu-milkv-milkv-duo-elf-binkeinegenericBare-Metal für die MilkV Duo-Serie (erfordert zusätzliche Parameter)
gnu-milkv-milkv-duo-binintegriertgenericImage des MilkV Duo-Entwicklungsboards mit glibc (erfordert zusätzliche Parameter)
gnu-milkv-milkv-duo-musl-binintegriertgenericImage des MilkV Duo-Entwicklungsboards mit musl (erfordert zusätzliche Parameter)

Für weitere Informationen zu Compiler-Toolchains siehe RuyiSDK Compiler-Tools.

Erstellung einer virtuellen Umgebung

Details zur Verwendung des venv-Befehls können Sie mit dem Parameter -h einsehen:

$ ruyi venv -h

Hier sind einige Beispiele:

# Erstellen einer RISC-V-virtuellen Umgebung mit der GNU-Upstream-Toolchain:
$ ruyi venv -t gnu-upstream generic ./generic-venv

# Erstellen einer Milkv-Duo-virtuellen Umgebung mit der PLCT-Toolchain:
$ ruyi venv -t gnu-plct milkv-duo ./milkv-venv

# Erstellen einer Xiangshan-Nanhu-virtuellen Umgebung mit der PLCT-Toolchain:
$ ruyi venv -t gnu-plct xiangshan-nanhu ./nanhu-venv

# LLVM benötigt in der Regel die sysroot von GCC:
$ ruyi venv -t llvm-upstream --sysroot-from gnu-plct generic ./llvm-venv

# Erstellen einer Livestream-virtuellen Umgebung mit einer bestimmten Version der Plattform-Toolchain:
$ ruyi venv -t "gnu-plct-xthead(==0.20231212.0)" sipeed-lpi4a ./sipeed-venv

# Ausführen eines cross-compilierten RISC-V-Binärs mit dem Upstream-QEMU-Emulator
$ ruyi venv -t gnu-plct generic -e qemu-user-riscv-upstream ./qemu-venv

# Ausführen eines cross-compilierten RISC-V-Binärs mit dem Tongfang QEMU-Emulator
$ ruyi venv -t gnu-plct-xthead sipeed-lpi4a -e qemu-user-riscv-xthead ./xthead-qemu-venv

# Mehrere Toolchains, wobei gnu-upstream die sysroot bereitstellt
$ ruyi venv -t llvm-upstream -t gnu-upstream generic ./upstream-venv

Virtuelle Umgebungen dienen zur Integration von Toolchains, Emulatoren und weiteren Tools. Bevor Sie die Build-Umgebung erstellen, stellen Sie sicher, dass die entsprechenden Ruyi-Pakete installiert sind.

Integration in die virtuelle Umgebung

Hier wird die Integration anhand von gnu-upstream im Detail beschrieben. Pfade, PS1 und andere umgebungsbezogene Informationen sollten nach dem Verständnis angepasst werden.

Zuerst installieren Sie die benötigten Pakete folgendes Beispiel:

$ ruyi install gnu-upstream qemu-user-riscv-upstream

Erstellen Sie ein sauberes Verzeichnis für die Ausführung des Beispiels:

$ mkdir hello-ruyi
$ cd hello-ruyi

Ziehen Sie den Quellcode des ruyisdk-Demos:

$ ruyi extract ruyisdk-demo
$ ls
README.md rvv-autovec

Erstellen Sie die virtuelle Umgebung:

$ ruyi venv -t gnu-upstream -e qemu-user-riscv-upstream generic ./myhone-venv
info: Erstellen einer Ruyi-virtuellen Umgebung unter myhone-venv...
info: Die virtuelle Umgebung wurde jetzt erstellt.

Sie können sie aktivieren, indem Sie das entsprechende Aktivierungsskript im
bin-Verzeichnis ausführen, und deaktivieren, indem Sie `ruyi-deactivate` aufrufen.

Ein neues sysroot/präfix wurde ebenfalls in der virtuellen Umgebung bereitgestellt.
Es ist unter dem folgenden Pfad verfügbar:

/home/myhone/hello-ruyi/myhone-venv/sysroot

Die virtuelle Umgebung enthält auch eine fertige CMake-Toolchain-Datei
und eine Meson-Cross-Datei. Überprüfen Sie das Wurzelverzeichnis der virtuellen Umgebung auf diese;
Kommentare in den Dateien enthalten Benutzungsanweisungen.

Diese virtuelle Umgebung integriert die gnu-upstream-Toolchain und den qemu-user-riscv-upstream-Emulator unter der generischen Konfiguration für das Ziel-Betriebssystem riscv64 Linux und erstellt die Build-Umgebung im Verzeichnis ./myhome-venv (es kann auch ein absoluter Pfad verwendet werden). Die Ausgabe des Befehls gibt Informationen zur Aktivierung der Build-Umgebung, um die Build-Umgebung zu verlassen, den absoluten Pfad des sysroot-Verzeichnisses sowie einige andere Informationen zurück.

Im Verzeichnis der virtuellen Umgebung können Sie die mit der Build-Umgebung verbundenen Dateien sehen:

$ ls ./myhone-venv/
bin ruyi-venv.toml
binfmt.conf sysroot
meson-cross.ini sysroot.riscv64-unknown-linux-gnu
meson-cross.riscv64-unknown-linux-gnu.ini toolchain.cmake
ruyi-cache.v1.toml toolchain.riscv64-unknown-linux-gnu.cmake

Die Datei binfmt.conf ist ein Beispielkonfigurationsdatei für systemd-binfmt, und toolchain.cmake sowie meson-cross.ini können für die Cross-Kompilierung von Projekten verwendet werden. sysroot ist das für diese virtuelle Umgebung verwendete sysroot und das bin-Verzeichnis enthält die verfügbaren Befehle und Skripte dieser Build-Umgebung.

Im bin-Verzeichnis können Sie die verfügbaren Toolchain-Binärdateien sehen:

$ ls ./myhone-venv/bin/
riscv64-unknown-linux-gnu-addr2line riscv64-unknown-linux-gnu-gcc-ranlib riscv64-unknown-linux-gnu-nm
riscv64-unknown-linux-gnu-ar riscv64-unknown-linux-gnu-gcov riscv64-unknown-linux-gnu-objcopy
riscv64-unknown-linux-gnu-as riscv64-unknown-linux-gnu-gcov-dump riscv64-unknown-linux-gnu-objdump
riscv64-unknown-linux-gnu-c++ riscv64-unknown-linux-gnu-gcov-tool riscv64-unknown-linux-gnu-ranlib
riscv64-unknown-linux-gnu-cc riscv64-unknown-linux-gnu-gdb riscv64-unknown-linux-gnu-readelf
riscv64-unknown-linux-gnu-c++filt riscv64-unknown-linux-gnu-gdb-add-index riscv64-unknown-linux-gnu-size
riscv64-unknown-linux-gnu-cpp riscv64-unknown-linux-gnu-gfortran riscv64-unknown-linux-gnu-strings
riscv64-unknown-linux-gnu-elfedit riscv64-unknown-linux-gnu-gprof riscv64-unknown-linux-gnu-strip
riscv64-unknown-linux-gnu-g++ riscv64-unknown-linux-gnu-ld ruyi-activate
riscv64-unknown-linux-gnu-gcc riscv64-unknown-linux-gnu-ld.bfd ruyi-qemu
riscv64-unknown-linux-gnu-gcc-ar riscv64-unknown-linux-gnu-ldd
riscv64-unknown-linux-gnu-gcc-nm riscv64-unknown-linux-gnu-lto-dump

Es sind die gesamten Toolchain-Befehle enthalten, sowie der QEMU-Benutzermodus-Emulator, der als ruyi-qemu umbenannt wurde, und das Skript ruyi-activate, das zum Aktivieren der virtuellen Umgebung verwendet wird. Das Script verlinkt tatsächlich auf die Ruyi-Toolchain-Funktionen.

Durch das Ausführen von source ruyi-activate wird die Build-Umgebung aktiviert und PS1 wird geändert:

$ source ./myhone-venv/bin/ruyi-activate
«Ruyi myhone-venv» $

Gleichzeitig wird auch PATH geändert, sodass nun direkt auf die Toolchain zugegriffen werden kann:

«Ruyi myhone-venv» $ whereis riscv64-unknown-linux-gnu-gcc
riscv64-unknown-linux-gnu-gcc: /home/myhone/hello-ruyi/myhone-venv/bin/riscv64-unknown-linux-gnu-gcc
«Ruyi myhone-venv» $ riscv64-unknown-linux-gnu-gcc --version
riscv64-unknown-linux-gnu-gcc (RuyiSDK 20231212 Upstream-Sources) 13.2.0
Copyright (C) 2023 Free Software Foundation, Inc.
Dies ist freie Software; siehe die Quelle für Kopierbedingungen. Es gibt KEINE
Garantie; nicht einmal für MARKTFÄHIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK.

In der Ruyi virtuellen Umgebung wird, zusätzlich zu den automatisch an die Toolchain übergebenen Konfigurationsarchitektur-Optionen, die Verwendung von Toolchain und Emulator nicht wesentlich verändert. Weitere Inhalte finden Sie im Abschnitt „Anwendungsbeispiele“.

Bauen Sie das ruyisdk-Demo:

$ cd rvv-autovec
$ make

Nach der Verwendung der virtuellen Umgebung können Sie die Build-Umgebung verlassen, und alles wird auf den vorherigen Zustand zurückgesetzt:

«Ruyi myhone-venv» $ ruyi-deactivate
$

Ruyi-Image-Integration

Die Image-Integration von Ruyi bietet die Möglichkeit, Images für Entwicklungsboards zu flashen und Dokumentationen für Mikrocontrollergeräte bereitzustellen. Diese Funktion ist mit dem RuyiSDK-Projekt RISC-V Entwicklungsboards und Betriebssystem-Supportmatrix verbunden.

Diese Funktion bietet einen Assistenten, der das Flashen von System-Images auf RISC-V-Geräte mithilfe von dd und fastboot unterstützt und bietet auch Leitfäden für RISC-V-Mikrocontroller, die nicht regulär geflasht werden können.

$ ruyi device provision

Weitere detaillierte Beispiele können im Abschnitt „Anwendungsbeispiele“ nachgeschlagen werden.