Лабораторная работа №1. Знакомство с рабочей средой SYNTACORE KIT
1.1 Цель и задачи
Целью работы является освоение работы с виртуальным окружением лабораторного практикума (Syntacore Kit).
Для достижения поставленной цели требуется решить следующие задачи:
- Изучить структуру виртуального окружения, научится запускать виртуальные машины.
- Ознакомиться с основными командами, позволяющими проверить исправность среды.
- Изучить инструменты кросс-компиляции программ.
- Написать программу-пример для работы в виртуальной машине на базе RISC-V.
Презентация к блоку "Введение и инструменты сборки"
1.2. Основные теоретические сведения
1.2.1. Syntacore Kit
Виртуализация - создание виртуального представления (виртуальных устройств) вычислительных ресурсов (процессоров, оперативной памяти, сетевых устройств и т.д.), абстрагированного от их физического воплощения [1]. Интерфейсы и поведение виртуальных устройств максимально повторяют реальные устройства, однако за счет своей программной основы их можно в любой момент изменять.
Syntacore Kit -- набор инструментов разработчика для платформы RISC-V, организованный в виде набора виртуальных машин. Внешне Syntacore Kit представляет собой образ виртуальной машины VirtualBox, внутри которого содержится ОС (операционная система) Ubuntu 22.04 с процессором x86_64, необходимые инструменты разработчика (инструменты командной строки и Syntacore SC-IDE) , а также виртуальная машина QEMU с процессором RISC-V и ОС Debian Unstable с ядром Linux версии 5.18. В дальнейшем мы будем использовать следующие термины:
- ОС хоста - операционная система компьютера, на котором вы выполняете лабораторные работы
- Гостевая ОС - операционная система Ubuntu 22.04, работающая на виртуальной машине VirtualBox, запускаемой в ОС хоста.
- RISC-V ОС - операционная система Debian Unstable с ядром Linux версии 5.18 без графической оболочки, работающая на виртуальной машине QEMU (с виртуальным процессором RISC-V), запускаемой на гостевой ОС.
Syntacore Kit позволяет разработчикам создавать, компилировать и запускать тестировать программы для платформы RISC-V с помощью инструментов, расположенных в гостевой ОС. Для этого используется механизм кросс-компиляции - подхода, при котором код программы собирается для архитектуры, отличной от той, где запущен компилятор. Кросс-компиляторы входят в состав инструментов командной строки и Syntacore SC-IDE.
1.2.2. Компиляция и запуск программ в Syntacore Kit
Ниже будет рассмотрена последовательность действий для запуска Syntacore Kit и компиляции программ на его виртуальных машинах. На момент начала лабораторной работы Syntacore Kit должен быть установлен в вашем компьютерном классе.
Если запуск выполнен успешно, то вы увидите интерфейс гостевой ОС (Рис 1.)
Необходимые элементы Syntacore Kit для выполнения данной лабораторной работы:
- Эмулятор терминала.
- Ярлык запуска Syntacore SC-IDE.
Для того чтобы запустить RISC-V ОС, нажмите на ярлык №1 (Рис. 2.1). В открывшемся окне терминала выполните две команды
$ cd ~/riscv-debian-sandbox/artifacts $ ./run.sh
После выполнения данных команд начнется процесс запуска виртуальной машины QEMU c RISC-V ОС. Полная загрузка RISC-V ОС может потребовать некоторого времени (порядка 1-2 минут). В случае успешного запуска в интерфейсе гостевой ОС отобразится следующее окно (Рис. 1.2).
В окне вам будет предоставлен интерфейс авторизации RISC-V ОС. Для авторизации используйте логин debian и пароль debian. В случае успешной авторизации вам будет доступен интерфейс командной строки (Рис. 1.3).
В командной строке (Рис. 1.3) содержится минимальный инструментарий разработчика, позволяющий создавать и компилировать программы непосредственно в RISC-V ОС. Рассмотрим три основных способа создания RISC-V приложений в Syntacore Kit
Создание приложений в терминале RISC-V ОС
При данном способе и редактирование исходного кода, и его компиляция происходит в RISC-V ОС. Для сборки своего первого приложения выполните следующие команды:
$ cd ~/hello_world_test/ # Смена текущего каталога $ gcc -o hello hello.c # Компиляция программы (флаг -o задает имя исполняемого файла $ ./hello # запуск программы
В случае успешного выполнения в терминале должна отобразится строка "Hello from RISC-V". Обратите внимание, что вы можете создавать новые программы или редактировать пример с помощью предустановленных текстовых редакторов в командной строке nano, vim и vi. Начинающим пользователям мы рекомендуем использовать nano.
Создание приложений в терминале гостевой ОС
Гостевая ОС имеет инструменты кросс-компиляции для сборки RISC-V приложений. Для начала работы в терминале создайте с помощью следующих команд файл hello.c:
$ nano hello.c
В открывшемся окне вставьте код программы выше с помощью буфера обмена. Затем нажмите сочетание клавиш CTRL + X (в английской раскладке). После чего, нажмите на клавиатуре Y (в английской раскладке) и клавишу Enter.
#include <stdio.h> int main(void) { printf("Hello from RISC-V\n"); return 0; }
Далее выполните команду кросс-компиляции:
$ riscv64-unknown-linux-gnu-gcc -o hello hello.c
Эта команда вызовет специальную версию компилятора gcc, которая создает приложения RISC-V. По итогу ее работы, на вашей файловой системе будет создан файл ./hello. Однако, если вы попробуете запустить его в том же терминале, то вас ждет ошибка:
$ ./hello bash: ./hello: cannot execute binary file: Exec format error
Ошибка связана с тем, что архитектура исполняемого файла hello не соответствует архитектуре гостевой ОС. Поэтому для запуска созданной программы ее нужно необходимо запускать в RISC-V ОС. Для этого существует два способа: запуск через утилиту qemu-riscv64 и копирование файла в виртуальную машину. Для обоих способов необходимо чтобы у вас уже была запущена RISC-V ОС.
1.2.2.1 Запуск через qemu-riscv64
В ряде случаев, для запуска и отладки программ на архитектуре RISC-V не обязательно запускать полноценную виртуальную машину с RISC-V ОС. В этих случаях можно использовать утилиту qemu-riscv64, которая обеспечивает запуск легковесной эмуляции для одной программы.
Выполните следующую команду в терминале гостевой ОС:
$ qemu-riscv64 -L "$RISCV/sysroot" ./hello
Произойдет запуск и вы увидите сообщение "Hello from RISC-V". Флаг -L устанавливает предварительно настроенное окружение для корректной работы RISC-V программ.
1.2.2.2 Копирование программы в RISC-V ОС
В терминале гостевой ОС выполните команду копирования по ssh:
$ scp ./hello riscv-debian:/home/debian
Данная команда создала копию исполняемого файла ./hello из гостевой ОС в каталоге /home/debian RISC-V ОС. Теперь откройте окно терминала RISC-V ОС и выполните команды
$ cd ~ $ ./hello
Произойдет запуск и вы увидите сообщение "Hello from RISC-V".