Инструменты разработчика
Примеры к этому курсу выложены на GitHub, в каждом из каталогов примеров лежит файл platformio.ini. Эти файлы подготовлены для запуска примеров в Qemu с использованием пользовательского режима.
Пример работы в Visual Studio Code с расширением PlatformIO
Для получения окружения для программирования на языке Assembler в расширении PlatformIO среды разработки VS Code наберите к консоли расширения PlatformIO команду:
https://github.com/e1d1-academy/platform-linux_riscv.git
В расширении PlatformIO есть возможность работать под различны платформы, и если в диалоге вы наберёте "Linux", вам будет доступно окружение для ОС Linux для архитектуры RISC-V.
В появившемся списке вы можете кликнуть на требуемое окружение и увидите, что там есть раздел с примерами, которые можно импортировать и попробовать их в работе. Все примеры идут с конфигурационными файлами, которые позволяют сгенерировать шаблон приложения с вашим собственным кодом на языке Assembler. Этот код можно компилировать прямо из среды VS Code, а также запускать его как в обычном режиме, так и в режиме отладки.
В результате работы показанного примера на экран выводится фраза "Hello World!".
Мини-компьютер StarFive VisionFive и набор инструментов RISC-V GNU Toolchain
Одноплатный компьютер StarFive VisionFive поставляется с двухъядерным RISC-V процессором с архитектурой RV64IMAFDC. По умолчанию поставляется с ОС Fedora Linux и предустановленным набором инструментов. Этот одноплатный компьютер можно использовать как "живую" аппаратную платформу с процессором RISC-V и работать на нём без необходимости устанавливать эмуляторов, симуляторов и кросс-ассемблеров.
На рис.2.4 показан скриншот рабочего стола xfce4 с четырьмя открытыми терминалами, запущенного на плате VisionFive.
![Рабочий стол Linux на плате VisionFile с запущенными терминалами с набором инструментов GNU toolchain](/EDI/13_02_25_2/1739398847-5454/tutorial/1373/objects/3/files/02-04.jpg)
Рис. 2.4. Рабочий стол Linux на плате VisionFile с запущенными терминалами с набором инструментов GNU toolchain
В левом верхнем углу расположен первый терминал, в нём открыт текстовый редактор nano с исходным кодом файла example.s. Чтобы воспроизвести это, наберите в консоли команду:
nano example.s
Затем вставьте скопированный программный код (или напишите его самостоятельно) и запишите содержимое файла на диск, нажав сочетание клавиш ^O (Сtrl+o).
Во втором терминале, расположенном слева посередине, показан результат сборки и линковки с последующей распечаткой дизассемблированного кода, выполненной с использованием утилиты objdump, а также результат запуска программы - демонстрация возвращаемого программой кода возврата. Отладочная информация внесена в исполняемый бинарный файл благодаря ключу "-g" компилятора. Для воспроизведения этих результатов введите в консоли команды:
as -g -o example.o example.s ld -o example example.o objdump -d example ./example echo $?
В третьем терминале, расположенном слева внизу, показана работа отладчика. Для воспроизведения введите в консоли команду:
gdb example
После запуска отладчика были использованы следующие управляющие команды: "layout src" - показать исходный код, "b 5" - установить точку останова на строке 5, "r" - запустить код на исполнение до точки останова, "info reg x107quot; - показать содержимое регистра x10:
(gdb) layout src (gdb) b 5 (gdb) r (gdb) info reg x10
Из отладчика можно выйти, набрав команду "q".
И, наконец, четвёртый терминал, расположенный справа, выводит информацию о процессоре.
Исходные коды примеров:
Исходные коды доступны в репозитории github по адресу: http://https://github.com/U2654/LFD117x
Контрольные вопросы
- Чем объектный файл отличается от исполняемого?
- В чём отличие ассемблера от языка ассемблера?
- Как компоновщик получает исполняемый файл из нескольких объектных?
- Состояние каких модулей процессора позволяет отслеживать Ripes?
- Чем симулятор отличается от эмулятора?
- В каких режимах может работать Qemu?
- Как с помощью objdump посмотреть информацию об исполняемом файле?
- Как отладчиком подключиться к запущенному процессу в Qemu?
- Какие команды отладчика необходимо использовать для выполнения программы?
- Какие команды позволяют просматривать значения переменных/регистров в процессе отладки?