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