QEMU: быстрый старт Печать
Добавил(а) microsin   

Встраиваемое программное обеспечение неотделимо от платы разработки. Без наличия физического устройства могут использоваться виртуальные машины наподобие QEMU, чтобы симулировать поведение платы разработки. QEMU это виртуальная машина, поддерживающая кроссплатформенную виртуализацию. Эта система может виртуализировать многие платы разработки. Чтобы упростить знакомство с RT-Thread [3] без платы разработки, команда RT-Thread предоставила пакет библиотек поддержки оборудования уровня ресурсов платы (board-level support package, BSP) для симулируемой в QEMU платы разработчика ARM vexpress A9.

[Установка QEMU на Windows]

Перед тем, как выполнить установку на Windows, нужно выполнить следующие подготовительные шаги:

- Загрузить исходный код RT-Thread [2].
- Загрузить Env Tool [4].
- Установить систему управления версиями Git [5].

При использовании утилит Env Tool для конфигурирования необходимого пакета поддержки платы нужно в терминале Env войти в директорию соответствующего BSP и выполнить команду menuconfig:

> cd e:\rt-thread\bsp\qemu-vexpress-a9
> menuconfig

Запустится утилита конфигурирования:

QEMU quick start Windows menuconfig fig02

Для перемещения между пунктами меню используйте клавиши со стрелками ↑ и ↓, для входа в выбранный раздел меню используйте Enter. Клавишей пробела выбирайте значение для булевых настроек, и клавишей Esc возвращаейтесь на предыдущий уровень меню.

Получение програмных пакетов. Если в menuconfig выбран программный пакет, то загрузите его командой pkgs --update (для успешного выполнения этой команды должен быть предварительно установлен Git):

> pkgs --update

Компиляция. Процесс компиляции выполняется с помощью утилиты scons [6]:

> scons

Генерация файлов проекта для IDE. Если для разработки вы используете Keil (MDK) или IAR IDE, то после завершения конфигурации для них нужно сгенерироват файлы проекта. Для этого используется колманда scons --target=xxx, как показано ниже. Вместо xxx подставьте имя соответствующей среды разработки.

scons --target=iar
scons --target=mdk4
scons --target=mdk5

Пакет поддержки плат BSP (board-level support package), предоставленный RT-Thread, симулирует плату разработки ARM vexpress A9. Этот пакет находится в папке BSP\qemu-vexpress-a9 каталога установки исходного кода RT-Thread. В этом BSP есть библиотеки для поддержки LCD, клавиатуры, мыши, карты SD, карты Ethernet, последовательного порта и другие драйверы аппаратуры. Содержимое папки BSP\qemu-vexpress-a9:

QEMU quick start Windows BSP fig03

Файлы и каталоги Описание
.vscode Конфигурационный файл для VSCode.
applications Директория для кода приложения.
drivers Драйверы низкого уровня, предоставленные RT-Thread.
qemu.bat Запускаемый скрипт для платформы Windows.
qemu.sh Запускаемый скрипт для платформы Linux.
qemu-dbg.bat Скрипт отладки для платформы Windows.
qemu-dbg.sh Скрипт отладки для платформы Linux.
README.md Описание BSP.
rtconfig.h Заголовочный файл конфигурации BSP.

Компиляция и запуск. Для компиляции проекта используйте утилиту scons.

1. Откройте папку Env и двойным кликом на env.exe запустите консоль Env.

QEMU quick start Windows BSP run Env fig04

Перейдите в каталог QEMU BSP и выполните команду scons для компиляции проекта.

QEMU quick start Windows scons compile fig05

Если компиляция завершилась успешно, то в каталоге BSP будет сгенерован файл rtthread.elf, это исполняемый код целевого процессора, необходимый для запуска симуляции QEMU.

2. Используйте скрипт qemu.bat для запуска проекта, он запустит виртуальную машину и проект BSP. Этот файл скрипта находится в папке BSP, и в нем находятся выполняемые инструкции QEMU. Первый запуск проекта создаст чистый файл sd.bin в папке BSP, это файл виртуальной карты SD размером 64 мегабайта. Интерфейс команды The Env покажет информацию инициализации и номер версии при запуске системы RT-Thread, когда запустится виртуальная машина QEMU:

QEMU quick start Windows qemu.bat fig06

3. RT-Thread поддерживает консоль FinSH, с помощью которой пользователи могут выполнять команды симулируемой системы. Подсказку по командам можно получить, если выполнить команду help, или нажать клавишу Tab. Список команд выводится вместе с их кратким описанием.

QEMU quick start Windows FinSH fig07

Например, если выполнить команду list_thread, то можно увидеть список работающих в настоящий момент потоков, их статус и размер стека. Если выполнить команду list_timer, то отобразится состояние таймеров.

QEMU quick start Windows FinSH commands example fig08

4. Запуск файловой системы. Выполните команду list_device, чтобы увидеть информацию по устройствам хранения, зарегистрированным в системе. В списке вы можете увидеть, что виртуальная карта SD отображается как устройство "sd0".

QEMU quick start Windows FinSH mkfs sd0 fig09

Мы можем отформатировать карту SD с помощью команды mkfs sd0, она создаст на карте SD файловую систему FAT Windows. Для файловой системы используется библиотека FatFS [7]. Она написана на ANSI C, создавая абстракцию нижнего слоя аппаратуры ввода/вывода носителья информации, что обеспечивает хорошую портируемость на различное оборудование.

После первого форматирования карты файловая система сразу не запустится, и она будет активирована только после второй загрузке RT-Thread. Закройте окно виртуальной машины и перезапустите qemu.bat в командной строке Env, или выполните команду reboot в консоли FinSH. После этого станут доступны файловые операции с картой в системе RT-Thread [8]:

ls: отобразит информацию директории.
cd: навигация по каталогам файловой системы.
rm: удаляет файлы или директории.
echo: запишет данные в целевой файл.
cat: отобразит содержимое файла.
mkdir: создает каталоги.

[Установка QEMU на Linux]

На примере Ubuntu установка происходит последовательным выполнением следующих шагов.

1. Установите Git:

$ sudo apt-get install git

2. Загрузите исходный код RT-Thread:

$ git clone https://github.com/RT-Thread/rt-thread.git

3. Установите QEMU:

$ sudo apt-get install qemu

4. Установите SCons:

$ sudo apt-get install scons

5. Установите компилятор. Если версия компилятора, установленная командой apt-get, слишком старая, то это может привести к ошибкам компиляции. Вы можете загрузить и установит новую версию, используя показанные ниже команды. Ссылка для загрузки и имя распакованной из архива папки может отлчиаться в соответствии с именованием версий. В следующем примере архив распаковывается в папку /opt:

$ wget https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-rm/6-2016q4/
 gcc-arm-none-eabi-6_2-2016q4-20161216-linux.tar.bz2
$ cd /opt
$ sudo tar xf ~/gcc-arm-none-eabi-6_2-2016q4-20161216-linux.tar.bz2

6. Установите библиотеку ncurses:

$ sudo apt-get install libncurses5-dev

7. После того, как компилятор установлен, необходимо модифицировать файл rtconfig.py для BSP (он находится в папке rt-thread/bsp/qemu-vexpress-a9), где надо указать правильный путь до папки bin компилятора, распакованного в папку opt:

QEMU quick start Ubuntu modify rtconfig.py fig11

8. Работа с Env Tool. Командами cd зайдите в директорию BSP. Установите Env Tool и сконфигрируйте BSP, выполнив команду:

$ scons --menuconfig

Эта команда установит и инициализирует инструментарий Env, после чего запустит интерфейс конфигурирования, в котором вы можете сконфигурировать BSP:

QEMU quick start Ubuntu menuconfig fig13

9. Загрузка необходимых программных пакетов. После того, как конфигурирование завершено, запустите загрузку пакетов зависимостей командой pkgs --update.

$ source ~/.env/env.sh
$ scons --menuconfig
$ pkgs --update

Файл env.sh это скрипт, который надо запустить для настройки среды выполнения, чтобы правильно отработали команды scons и pkgs (команда pkgs --update нужна для закачки пакетов, выбранных на шаге конфигурации menuconfig).

10. Компиляция. Чтобы скомпилировать конфиугурацию, выполните команду:

$ scons

QEMU quick start Ubuntu scons compile fig14

Если компиляция прошла успешно, то будет сгенерирован файл исполняемого кода rtthread.elf, который понадобится на следующем шаге для запуска проекта в QEMU.

11. Запуск эмуляции. После заврешения компиляции выполните команду ./qemu.sh, чтобы запустить виртуальную машину и на ней скомпилированный проект BSP. Скрипт qemu.sh находится в папке BSP, и в нем содержатся инструкции для запуска QEMU. При первом запуске проекта в папке BSP будет создан чистый файл sd.bin, который представляет собой образ для виртуальной карты SD размером 64M. Интерфейс команд Env при старте RT-Thread покажет лог инициализации проекта и номер версии RT-Thread.

QEMU quick start Ubuntu qemu.sh fig15

После этого станет доступна консоль команд FinSH, см. выше краткое описание команд. Команды работы с файловой системой станут доступны после форматирования и перезапуска системы.

[Ссылки]

1. Getting Started of QEMU site:rt-thread.io.
2. RT-Thread / rt-thread site:github.com.
3. RT-Thread RTOS и её компоненты.
4. gvanem / EnvTool site:github.com.
5. git for windows site:gitforwindows.org.
6. SCons: руководство пользователя, быстрый старт.
7Библиотека FatFS: модуль файловой системы FAT.
8RT-Thread Virtual File System.