ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Windows 平台使用 QEMU 快速体验 RT-Thread:qemu-vexpress-a9 BSP 编译运行与文件系统实战指南

Windows 平台使用 QEMU 快速体验 RT-Thread:qemu-vexpress-a9 BSP 编译运行与文件系统实战指南 操作系统嵌入式物联网嵌入式OSRTOS【免费下载链接】rt-threadRT-Thread is an open source IoT Real-Time Operating System (RTOS). https://rt-thread.github.io/rt-thread/项目地址https://gitcode.com/gh_mirrors/rt/rt-thread点击查看免费下载嵌入式开发离不开开发板但在没有真实硬件的情况下同样可以用 QEMU 这类跨平台虚拟机来模拟开发板从而完整地体验 RT-Thread 的编译、启动、命令行交互与文件系统操作。本指南以 RT-Thread 官方提供的bsp/qemu-vexpress-a9板级支持包BSP为核心逐步讲解在 Windows 平台通过 Env 工具完成 menuconfig 配置、scons 编译、qemu.bat 启动虚拟开发板、Finsh/MSH 控制台调试以及虚拟 SD 卡文件系统使用的完整流程并给出源码级的参数与原理佐证。一、为什么用 QEMU 体验 RT-ThreadARM vexpress A9 虚拟开发板QEMU 是一款支持跨平台虚拟化的虚拟机能够虚拟化多种开发板。为了在没有实体开发板的情况下方便开发者体验 RT-ThreadRT-Thread 为 QEMU 模拟的ARM vexpress A9开发板提供了板级支持包BSP。该 BSP 位于仓库的 bsp/qemu-vexpress-a9 目录实现了 LCD、键盘、鼠标、SD 卡、以太网卡、串口等设备驱动让开发者可以在纯软件环境中运行并验证 RT-Thread 系统。从 BSP 自带的 README 可以确认该 BSP 模拟的硬件特性如下| 硬件 | 描述 | | -- | -- | | CPU | ARM Cortex-A9 | | 内存 | 128MB0x60000000 - 0x68000000 | | 驱动支持 | UARTUART0/1、SD/MMC、CLCD、键盘、鼠标、EMAC 以太网 |需要说明的是QEMU/VExpress A9 是 QEMU 模拟器针对 ARM VExpress-A9 FPGA 开发板的指令级软件仿真可以配置为单核、多核 Cortex-A9 等多种模式这份 BSP 是针对 QEMU/VExpress-A9 的移植并未在真实 FPGA 开发板上运行过主要用于开发者的功能体验与验证。二、环境准备源码与 Env 工具开始前需要准备两样东西RT-Thread 源码可通过git clone https://gitcode.com/gh_mirrors/rt/rt-thread.git获取或直接下载源码包解压。Env 工具下载并安装 RT-Thread 的 Env 命令行构建环境详细安装与使用说明见 Env 工具文档。Env 内置了menuconfig、scons、pkgs等构建命令并且自带qemu-system-arm模拟器Windows 下无需另行安装 QEMU。关于交叉编译工具链BSP 的 rtconfig.py 中默认配置为EXEC_PATH os.getenv(RTT_EXEC_PATH) or r/usr/bin PREFIX os.getenv(RTT_CC_PREFIX) or arm-none-eabi-即默认使用arm-none-eabi-gccWindows 下 Env 工具自带的工具链可直接满足要求若需指定其他工具链位置可通过环境变量RTT_EXEC_PATH指向其bin目录无需改动源码。三、认识 qemu-vexpress-a9 BSP 目录结构在 BSP 目录bsp/qemu-vexpress-a9下主要文件与目录的功能如下文件/目录说明.vscodeVS Code 配置文件applications用户应用代码目录driversRT-Thread 提供的底层驱动qemu.batWindows 平台运行脚本qemu.shLinux 平台运行脚本qemu-dbg.batWindows 平台调试脚本qemu-dbg.shLinux 平台调试脚本README.mdBSP 说明文档rtconfig.hBSP 配置文件头文件对照仓库中实际的目录内容还可以看到 BSP 根目录下同时包含Kconfigmenuconfig 菜单定义、SConscript/SConstructscons 构建脚本、link.ldsGCC 链接脚本、rtconfig.py工具链与编译参数以及qemu-nographic.bat无图形界面的运行脚本。其中applications目录下的 main.c 是用户入口默认打印Hello RT-Thread!mnt.c 负责文件系统的挂载初始化下文会详细分析。四、编译与运行从 menuconfig 到 qemu.bat4.1 使用 menuconfig 配置 BSP打开 Env 工具切换到bsp/qemu-vexpress-a9目录输入menuconfig命令即可进入图形化配置界面。在界面中使用键盘↑、↓键上下浏览菜单项使用Enter键进入选中目录使用Space键选择或取消布尔变量使用Esc键退出当前目录。配置完成后保存退出。menuconfig的菜单定义来自 BSP 根目录的 Kconfig 与 drivers/Kconfig前者挂载 RT-Thread 内核、组件与软件包菜单后者定义了硬件驱动选项。4.2 软件包获取如果在 menuconfig 中勾选了软件包需要执行pkgs --update命令下载对应软件包。更推荐的方式是执行menuconfig -s进入高级设置勾选Auto update pkgs config功能这样退出 menuconfig 时 Env 会自动下载并更新所选软件包无需手动执行pkgs --update。4.3 使用 scons 编译工程打开 Env 文件夹双击env.exe打开 Env 控制台切换到 QEMU BSP 目录执行scons或利用多核加速编译scons -j12其中-j12表示使用 12 个 CPU 核并行编译。编译正确后BSP 目录下会生成rtthread.elf目标文件同时根据 rtconfig.py 中的POST_ACTIONobjcopy -O binary还会生成 QEMU 直接加载的rtthread.bin内核镜像。4.4 使用 qemu.bat 启动虚拟开发板编译完成后在 Env 控制台输入qemu.bat即可启动虚拟机和 BSP 工程。qemu.bat是位于 BSP 目录下的 Windows 批处理文件其完整内容为echo off if exist sd.bin goto run qemu-img create -f raw sd.bin 64M :run qemu-system-arm --version qemu-system-arm -M vexpress-a9 -smp cpus2 -kernel rtthread.bin -serial stdio -sd sd.bin脚本逻辑与关键参数解读如下首次运行时qemu-img create -f raw sd.bin 64M会在 BSP 目录下创建一块64MB 的空白虚拟 SD 卡sd.bin后续再运行则直接复用-M vexpress-a9指定模拟 vexpress-a9 机器型号-smp cpus2模拟双核 CPU 拓扑RT-Thread 多核相关配置见 Kconfig 中的RT_CPUS_NR项-kernel rtthread.bin指定加载的内核镜像-serial stdio将串口输出重定向到控制台因此 RT-Thread 的启动日志直接显示在 Env 窗口-sd sd.bin挂载虚拟 SD 卡。启动后Env 命令行界面会显示 RT-Thread 系统启动时的初始化信息与版本号信息同时 QEMU 虚拟开发板窗口也在运行。4.5 退出 QEMU在 msh 命令行提示符下按下CTRLC出现Terminate batch job (Y/N)?提示后输入y即可退出 QEMU 虚拟开发板。五、使用 Finsh/MSH 命令行控制台RT-Thread 支持 Finsh 命令行组件用户可以在命令行模式下直接执行系统命令。在 msh 提示符下输入help或按下Tab键即可查看 BSP 支持的全部命令——左侧为命令名右侧为命令描述。典型的内核调试命令包括list_thread查看当前运行的所有线程、线程状态及栈大小list_timer查看系统中定时器的状态。从 rtconfig.h 可以看到 Finsh/MSH 的相关默认配置例如#define RT_USING_MSH #define RT_USING_FINSH #define FINSH_USING_MSH #define FINSH_THREAD_NAME tshell #define FINSH_THREAD_PRIORITY 20 #define FINSH_THREAD_STACK_SIZE 4096 #define FINSH_USING_HISTORY #define FINSH_HISTORY_LINES 10 #define FINSH_CMD_SIZE 256 #define MSH_USING_BUILT_IN_COMMANDS #define FINSH_USING_DESCRIPTION其中FINSH_USING_HISTORY/FINSH_HISTORY_LINES 10表示启用命令行历史记录最多 10 条FINSH_USING_DESCRIPTION对应help输出中每条命令的右侧描述这些参数都可以在menuconfig中调整。六、文件系统体验格式化并挂载虚拟 SD 卡6.1 查看系统设备在 msh 中输入list_device可以查看系统中注册的全部设备其中可以看到虚拟 SD 卡设备sd0。6.2 格式化为 FatFS 文件系统接下来使用mkfs sd0命令将 SD 卡格式化为 FatFS 文件系统。FatFS 是为小型嵌入式设备设计的、与微软 FAT 兼容的文件系统它使用 ANSI C 编写通过抽象硬件 I/O 层与底层设备解耦并持续维护因此具有良好的可移植性。从 rtconfig.h 可以看到本 BSP 启用的 FatFS 相关配置例如#define RT_USING_DFS #define RT_USING_DFS_V2 #define RT_USING_DFS_ELMFAT #define RT_DFS_ELM_USE_LFN 3 /* 启用长文件名 */ #define RT_DFS_ELM_MAX_LFN 255 #define RT_DFS_ELM_DRIVES 2 /* 虚拟驱动器数量 */ #define RT_DFS_ELM_MAX_SECTOR_SIZE 4096 #define RT_DFS_ELM_REENTRANT #define RT_DFS_ELM_MUTEX_TIMEOUT 30006.3 重新启动以加载文件系统SD 卡第一次格式化后文件系统并不会立即加载需要退出虚拟机然后在 Env 命令行重新输入qemu.bat重启虚拟机与工程第二次启动后文件系统才会被正确加载。此时输入ls可以看到/根目录下已经出现了挂载目录文件系统加载成功即可体验 RT-Thread 提供的各类文件操作命令。值得一提的源码细节是BSP 的 mnt.c 中通过INIT_ENV_EXPORT(mnt_init)注册了文件系统自动挂载初始化逻辑——它先尝试dfs_mount(sd, /, elm, 0, 0)若因 SD 卡尚无文件系统而挂载失败会自动调用dfs_mkfs(elm, sd)格式化后再重新挂载并打印file system initialization done。这与通过 msh 手动执行mkfs sd0的效果一致可以理解为 BSP 提供了「自动格式化 重挂载」的兜底路径而文档中的手动mkfs sd0流程则更适合用于学习 FatFS 的完整操作过程。6.4 常用文件系统命令RT-Thread 提供的常用文件系统命令如下ls显示文件和目录信息cd切换到指定目录rm删除文件或目录echo将指定内容写入目标文件cat显示文件内容详情mkdir创建文件夹。输入help可以查看更多的文件系统相关命令。七、更多功能扩展裁剪配置与软件包在 BSP 目录的 Env 工具中再次执行menuconfig可以配置更多功能。配置完成后先保存配置再退出配置界面。按照文档给出的标准流程若勾选了软件包使用pkgs --update命令下载对应软件包使用scons或scons -j12编译工程输入qemu.bat运行使用help查看该 BSP 支持的全部命令并按需执行。从 drivers/Kconfig 可以看到本 BSP 提供的主要扩展驱动选项均可在 menuconfig 中开关配置项说明默认值BSP_USING_UART启用串口含 UART0 调试串口及 UART1/2/3yUART0 默认开启BSP_DRV_CLCDCLCD 显示驱动select RT_USING_LCD可配BSP_LCD_WIDTH/BSP_LCD_HEIGHT默认 640×480nBSP_DRV_MOUSE鼠标驱动nBSP_USING_LVGL为 LCD 启用 LVGL 图形库自动关联 CLCD/MOUSE 驱动及 LVGL 软件包nBSP_DRV_EMAC以太网驱动自动开启 lwIP 与 POSIX 网络层nBSP_DRV_AUDIO音频驱动n例如勾选BSP_DRV_EMAC后select RT_USING_LWIP会自动引入 lwIP 协议栈编译运行后即可在help中看到网络相关的命令。这些配置都遵循「menuconfig 配置 → pkgs --update 拉包 → scons 编译 → qemu.bat 运行 → help 查命令」的闭环流程方便按需组装自己的功能组合。八、常见问题与提示编译产物scons编译后生成rtthread.elf与rtthread.binqemu.bat通过-kernel rtthread.bin加载镜像两者均由 rtconfig.py 的构建流程产出。工具链路径若提示找不到arm-none-eabi-gcc请确认 Env 环境或通过RTT_EXEC_PATH环境变量指定工具链 bin 目录。虚拟 SD 卡sd.bin一旦创建即被复用如需全新磁盘可在关闭 QEMU 后自行删除该文件重新生成注意这是操作说明不是对仓库的修改。跨平台对照BSP 同时提供qemu.shLinux 普通模式与qemu-dbg.batWindows 调试模式等脚本Linux 下使用前需自行安装qemu-system-arm具体见 bsp/qemu-vexpress-a9/README.md。深入学习BSP 的驱动实现位于 bsp/qemu-vexpress-a9/drivers如drv_clcd.c、drv_sdio.c、drv_smc911x.c、drv_uart.c等结合 applications 下的用户代码可以进一步研究 RT-Thread 设备驱动框架与组件初始化的完整链路。赞分享操作系统嵌入式物联网嵌入式OSRTOS【免费下载链接】rt-threadRT-Thread is an open source IoT Real-Time Operating System (RTOS). https://rt-thread.github.io/rt-thread/项目地址https://gitcode.com/gh_mirrors/rt/rt-thread点击查看免费下载相关推荐RT-Thread 在 QEMU VExpress-A9 上的运行指南BSP 编译、启动脚本、SD 卡文件系统与调试全解析RT Thread 在 QEMU VExpress A9 上的运行指南BSP 编译、启动脚本、SD 卡文件系统与调试全解析 本文围绕 RT Thread 仓库操作系统嵌入式物联网嵌入式OSRTOSRT-Thread on Core-V-MCU (CV32E40P) BSP 实战指南QEMU 仿真、编译运行与 IDE 调试RT Thread on Core V MCU CV32E40P BSP 实战指南QEMU 仿真、编译运行与 IDE 调试 本指南以 RT Thread 仓库操作系统嵌入式物联网嵌入式OSRTOSRT-Thread Simulator BSP 实战指南用 PC 文件模拟 SD 卡、NAND 与 NOR Flash 编译运行 RT-ThreadRT Thread Simulator BSP 实战指南用 PC 文件模拟 SD 卡、NAND 与 NOR Flash 编译运行 RT Thread 导读 R操作系统嵌入式物联网嵌入式OSRTOS上一篇终极解决方案5个简单技巧让123云盘速度翻倍广告全消失下一篇FingerprintJS配置选项LoadOptions与GetOptions详解创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表