Получив макетные платы, стало необходимостью запустить демо проект. Для него потребуется также JTAG, компилятор и OpenOCD. Сам JTAG использовался DirtyJTAG. Ну а дальше разбираемся.
Система
Делается вся работа на Windows 11 в wsl с дистрибутивом Debian.
$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 13 (trixie)"
NAME="Debian GNU/Linux"
VERSION_ID="13"
VERSION="13 (trixie)"
VERSION_CODENAME=trixie
DEBIAN_VERSION_FULL=13.4
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
Установим пакеты:
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
Теперь перейдем к сборке компилятора.
Установка компилятора
Загрузка исходников компилятора:
$ git clone --recursive https://github.com/riscv/riscv-gnu-toolchain
Дальше переходим в каталок исходников и собираем указав место установки /opt/riscv с флагом --enable-multilib. Флаг нужен чтобы собралось с поддержкой Risc-V32 и Risc-V64. Собирать нужно под пользователем root:
$ cd ./riscv-gnu-toolchain
$ ./configure --prefix=/opt/riscv --enable-multilib
$ sudo make
Переходим к следующему шагу.
Установка OpenOCD
Клонируем репозиторий openocd от НИИЭТ:
git clone --recursive https://gitflic.ru/project/niiet/openocd.git
Использовалась версия ed64294116beb6bc335a6c5809b46a87add8042a
Скопируем из репозитория патчи с демо проектом, переместим их в каталог openocd и выполним следующие операции:
$ 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 -jN
$ sudo make install
Патч 0002-fix-correct-calloc-argument-order-for-GCC-14-compati.patch нужен для того чтобы собрался OpenOCD. Почему-то аргументы функции calloc поменяли местами в версии GCC14.
Копируем из нашего репозитория файл k1921vg015.cfg в /usr/share/openocd/scripts/target/. В версии OpenOCD от НИИЭТ нет поддержки кристалла.
Все OpenOCD готов к работе.
Сборка проекта и запуск на кристалле
Перейдем в проект который был скачан с патчами. Этот проект создавался в Syntacore Development Toolkit и CMakeLists.txt не было, он был добавлен уже вручную. Выполняем операции:
$ mkdir build
$ cd build
$ cmake ../CMakeLists.txt
$ make
По завершению видим что все собралось и ликуем:

Осталось только загрузить. Но так как это делаю из wsl, придется еще присоединить устройство к wsl:
> usbipd list
# Находим в списке DirtyJTAG и смотрим его BUSID.
# У меня он 1-3.
> usbipd attach --wsl --busid 1-3
Если сидеть на одной из систем Linux, этот шаг пропускается.
Теперь загружаем прошивку и смотрим на результат:
$ sudo openocd -f interface/dirtyjtag.cfg -f target/k1921vg015.cfg -c "program Run_leds.bin 0x80000000 verify reset exit"
Получаем:
В дальнейшем пройдемся по архитектуре и в процессе изучения будут небольшие проекты. Подписывайтесь чтобы не пропустить.
Автор: trojninalex
