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:
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.
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:
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.cfgdo scripts. - Budowanie projektu CMake i podłączanie USB w WSL.
- Wgrywanie z verify i reset.
Co jest ważne
--enable-multilibjest 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.cfgdodawany ręcznie.
Dalsze debugowanie zakłada poznanie architektury układu przez podobne kroki toolchain.
— Editorial Team
Brak komentarzy.