摘要:大家在学习物联网操作系统开发的时候,都不得不准备一套开发板和仿真器,也是一笔不小的投资。LiteOS社区现在对外开放了对Qemu模拟器的适配工程,在不使用开发板的情况下,也可以搭建LiteOS开发环境,做到零成本,非常方便初学者学习。
Qemu简介
Qemu是一套由FabriceBellard编写的以GPL许可证的模拟处理器,在GNU/Linux平台上使用广泛,也支持在X86环境上运行。有关Qemu的介绍可参考其github社区内容。LiteOS Stduio使用Qemu realview-pbx-a9开发板来模拟运行LiteOS开源工程。本文主要介绍Windows下基于Qemu运行LiteOS。
安装Qemu
在Windows上安装Qemu。下载qemu-w64-setup-20201124.exe,默认安装即可,不再赘述。如下图:
LiteOS Studio安装
HUAWEI LiteOS Studio 是以Visual Studio Code社区开源代码为基础,根据LiteOS嵌入式系统软件开发语言、业务场景等特点开发的一款轻量级定制集成开发环境解决方案。对于熟悉Visual Studio Code的开发者,非常容易上手。
访问LiteOS Studio官网,下载LiteOS Studio安装软件,安装过程非常简单,直接看官网资料即可,不赘述。安装完毕之后,需要参考官网文档,搭建windows开发环境
(如下图)。
注意,新建工程时,需要git客户端工具,请确保本地已安装git for windows工具并添加环境变量。
新建Qemu仿真工程
点击新建工程图标,打开新建工程界面。在使用LiteOS Studio新建工程时,确保网络畅通,可以访问LiteOS开源社区站点https://gitee.com/LiteOS/LiteOS。
- 工程名称:填入自定义的工程名
- 工程目录:填入或选择工程存储路径
- SDK版本号:选择Gitee-LiteOS-Master
- 开发板列表:选择Qemureakview-pbx-a9开发板
点击确认,后台将下载并保存所选目标板的SDK,下载完成后自动打开新建的工程。
编译Qemu仿真工程
点击工具栏上的编译图标, 开始编译。编译成功后,在控制台输出如下信息:
在编译完毕,打开工程设置,在烧录器Burner和调测器Debugger设置里,分别设置需要烧录的bin文件和调测使用的elf可执行文件,分别如下图:
烧录器Burner配置:
调试器Debugger配置:
除了烧录器、调试器,LiteOS Studio工程设置还支持对开发板、编译器、组件管理、串口等进行设置,大家可以自行查看相应的设置。本文使用默认设置即可,设置完毕后,点击确认Comfirm保存。
运行Qemu仿真工程
对于真实开发板,需要把镜像bin或者hex文件烧录到开发板,才能运行。使用Qemu模拟器好处是并不需要真实烧录,启动Qemu传入镜像参数即可。我们复用烧录功能,点击工具栏上的图标进行烧录,启动Qemu模拟器运行编译的LiteOS工程。
运行成功的截图如下:
默认的配置时,输出启动信息后,就进入shell模式,我们可以输入task,查看运行中的任务的信息。更多LiteOS shell命令,请参考 https://gitee.com/LiteOS/Lite... 。Shell命令输出示例如下:
如果想退出Qemu运行,在Terminal终端窗口同时按Ctrl + A,然后按X键即可退出。
配置Qemu仿真工程运行Kernel Demo
LiteOS是高度可配置的系统,除了默认设置,我们可以在工程设置--组件管理中对系统组件配置进行定制。这里演示下如何开启Kernel Demo在Qemu模拟器上运行。
开启的这个Kernel Task DemoDemo代码执行入口如下:
UINT32 Example_TskCaseEntry(VOID)
{
UINT32 ret;
TSK_INIT_PARAM_S stInitParam; /* lock task shcedue */ printf("nKernel task demo begin.n");
LOS_TaskLock();
printf("LOS_TaskLock() ok.n");
stInitParam.pfnTaskEntry = (TSK_ENTRY_FUNC)Example_TaskHi;
stInitParam.usTaskPrio = TSK_PRIOR_HI;
stInitParam.pcName = "HIGH_NAME";
stInitParam.uwStackSize = LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE; /* create high prio task */ ret = LOS_TaskCreate(&g_demoTaskHiId, &stInitParam); if (ret != LOS_OK) {
LOS_TaskUnlock();
printf("Example_TaskHi failed.n"); return LOS_NOK;
}
printf("Create Example_TaskHi ok.n");
stInitParam.pfnTaskEntry = (TSK_ENTRY_FUNC)Example_TaskLo;
stInitParam.usTaskPrio = TSK_PRIOR_LO;
stInitParam.pcName = "LOW_NAME";
stInitParam.uwStackSize = LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE; /* create low prio task */ ret = LOS_TaskCreate(&g_demoTaskLoId, &stInitParam); if (ret != LOS_OK) { /* delete high prio task */
if (LOS_OK != LOS_TaskDelete(g_demoTaskHiId)) {
printf("Delete TaskHi failed.n");
}
LOS_TaskUnlock();
printf("Create Example_TaskLo failed.n"); return LOS_NOK;
}
printf("Create Example_TaskLo ok.n"); /* unlock task schedue */ LOS_TaskUnlock();
LOS_TaskDelay(40); return ret;
}
示例代码先后创建了2个任务,一个名为HIGH_NAME、一个名为LOW_NAME。在两个任务里,演示了Task相关的接口LOS_TaskSuspend、LOS_TaskResume、LOS_TaskDelay、LOS_TaskDelete的使用。更完整的示例请访问https://gitee.com/LiteOS/Lite...。
了解到Demo代码后,重新编译一下。编译成功后,点击烧录按钮运行,即可看到如下输出:
看到实际运行的效果后,建议读者们好好阅读下相关的Demo代码,包含任务、内存管理、中断、IPC通信、时间管理、双向链表、任务同步等。请参考:https://gitee.com/LiteOS/Lite...
调测Qemu仿真工程
HUAWEI LiteOS Studio 调测非常简单易用,点击工具栏上的调测按钮即可开启GDB图形化调测。对于我们的Qemu工程,开始调测后的界面如下:
对界面上的区域进行介绍下:
- 变量Variable
展示局部变量、全局变量、静态变量的值。
- 监视Watch
监视指定的表达式,可以输入变量名称或者表达式,实时计算结果。
- 调用堆栈Call Stack
展示当前运行状态和暂停状态的任务调用堆栈。
- 断点Breakpoints
展示设置的断点。
- 寄存器Registers
查看各个寄存器的数值,支持复制数值操作。
- 源代码窗口
高亮显示当前执行的源代码行。
- 反汇编窗口
对应当前源代码文件行所在的反汇编代码。
- 输出Output
展示GDB客户端的输出日志。
- 调试控制台Debug Console
展示GDB Server的输出日志。
读者们可以继续尝试,继续、单步、跳入、调测、停止等调测动作。更加详细的调测介绍,请参考 ---调试器-执行调试。
本文演示了如何准备LiteOS Studio环境,如何新建Qemu工程,如何编译、烧录、如何组件配置Kernel Demo、如何GDB调测。
LiteOS Studio工具还是容易上手的,非常适合学习物联网开发的。特别是对于初学者,不需要购买开发板,即可以学习、体验LiteOS物联网操作系统开发。通过对LiteOS开源社区提供的Kernel Demo的学习、实际上手练习,会对LiteOS操作系统内核会有个更深入的了解。
附资料:
LiteOS Studio社区资料:https://liteos.gitee.io/liteo...
LieOS开源代码:https://gitee.com/liteos
Qemu介绍: https://github.com/qemu/qemu
QEMU Binaries for Windows (64 bit)下载:https://qemu.weilnetz.de/w64/
Linux环境基于Qemu运行LiteOS,请参考:https://gitee.com/LiteOS/Lite...