diff --git a/bsp/qemu-vexpress-a9/README.md b/bsp/qemu-vexpress-a9/README.md index 5c20c0a833..3bdd186b25 100644 --- a/bsp/qemu-vexpress-a9/README.md +++ b/bsp/qemu-vexpress-a9/README.md @@ -1,14 +1,14 @@ -# QEMU/VExpress A9板级支持包说明 +# QEMU VExpress A9板级支持包说明 -## 1. 简介 +## 简介 -Versatile Express系统由ARM Ltd提供,作为CortexA9四核处理器的开发环境,硬件由uATX主板和CoreTile Express A9x4子板组成。有关该系统的详细信息,可以访问 [ARM官方页面][1] 。 +- Versatile Express系统由ARM Ltd提供,作为CortexA9四核处理器的开发环境,硬件由uATX主板和CoreTile Express A9x4子板组成。有关该系统的详细信息,可以访问 [ARM官方页面][1] 。 -Versatile Express的核心是一套FPGA的开发环境,Cortex-A芯片基于FPGA上的硬件逻辑,所以本身是不存在这么一款真实芯片。 +- Versatile Express的核心是一套FPGA的开发环境,Cortex-A芯片基于FPGA上的硬件逻辑,所以本身是不存在这么一款真实芯片。 -QEMU/VExpress A9是QEMU模拟器针对ARM VExpress-A9 FPGA开发板进行软件模拟的指令级虚拟机。QEMU/VExpress因为是软件仿真模式,可以配置成多种模式,例如单核Cortex-A9,多核Cortex-A9,以及多核Cortex-A15等。同时也能够模拟出VExpress FPGA开发板上大多数的外设。 +- QEMU/VExpress A9是QEMU模拟器针对ARM VExpress-A9 FPGA开发板进行软件模拟的指令级虚拟机。QEMU/VExpress因为是软件仿真模式,可以配置成多种模式,例如单核Cortex-A9,多核Cortex-A9,以及多核Cortex-A15等。同时也能够模拟出VExpress FPGA开发板上大多数的外设。 -这份RT-Thread BSP是针对QEMU/VExpress-A9的一份移植,也并未在真实的VExpress FPGA开发板上运行过,主要是提供给开发者一定的便利,能够使用、验证一定的功能。对于真实FPGA开发板的执行情况,不做任何假设。 +- 这份RT-Thread BSP是针对QEMU/VExpress-A9的一份移植,也并未在真实的VExpress FPGA开发板上运行过,主要是提供给开发者一定的便利,能够使用、验证一定的功能。对于真实FPGA开发板的执行情况,不做任何假设。 当前QEMU/VExpress-A9对应的硬件特性: @@ -18,23 +18,33 @@ QEMU/VExpress A9是QEMU模拟器针对ARM VExpress-A9 FPGA开发板进行软件 | 主频 | NA | | Memory | 128MB(0x60000000 - 0x68000000) | -## 2. 编译说明 +## 编译说明 -推荐使用[env工具][2],可以在console下进入到`bsp/qemu-vexpress-a9`目录中,运行以下命令: +- 推荐使用[env工具][2]编译工程,在`bsp/qemu-vexpress-a9`目录中打开env环境,运行命令`scons -j4` - scons +![image-20220626114422344](figures/image-20220626114422344.png) -来编译这个板级支持包。如果编译正确无误,会产生rtthread.elf、rtthread.bin文件。在QEMU中一般使用elf方式来运行,所以只需要使用rtthread.elf文件即可。 -**注:** RT-Thread/ENV中携带的工具版本是: - gcc version 5.4.1 20160919 (release) [ARM/embedded-5-branch revision 240496] +- 如果编译正确无误,会产生rtthread.elf、rtthread.bin文件。在QEMU中一般使用elf方式来运行,所以只需要使用rtthread.elf文件即可。 -如果在Linux下使用,请自行下载[GNU GCC工具链][3]。 + ![image-20220626114611158](figures/image-20220626114611158.png) -## 3. 执行和退出 -### 3.1 执行脚本文件说明 + +- 当前测试使用的RT-Thread Env版本 + + ![image-20220626113747893](figures/image-20220626113747893.png) + +- 当前测试使用的GCC 交叉编译工具链版本 + + ![image-20220626114020634](figures/image-20220626114020634.png) + +- 如果在Linux下使用,请自行下载[GNU GCC工具链][3]。 + +## 执行和退出 + +### 执行脚本文件说明 在这个bsp目录下已经提供了下面几个执行脚本文件,具体的说明如下表所示: @@ -47,28 +57,49 @@ QEMU/VExpress A9是QEMU模拟器针对ARM VExpress-A9 FPGA开发板进行软件 | qemu-nographic.bat | Windows | 以不带界面的模式启动运行 | | qemu-nographic.sh | Linux | 同上 | -### 3.2 Windows下执行RT-Thread +### RT-Studio IDE下运行RT-Thread -#### 3.2.1 启动QEMU运行 +推荐使用该方式进行学习,简单易用 -当要执行编译好的RT-Thread时,可以在bsp目录下运行env,在env中敲入qemu.bat即可直接运行。 +- 创建QEMU工程,创建RT-Thread项目,选择基于开发板,选择QEMU-VEXPRESS-A9 -这个执行脚本默认把串口输出到stdio(即控制台)上,所以直接执行脚本后就可以输出结果了。 + ![image-20220626125511399](figures/image-20220626125511399.png) -```text - \ | / -- RT - Thread Operating System - / | \ 3.0.4 build May 4 2018 - 2006 - 2018 Copyright by rt-thread team -SD card capacity 65536 KB -probe mmcsd block device! -hello rt-thread -msh /> -``` +- 创建好工程后,点击完成,选中qemu-a9工程,编译工程 -当然你也可以尝试使用其他两个**.bat**文件启动运行。 + ![image-20220626125644099](figures/image-20220626125644099.png) -#### 3.2.2 退出QEMU运行 +- 调试工程,发现程序停在了main函数开头处 + + ![image-20220626125717698](figures/image-20220626125717698.png) + +- 点击全速运行,发现程序正常运行起来 + + ![image-20220626125837849](figures/image-20220626125837849.png) + + + +### Windows ENV下运行RT-Thread + +#### 启动QEMU运行 + +- 当要运行编译好的RT-Thread时,可以在bsp目录下运行env,在env中敲入qemu.bat即可直接运行。这个执行脚本默认把串口输出到stdio(即控制台)上,所以直接执行脚本后就可以输出结果了。 + +- 默认情况下,我们发现已经成功挂载SD卡 + + > 注意一下,默认情况下,由于SD中没有文件系统存在,因此挂载失败,程序中检测到文件系统挂载失败后,会自动执行mkfs对文件系统进行格式化操作,格式化完后,再次执行mount操作,文件系统挂载成功 + + ![image-20220626115233881](figures/image-20220626115233881.png) + + ![image-20220626115854706](figures/image-20220626115854706.png) + +- 文件系统操作,测试文件系统是否可以正常读写 + + ![image-20220626115504981](figures/image-20220626115504981.png) + +- 当然你也可以尝试使用其他两个**.bat**文件启动运行。 + +#### 退出QEMU运行 在msh提示输入的状态下,按下 **CTRL+C** ,有以下提示之后,按下 **y** ,即可退出 QEMU 。 @@ -79,9 +110,15 @@ msh /> msh />Terminate batch job (Y/N)? y ``` -### 3.3 Linux下执行RT-Thread +### Windows VSCode 中运行RT-Thread -#### 3.3.1 安装QEMU工具包 +参考文档:[使用VS Code开发RT-Thread](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/application-note/setup/qemu/vscode/an0021-qemu-vscode?id=%e4%bd%bf%e7%94%a8-vs-code-%e5%bc%80%e5%8f%91-rt-thread) + + + +### Linux下执行RT-Thread + +#### 安装QEMU工具包 在Linux下调试启动与Windows下稍微有点点区别,由于Windows下安装了**env**工具就自带了**qemu-system-arm**,而Linux下默认是没有这个工具的,所以执行执行`./qemu.sh`会报错: @@ -123,7 +160,7 @@ QEMU emulator version 4.2.1 (Debian 1:4.2-3ubuntu6.17) Copyright (c) 2003-2019 Fabrice Bellard and the QEMU Project developers ``` -#### 3.3.2 启动QEMU运行 +#### 启动QEMU运行 由于Linux平台一般都是不带界面的服务器,所以推荐使用`qemu-nographic.sh`脚本来启动运行,参考运行示例如下: @@ -175,7 +212,7 @@ msh /> **注意**: 前面的错误信息可以忽略,能看到RT-Thread的启动logo输出,以及msh能正常输入输出,即可进行代码调试了。 -#### 3.3.3 退出QEMU运行 +#### 退出QEMU运行 Linux下退出QEMU的方式与Windows下有些不一样;在msh提示输入的状态下,按下 **CTRL+A** ,再按下 **X** ,即可退出 QEMU 。 @@ -186,6 +223,8 @@ msh /> msh />QEMU: Terminated ``` + + ## 4. 支持情况 | 驱动 | 支持情况 | 备注 | @@ -197,40 +236,7 @@ msh />QEMU: Terminated | Mouse | 支持 | | | EMAC | 支持 | | -### 4.1 使用VSCode编辑、编译、调试 -在qemu-vexpress-a9中已经携带了部分vscode的配置,需要配合着env一起来使用。步骤包括: - -先使用env打开console,然后在console中切换都qemu-vexpress-a9 bsp的目录下, - -```bash -scons --target=vsc -s -``` - -更新vscode需要用到的C/C++头文件搜索路径信息(不是每次都需要更新,只有在使用了menuconfig重新配置了RT-Thread或更改了rtconfig.h头文件时才需要) - -然后在console下输入 - -```bash -code . -``` - -启动vscode。使用vscode,目前包含如下的一些功能: - -* 编译 `Ctrl+Shift+B` - 开启vscode内置终端,调用scons进行编译;如果有编译错误也会侦测问题,双击问题跳到指定代码文件、代码行; -* 包含执行`qemu`模拟器,`scons -c`进行目标文件清理的任务 -* `F5` 一键开启QEMU调试模式,并断点停留在`main`函数上;(需要更改下qemu-dbg.bat文件,在qemu-system-arm前加入`start`),即 - -```batch -@echo off -if exist sd.bin goto run -qemu-img create -f raw sd.bin 64M - -:run -start qemu-system-arm -M vexpress-a9 -kernel rtthread.elf -serial stdio -sd sd.bin -S -s -``` - -**已知问题** 如果在vscode的目录中额外添加了文件夹,会导致调试不能够启动。 ## 5. 联系人信息 diff --git a/bsp/qemu-vexpress-a9/figures/image-20220626113747893.png b/bsp/qemu-vexpress-a9/figures/image-20220626113747893.png new file mode 100644 index 0000000000..d1381f84c3 Binary files /dev/null and b/bsp/qemu-vexpress-a9/figures/image-20220626113747893.png differ diff --git a/bsp/qemu-vexpress-a9/figures/image-20220626114020634.png b/bsp/qemu-vexpress-a9/figures/image-20220626114020634.png new file mode 100644 index 0000000000..b058254b6e Binary files /dev/null and b/bsp/qemu-vexpress-a9/figures/image-20220626114020634.png differ diff --git a/bsp/qemu-vexpress-a9/figures/image-20220626114422344.png b/bsp/qemu-vexpress-a9/figures/image-20220626114422344.png new file mode 100644 index 0000000000..7c3c481e2b Binary files /dev/null and b/bsp/qemu-vexpress-a9/figures/image-20220626114422344.png differ diff --git a/bsp/qemu-vexpress-a9/figures/image-20220626114510055.png b/bsp/qemu-vexpress-a9/figures/image-20220626114510055.png new file mode 100644 index 0000000000..601a5f2051 Binary files /dev/null and b/bsp/qemu-vexpress-a9/figures/image-20220626114510055.png differ diff --git a/bsp/qemu-vexpress-a9/figures/image-20220626114611158.png b/bsp/qemu-vexpress-a9/figures/image-20220626114611158.png new file mode 100644 index 0000000000..65acc9705d Binary files /dev/null and b/bsp/qemu-vexpress-a9/figures/image-20220626114611158.png differ diff --git a/bsp/qemu-vexpress-a9/figures/image-20220626115233881.png b/bsp/qemu-vexpress-a9/figures/image-20220626115233881.png new file mode 100644 index 0000000000..de6a77f51b Binary files /dev/null and b/bsp/qemu-vexpress-a9/figures/image-20220626115233881.png differ diff --git a/bsp/qemu-vexpress-a9/figures/image-20220626115504981.png b/bsp/qemu-vexpress-a9/figures/image-20220626115504981.png new file mode 100644 index 0000000000..8cfdf1fadf Binary files /dev/null and b/bsp/qemu-vexpress-a9/figures/image-20220626115504981.png differ diff --git a/bsp/qemu-vexpress-a9/figures/image-20220626115854706.png b/bsp/qemu-vexpress-a9/figures/image-20220626115854706.png new file mode 100644 index 0000000000..c192626bbe Binary files /dev/null and b/bsp/qemu-vexpress-a9/figures/image-20220626115854706.png differ diff --git a/bsp/qemu-vexpress-a9/figures/image-20220626121008666.png b/bsp/qemu-vexpress-a9/figures/image-20220626121008666.png new file mode 100644 index 0000000000..616f903e1f Binary files /dev/null and b/bsp/qemu-vexpress-a9/figures/image-20220626121008666.png differ diff --git a/bsp/qemu-vexpress-a9/figures/image-20220626125511399.png b/bsp/qemu-vexpress-a9/figures/image-20220626125511399.png new file mode 100644 index 0000000000..9f0aacdc95 Binary files /dev/null and b/bsp/qemu-vexpress-a9/figures/image-20220626125511399.png differ diff --git a/bsp/qemu-vexpress-a9/figures/image-20220626125644099.png b/bsp/qemu-vexpress-a9/figures/image-20220626125644099.png new file mode 100644 index 0000000000..6a0b0eced0 Binary files /dev/null and b/bsp/qemu-vexpress-a9/figures/image-20220626125644099.png differ diff --git a/bsp/qemu-vexpress-a9/figures/image-20220626125717698.png b/bsp/qemu-vexpress-a9/figures/image-20220626125717698.png new file mode 100644 index 0000000000..dd909b4c97 Binary files /dev/null and b/bsp/qemu-vexpress-a9/figures/image-20220626125717698.png differ diff --git a/bsp/qemu-vexpress-a9/figures/image-20220626125837849.png b/bsp/qemu-vexpress-a9/figures/image-20220626125837849.png new file mode 100644 index 0000000000..1901a2a279 Binary files /dev/null and b/bsp/qemu-vexpress-a9/figures/image-20220626125837849.png differ