Опубликован: 19.01.2025 | Доступ: свободный | Студентов: 1 / 0 | Длительность: 02:34:00
Лекция 3:

Инструменты разработчика

< Лекция 2 || Лекция 3: 123 || Лекция 4 >

Эта Лекция посвящена настройке окружения и инструментов разработчика для написания программного кода на языке Assembler для процессора RISC-V и его запуска на компьютере. Существует достаточно большое количество различных программ и утилит, позволяющих писать и тестировать небольшие программы, которые достаточно сильно отличаются своей функциональностью. В этой Лекции мы рассмотрим небольшую часть таких инструментов, позволяющих писать код для микропроцессоров RISC-V, транслировать его в исполняемые модули, а также запускать и отлаживать его, работая при этом на обычных ПК с ОС Linux. В частности, будут рассмотрены: симулятор Ripes, эмулятор аппаратного обеспечения Qemu с набором инструментов GNU toolchain, одноплатный компьютер StarVision VisionFive.

Вам потребуется ОС Linux (предпочтительно - Debian) в качестве хоста для запуска симуляторов. Вы также можете использовать WSL1WSL (Windows Subsystem for Linux) - подсистема ОС Windows, которая позволяет разработчикам запускать среду GNU/Linux с большинством программ командной строки, служебных программ и приложений непосредственно в Windows без каких-либо изменений и необходимости использовать традиционную виртуальную машину или двойную загрузку. (Windows Subsystem for Linux) или macOS, однако использование этих средств здесь рассматриваться не будет.

После прохождения этого раздела вы будете знать, как:

  • устанавливать и использовать любое рассмотренное в разделе ПО;
  • знать и уметь применять наборы инструментов GNU (GNU toolchain) для сборки приложений.

Набор инструментов разработчика

Обзор наборов инструментов

На рис.2.1. показан процесс того, как происходит преобразование исходного кода программы в исполняемый бинарный файл. Шаги этого процесса обычно скрыты внутри специального ПО, которое называется интегрированная среда разработки (integrated development environment, IDE). Работая в таких средах, вы просто печатаете кода в редакторе и сохраняете его в текстовом виде в файле исходного кода. Этот файл передаётся ассемблеру (или кросс-ассемблеру, специальной программе, позволяющей, находясь на компьютере одной архитектуры, компилировать бинарный код для совершенно другой архитектуры), который переводит его содержимое в так называемый объектный файл - бинарный код, в точности соответствующий машинному представлению инструкций из транслируемого файла, но при этом не содержащий дополнительную информацию, необходимую для запуска и исполнения программы операционной системой. Для преобразования объектного файла в исполняемый используется программа, которая называется компоновщик (или линкер, от англ. linker). Компоновщик принимает на вход объектный файл (или группу объектных файлов, если исходных файлов в проекте компилировалось несколько) и скрипт линковки - специальный набор указаний о том, как сегменты, описанные в исходном коде, должны размещаться в памяти при загрузке программы операционной системой и её исполнении. Результатом этой процедуры является исполняемый файл.

Процесс преобразования исходного кода в исполняемый

Рис. 2.1. Процесс преобразования исходного кода в исполняемый

Набор инструментов (toolchain) включает в себя все описанные выше утилиты, конфигурационные файлы и прочие файлы и программы, необходимые для перевода текстового представления исходного кода в бинарный исполняемый файл.

Симулятор Ripes

Ripes - симулятор, который позволяет отслеживать выполнение машинного (исполняемого) кода на процессорах с архитектурами RV32IMC и RV64IMC (суффиксы IMC показывают расширения архитектуры, добавляющие новую функциональность, и будут рассмотрены позднее в третьей части). Симулятор Ripes доступен по ссылке: http://https://github.com/mortbopet/Ripes, на сайте имеется возможность скачать исполняемые файлы для ОС Linux, Windows и macOS. На рис.2.2. показан пользовательский интерфейс симулятора Ripes. Слева расположен редактор программного кода на языке Assembler, по центру - сгенерированный машинный код, справа расположено коно, показывающее состояние регистров процессора, а внизу расположена консоль, в которую перенаправляется вывод программы и служебная информация. Помимо показанного интерфейса Ripes может визуализировать состояние процессора и его компонентов, кэш, память и простой ввод/вывод. Симулятор Ripes очень полезен для быстрого погружения в программирование на языке Assembler.

Интерфейс симулятора Ripes, запущенного под MacOS

Рис. 2.2. Интерфейс симулятора Ripes, запущенного под MacOS
Эмулятор Qemu и набор инструментов GNU-toolchain для процессора RISC-V

Существуют различные способы обеспечения эмуляции систем на основе микропроцессоров RISC-V благодаря использованию Qemu (доступен по ссылке http://https://www.qemu.org) - эмулятора аппаратного обеспечения, который позволяет эмулировать как целые системы, так и отдельные программы в так называемом "пользовательском режиме" (англ. "user-mode"). В случае эмуляции целой системы операционная система запускается так, как будто она действительно работает на реальном (а не на эмулируемом) железе. При запуске приложений в пользовательском режиме (user-mode emulation) отдельная программа может быть запущена на текущей ОС, даже если она была скомпилирована под другую архитектуру.

В рассматриваемых примерах мы будем считать, что работа идёт на машине с установленной ОС Debian Linux. С более детальной информацией можно ознакомиться на сайте "Debian wiki for RISC-V" по адресу http://https://wiki.debian.org/RISC-V. Далее будет использоваться установка готовых пакетов с использованием менеджера пакетов Debian Advanced Packaging Tool (apt), тем не менее, по адресу http://https://github.com/riscv-collab/riscv-gnu-toolchain располагается инструкция о том, как можно собрать рассматриваемые утилиты из исходников.

Для установки Qemu на компьютер наберите в консоли следующий набор команд:

sudo apt install qemu-system-misc qemu-user-static binfmt-support opensbi u-boot-qemu

Теперь у вас появилась возможность эмулировать систему на процессоре RISC-V. Введите команду:

qemu-riscv64-static -help  

Вы должны получить в ответ текст, который начинается со следующей строки:

usage: qemu-riscv64 [options] program [arguments...]
...

Следующим шагом идёт установка набора инструментов кросс-компилятора для сборки программ. Введите следующие команды:

sudo apt install gcc-riscv64-linux-gnu
sudo ln -s /usr/riscv64-linux-gnu/lib/ld-linux-riscv64-lp64d.so.1 /lib

И следом за ними команду:

riscv64-linux-gnu-as --version
GNU assembler (GNU Binutils for Debian) 2.35.2
...

Такой вывод говорит об успешной установке набора инструментов, позволяющего запускать эмуляцию программ в режиме пользователя.

После установки эмулятора и набора средств кросс-компилятора необходимо установить отладчик для процессоров с архитектурой RISC-V. В зависимости от версии ОС Debian Linux возможно потребуется поставить нестабильные версии пакетов (для более новых версий ОС).

Отладчик с поддержкой приложений для архитектуры RISC-V называется gdb-multiarch и может быть установлен следующей командой:

sudo apt install gdb-multiarch
< Лекция 2 || Лекция 3: 123 || Лекция 4 >