Powrót do strony głównej

Uruchomienie RISC-V K1921VG015: toolchain i OpenOCD

Instrukcja konfiguracji riscv-gnu-toolchain i OpenOCD do uruchomienia demo na K1921VG015. Opisana budowa z multilib, patche dla DirtyJTAG i GCC14, wgrywanie przez WSL. Nadaje się do debugowania projektów RISC-V.

RISC-V K1921VG015: uruchomienie demo z DirtyJTAG
Advertisement 728x90

Konfiguracja toolchain i OpenOCD do uruchomienia RISC-V na K1921WG015

Na płytkach prototypowych z mikrokontrolerem K1921WG015 architektury RISC-V uruchamiany jest projekt demonstracyjny. Wymagany jest adapter JTAG DirtyJTAG, kompilator riscv-gnu-toolchain oraz OpenOCD z łatkami od NIIET. Praca prowadzona jest w WSL na Windows 11 z Debian 13 (trixie).

Instalacja podstawowych pakietów umożliwia zbudowanie toolchain:

sudo apt install autoconf automake autotools-dev curl python3 python3-pip python3-tomli libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat1-dev ninja-build git cmake libglib2.0-dev libslirp-dev libncurses-dev libusb-1.0-0-dev libusb-1.0-0 cmake

Budowanie kompilatora riscv-gnu-toolchain

Klonujemy repozytorium z rekursywnymi podmodułami:

Google AdInline article slot
git clone --recursive https://github.com/riscv/riscv-gnu-toolchain
cd riscv-gnu-toolchain
./configure --prefix=/opt/riscv --enable-multilib
sudo make

Flaga --enable-multilib aktywuje obsługę RV32 i RV64. Budowanie jako root zapewnia instalację w /opt/riscv. Następnie PATH jest uzupełniany o /opt/riscv/bin dla dostępu do riscv64-unknown-elf-gcc i narzędzi.

Kompilacja OpenOCD z obsługą DirtyJTAG

Używany jest fork OpenOCD od NIIET (commit ed64294116beb6bc335a6c5809b46a87add8042a):

git clone --recursive https://gitflic.ru/project/niiet/openocd.git
cd openocd/
git apply --verbose 0001-jtag-add-support-for-adapter-DirtyJTAG.patch
git apply --verbose 0002-fix-correct-calloc-argument-order-for-GCC-14-compati.patch
./bootstrap
./configure --prefix=/usr/
make -j$(nproc)
sudo make install

Łatka 0001 dodaje sterownik dla DirtyJTAG. Łatka 0002 poprawia kolejność argumentów calloc dla kompatybilności z GCC 14. Konfigurację k1921vg015.cfg kopiuje się do /usr/share/openocd/scripts/target/ — w podstawowej wersji od NIIET obsługa układu jest nieobecna.

Google AdInline article slot

Budowanie i wgrywanie projektu demonstracyjnego

Demo generowane jest w Syntacore Development Toolkit, CMakeLists.txt dodany ręcznie. Budowanie:

mkdir build
cd build
cmake ../CMakeLists.txt
make

Otrzymany Run_leds.bin jest gotowy do załadowania. W WSL podłącza się urządzenie USB:

usbipd list  # Znaleźć BUSID DirtyJTAG, np. 1-3
usbipd attach --wsl --busid 1-3

Uruchomienie oprogramowania przez OpenOCD:

Google AdInline article slot
sudo openocd -f interface/dirtyjtag.cfg -f target/k1921vg015.cfg -c "program Run_leds.bin 0x80000000 verify reset exit"

Polecenie programuje pod adresem 0x80000000, weryfikuje integralność, resetuje i wychodzi. Na czystym Linuxie pomija się krok z usbipd.

Kluczowe kroki konfiguracji w liście:

  • Instalacja pakietów Debian dla toolchain.
  • Budowanie kompilatora multilib w /opt/riscv.
  • Łatkowanie i kompilacja OpenOCD z DirtyJTAG.
  • Dodanie k1921vg015.cfg do scripts.
  • Budowanie projektu CMake i podłączanie USB w WSL.
  • Wgrywanie z verify i reset.

Co jest ważne

  • --enable-multilib jest obowiązkowe dla RV32/RV64 na jednym toolchain.
  • Łatki dla OpenOCD są krytyczne: DirtyJTAG i GCC14-calloc.
  • Adres ładowania 0x80000000 — standard dla K1921WG015.
  • WSL wymaga usbipd dla dostępu JTAG.
  • Konfig k1921vg015.cfg dodawany ręcznie.

Dalsze debugowanie zakłada poznanie architektury układu przez podobne kroki toolchain.

— Editorial Team

Advertisement 728x90

Czytaj dalej