Встраиваемое программное обеспечение неотделимо от платы разработки. Без наличия физического устройства могут использоваться виртуальные машины наподобие 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
Запустится утилита конфигурирования:
Для перемещения между пунктами меню используйте клавиши со стрелками ↑ и ↓, для входа в выбранный раздел меню используйте Enter. Клавишей пробела выбирайте значение для булевых настроек, и клавишей Esc возвращаейтесь на предыдущий уровень меню.
Получение програмных пакетов. Если в menuconfig выбран программный пакет, то загрузите его командой pkgs --update (для успешного выполнения этой команды должен быть предварительно установлен Git):
Компиляция. Процесс компиляции выполняется с помощью утилиты scons [6]:
Генерация файлов проекта для 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:
Файлы и каталоги |
Описание |
.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 BSP и выполните команду scons для компиляции проекта.
Если компиляция завершилась успешно, то в каталоге BSP будет сгенерован файл rtthread.elf, это исполняемый код целевого процессора, необходимый для запуска симуляции QEMU.
2. Используйте скрипт qemu.bat для запуска проекта, он запустит виртуальную машину и проект BSP. Этот файл скрипта находится в папке BSP, и в нем находятся выполняемые инструкции QEMU. Первый запуск проекта создаст чистый файл sd.bin в папке BSP, это файл виртуальной карты SD размером 64 мегабайта. Интерфейс команды The Env покажет информацию инициализации и номер версии при запуске системы RT-Thread, когда запустится виртуальная машина QEMU:
3. RT-Thread поддерживает консоль FinSH, с помощью которой пользователи могут выполнять команды симулируемой системы. Подсказку по командам можно получить, если выполнить команду help, или нажать клавишу Tab. Список команд выводится вместе с их кратким описанием.
Например, если выполнить команду list_thread, то можно увидеть список работающих в настоящий момент потоков, их статус и размер стека. Если выполнить команду list_timer, то отобразится состояние таймеров.
4. Запуск файловой системы. Выполните команду list_device, чтобы увидеть информацию по устройствам хранения, зарегистрированным в системе. В списке вы можете увидеть, что виртуальная карта SD отображается как устройство "sd0".
Мы можем отформатировать карту 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:
8. Работа с Env Tool. Командами cd зайдите в директорию BSP. Установите Env Tool и сконфигрируйте BSP, выполнив команду:
Эта команда установит и инициализирует инструментарий Env, после чего запустит интерфейс конфигурирования, в котором вы можете сконфигурировать BSP:
9. Загрузка необходимых программных пакетов. После того, как конфигурирование завершено, запустите загрузку пакетов зависимостей командой pkgs --update.
$ source ~/.env/env.sh
$ scons --menuconfig
$ pkgs --update
Файл env.sh это скрипт, который надо запустить для настройки среды выполнения, чтобы правильно отработали команды scons и pkgs (команда pkgs --update нужна для закачки пакетов, выбранных на шаге конфигурации menuconfig).
10. Компиляция. Чтобы скомпилировать конфиугурацию, выполните команду:
Если компиляция прошла успешно, то будет сгенерирован файл исполняемого кода rtthread.elf, который понадобится на следующем шаге для запуска проекта в QEMU.
11. Запуск эмуляции. После заврешения компиляции выполните команду ./qemu.sh, чтобы запустить виртуальную машину и на ней скомпилированный проект BSP. Скрипт qemu.sh находится в папке BSP, и в нем содержатся инструкции для запуска QEMU. При первом запуске проекта в папке BSP будет создан чистый файл sd.bin, который представляет собой образ для виртуальной карты SD размером 64M. Интерфейс команд Env при старте RT-Thread покажет лог инициализации проекта и номер версии RT-Thread.
После этого станет доступна консоль команд 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. 8. RT-Thread Virtual File System. |