Получив макетные платы, стало необходимостью запустить демо проект. Для него потребуется также 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"

Получаем:

В дальнейшем пройдемся по архитектуре и в процессе изучения будут небольшие проекты. Подписывайтесь чтобы не пропустить.