摘要:每个人在学习物联网操作系统开发的时候都要准备一个开发板和仿真器,这也是一笔不小的投资。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安装
华为LiteOS Studio是基于Visual Studio代码社区开源代码,根据LiteOS嵌入式系统软件开发语言和业务场景的特点,定制的轻量级集成开发环境解决方案。对于熟悉Visual Studio代码的开发人员来说,入门非常容易。
访问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仿真工程
单击工具栏上的编译图标开始编译。成功编译后,控制台上会输出以下信息:
编译完成后,打开项目设置,在编程设备刻录机和调试器的设置中设置要刻录的bin文件和调试用的elf可执行文件,如下图所示:
烧录器Burner配置:
调试器Debugger配置:
除了编程设备和调试器,LiteOS Studio工程设置还支持开发板、编译器、组件管理、串口等的设置。可以自己查看相应的设置。使用本文中的默认设置。设置完成后,点击确认确认保存。
运行Qemu仿真工程
对于真正的开发板,您需要在开发板运行之前将镜像bin或十六进制文件刻录到开发板。使用Qemu模拟器的好处是不需要实烧,只需要启动Qemu的传入镜像参数即可。我们复用刻录功能,点击工具栏上的图标进行刻录,启动Qemu模拟器运行编译好的LiteOS项目。
运行成功的截图如下:
默认情况下,输出启动信息后,我们进入shell模式,可以进入task查看正在运行的任务的信息。更多LiteOS shell命令请参见https://gitee.com/LiteOS/LiteOS/tree/master/shell。Shell输出的示例如下:
如果要退出Qemu,在终端窗口同时按Ctrl+A,然后按X退出。
配置Qemu仿真工程运行Kernel Demo
LiteOS是一个高度可配置的系统。除了默认设置,我们可以在工程设置-组件管理中自定义系统组件的配置。下面是如何启动内核演示在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;
}
该示例创建了两个任务,一个名为HIGH_NAME,另一个名为LOW_NAME。在two Task中,演示了任务相关接口LOS_TaskSuspend、LOS_TaskResume、LOS_TaskDelay和LOS_TaskDelete的使用。如需更完整的示例,请访问https://gitee . com/liteos/liteos/blob/master/demos/kernel/API/los _ API _ task . c。
当你知道了演示代码,重新编译它。编译成功后,点击刻录按钮运行,可以看到如下输出:
看到实际效果后,建议读者阅读相关演示代码,包括任务、内存管理、中断、IPC通信、时间管理、双向链表、任务同步等。请参考https://gitee.com/LiteOS/LiteOS/tree/master/demos/kernel.
调测Qemu仿真工程
华为LiteOS Studio调试非常好用。单击工具栏上的调试按钮,打开GDB图形调试。对于我们的Qemu项目,调试后的界面如下:
对界面上的区域进行介绍下:
- 变量Variable
展示局部变量、全局变量、静态变量的值。
- 监视Watch
监视指定的表达式,可以输入变量名称或者表达式,实时计算结果。
- 调用堆栈Call Stack
展示当前运行状态和暂停状态的任务调用堆栈。
- 断点Breakpoints
展示设置的断点。
- 寄存器Registers
查看各个寄存器的数值,支持复制数值操作。
- 源代码窗口
高亮显示当前执行的源代码行。
- 反汇编窗口
对应当前源代码文件行所在的反汇编代码。
- 输出Output
展示GDB客户端的输出日志。
- 调试控制台Debug Console
展示GDB Server的输出日志。
读者可以继续尝试、继续、跨步、跳进去、调整、停止等调整动作。关于调试的更详细介绍,请参考调试器-执行调试。
本文演示了如何准备LiteOS Studio环境,如何构建Qemu项目,如何编译烧录,如何配置内核Demo,如何调试GDB。
LiteOS Studio工具很好用,非常适合学习物联网开发。尤其是新手,不用买开发板就可以学习和体验LiteOS物联网操作系统的开发。通过LiteOS开源社区提供的内核Demo的学习和动手实践,对LiteOS操作系统内核有更深入的了解。
本文章来源于互联网,如有侵权,请联系删除!