基于LiteOS Studio零成本学习LiteOS物联网操作系统
摘要:大家在学习物联网操作系统开发的时候,都不得不准备一套开发板和仿真器,也是一笔不小的投资。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/LiteOS/tree/master/shell 。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/LiteOS/blob/master/demos/kernel/api/los_api_task.c。
了解到Demo代码后,重新编译一下。编译成功后,点击烧录按钮运行,即可看到如下输出:

看到实际运行的效果后,建议读者们好好阅读下相关的Demo代码,包含任务、内存管理、中断、IPC通信、时间管理、双向链表、任务同步等。请参考:https://gitee.com/LiteOS/LiteOS/tree/master/demos/kernel
调测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/liteos_studio/#/
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/LiteOS/blob/master/targets/realview-pbx-a9/README_CN.md
基于LiteOS Studio零成本学习LiteOS物联网操作系统的更多相关文章
- 物联网打工人必备:LiteOS Studio图形化调测能力
摘要:本文会给大家介绍下LiteOS Studio的调测的几个知识点,包括: 调测配置,监视变量,反汇编代码同步展示,数值进制切换,跨平台编译调测,Qemu模拟器调测,多核调测,远程设备调测等. 掌握 ...
- 零成本实现Android/iOS自动化测试:基于Appium和Test Perfect
https://item.taobao.com/item.htm?spm=a230r.1.14.14.42KJ3L&id=527677900735&ns=1&abbucket= ...
- 【学习】Spring 的 AOP :基于Annotation 的“零配置”方式
转自:http://www.cnblogs.com/jbelial/archive/2012/07/20/2539123.html AOP(Aspect Orient Programming ) , ...
- 华为方舟编译器 下载 和 LiteOS Studio Setup 2019-04-16.exe SDK下载
华为方舟编译器是首个取代Android虚拟机模式的静态编译器,可供开发者在开发环境中一次性将高级语言编译为机器码.此外,方舟编译器未来将支持多语言统一编译,可大幅提高开发效率. 编译器下载 [Ark] ...
- Google Colab——零成本玩转深度学习
前言 最近在学深度学习HyperLPR项目时,由于一直没有比较合适的设备训练深度学习的模型,所以在网上想找到提供模型训练,经过一段时间的搜索,最终发现了一个谷歌的产品--Google Colabora ...
- 零基础学习hadoop到上手工作线路指导
零基础学习hadoop,没有想象的那么困难,也没有想象的那么容易.在刚接触云计算,曾经想过培训,但是培训机构的选择就让我很纠结.所以索性就自己学习了.整个过程整理一下,给大家参考,欢迎讨论,共同学习. ...
- 零基础学习Hadoop
零基础学习hadoop,没有想象的那么困难,也没有想象的那么容易.在刚接触云计算,曾经想过培训,但是培训机构的选择就让我很纠结.所以索性就自己学习了.整个过程整理一下,给大家参考,欢迎讨论,共同学习. ...
- 零基础学习hadoop到上手工作线路指导(初级篇)
零基础学习hadoop,没有想象的那么困难,也没有想象的那么容易.在刚接触云计算,曾经想过培训,但是培训机构的选择就让我很纠结.所以索性就自己学习了.整个过程整理一下,给大家参考,欢迎讨论,共同学习. ...
- [学习线路] 零基础学习hadoop到上手工作线路指导(初级篇)
about云课程最新课程Cloudera课程 零基础学习hadoop,没有想象的那么困难,也没有想象的那么容易.在刚接触云计算,曾经想过培训,但是培训机构的选择就让我很纠结.所以索性就自己学习了. ...
- 零基础学习openstack【完整中级篇】及openstack资源汇总
1.你是如何学习openstack的?2.你对openstack的组件了解多少?3.你认为openstack该如何学习? 一直想写关于openstack的方面的内容,今天终于整理完成.算是完成一桩心事 ...
随机推荐
- 《最新出炉》系列初窥篇-Python+Playwright自动化测试-20-处理鼠标拖拽-下篇
1.简介 上一篇中,宏哥说的宏哥在最后提到网站的反爬虫机制,那么宏哥在自己本地做一个网页,没有那个反爬虫的机制,谷歌浏览器是不是就可以验证成功了,宏哥就想验证一下自己想法,其次有人私信宏哥说是有那种类 ...
- js性能优化解决办法
1. 减少http请求次数:CSS Sprites, JS.CSS 源码压缩.图片大小控制合适:网页 Gzip,CDN 托管,data 缓存 ,图片服务器 2. 前端模板 JS + 数据,减少由于HT ...
- 关于 React 性能优化和数栈产品中的实践
我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品.我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值. 本文作者:的卢 引入 在日常开发过程中,我们会使用很多性能优化的 A ...
- Nodejs环境打包前端项目
Node.js 在Linux下安装和环境搭建/编译项目 安装nodejs:1.下载nodejs源码包 wget https://nodejs.org/dist/v14.16.0/node-v14.16 ...
- 把 map 中的 key 由驼峰命名转为下划线
import cn.hutool.core.util.StrUtil; /** * 把 map 中的 key 由驼峰命名转为下划线 */public HashMap<String, Object ...
- Velocity之Hello World(入门实例)
参考:http://blog.csdn.net/mengxuwq/article/details/1871161 (非常感谢这篇文章,让我初步入门) 自己调试完全能运行后,写在此,供新人参考,供自己温 ...
- 四载磨砺,一群青年“识瘤者”以AI助力医疗创新
本文分享自华为云社区<[先锋开发者云上说]四载磨砺,一群青年"识瘤者"以AI助力医疗创新>,作者:Gauss松鼠会小助手2 . 一群青年"识瘤者" ...
- 深入浅出 PLT/GOT Hook与原理实践
动态链接 计算机程序链接时分两种形式:静态链接和动态链接. 静态链接在链接时将所有目标文件中的代码.数据等Section都组装到可执行文件当中,并将代码中使用到的外部符号(函数.变量)都进行了重定位. ...
- 使用 Kubernetes 为 CI/CD 流水线打造高效可靠的临时环境
介绍 在不断发展的科技世界中,快速构建高质量的软件至关重要.在真实环境中测试应用程序是及早发现和修复错误的关键.但是,在真实环境中设置 CI/CD 流水线进行测试可能既棘手又昂贵. Kubernete ...
- IP的电源管脚
IP的电源管脚是个特殊的存在. 1.对于前度RTL集成,需要和IP vendor以及后端确认,集成与综合时是否需要将电源DVDD,AVDD,引出到top层. 2.绝大部分情况下IP的电源PIN是sup ...