基于LiteOS Studio零成本学习LiteOS物联网操作系统-程序员宅基地

技术标签: 华为云  操作系统  qemu  物联网  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

 

 

点击关注,第一时间了解华为云新鲜技术~

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/devcloud/article/details/111194914

智能推荐

关于形如--error LNK2005: xxx 已经在 msvcrtd.lib ( MSVCR90D.dll ) 中定义--的问题分析解决_error lnk2005: __xc_z 已经在 msvcrtd.lib(cinitexe.obj-程序员宅基地

文章浏览阅读518次。关于形如--error LNK2005: xxx 已经在 msvcrtd.lib ( MSVCR90D.dll ) 中定义--的问题分析解决提示:阅读前需要对静态库(.lib)、动态库(.dll)、导入库(这个还是.lib)之间的区别联系有了解。建议先读读宋宝华先生的《VC++动态链接库(DLL)编程深入浅出 》1.问题引出很久没有写程序设计入门知识的相关文章了,这篇文章要_error lnk2005: __xc_z 已经在 msvcrtd.lib(cinitexe.obj) 中定义

【Boost】boost库asio详解2——strand与io_service区别_strand io-程序员宅基地

文章浏览阅读842次。无论如何使用,都能感觉到使用boost.asio实现服务器,不仅是一件非常轻松的事,而且代码很漂亮,逻辑也相当清晰,这点上很不同于ACE。使用io_service作为处理工作的work pool,可以看到,就是通过io_service.post投递一个Handler到io_service的队列,Handler在这个io_service.run内部得到执行,有可能你会发现,io_services_strand io

autoReg | 自动线性和逻辑回归和生存分析-程序员宅基地

文章浏览阅读2k次。autoReg | 自动线性和逻辑回归和生存分析autoReg可以制作描述性统计汇总表,在各种回归模型中自动选择解释变量。支持线性模型、广义线性模型和环比例风险模型。生成可发表的回归分析结..._autoreg()

内积空间-程序员宅基地

文章浏览阅读1.7k次。转载至:http://blog.sina.com.cn/s/blog_6a2e0c8801015378.html内积空间内积的几何解释在数学上,内积空间是增添了一个额外的结构的矢量空间。这个额外的结构叫做内积或标量积。这个增添的结构将一对矢量与一个纯量连接起来,允许我们严格地谈论矢量的“夹角”和“长度”,并进一步谈论矢量的正交性。内积空间由欧几..._i j单位向量 大气科学

Python模块WSGI详解_python pywsgi.wsgiserver关闭-程序员宅基地

文章浏览阅读8.3k次,点赞2次,收藏7次。WSGI(Web Server Gateway Interface):Web服务网关接口,是Python中定义的服务器程序和应用程序之间的接口。Web程序开发中,一般分为服务器程序和应用程序。服务器程序负责对socket服务的数据进行封装和整理,而应用程序则负责对Web请求进行逻辑处理。Web应用本质上也是一个socket服务器,用户的浏览器就是一个socket客户端。我们先用sock_python pywsgi.wsgiserver关闭

虚拟机安装windows 7黑屏问题-程序员宅基地

文章浏览阅读86次。环境:workstation 10 虚拟机GHOST :windows 7 32位今天安装系统,碰到一些问题。在此记录。问题一是分区后,重启黑屏的问题:解决方案:问题二:点击安装到第一分区,自动跳转到dos工具界面问题。解决方案:...

随便推点

html2canvas 偏移_html2canvas 文字偏下-程序员宅基地

文章浏览阅读4.5k次。生成的海报在有时候会发生偏移,发现是在滚动条不为0的时候就会偏移,所以在生成海报前将滚动条滚动到顶部document.body.scrollTop=document.documentElement.scrollTop=0ps:使用的配置:_html2canvas 文字偏下

JSP实验报告-程序员宅基地

文章浏览阅读5.4k次,点赞3次,收藏3次。_jsp实验报告

dubbo透传traceId链路追踪_@activate(group= {constants.consumer}) traceid-程序员宅基地

文章浏览阅读3.2k次。dubbo透传traceId链路追踪文章简介dubbo的配置,filter的使用,自动透传traceId链路追踪,threadLocal的理解使用,优雅的代码,不乱传参。。。工程结构maven搭建环境:dubbo: 顶级项目,做parentinterface: 提供接口支持,工具支持,filter支持。。。web:消费者service:生产者web和service都依赖inter..._@activate(group= {constants.consumer}) traceid

SonarQube+Jenkins配置使用_withsonarqubeenv-程序员宅基地

文章浏览阅读1.5w次。一、安装插件Manage Jenkins(设置)–>Manage Plugins(插件管理)–>filter(筛选):sonar下载如图中插件二、Jenkins配置1、添加 server authentication token凭据–>添加凭据–>填写token保存2、Manage Jenkins(设置)–>Configure System(系统配置)JK配置参考文章:https://docs.sonarqube.org/latest/analysis/j_withsonarqubeenv

uni-popup弹窗层级问题_ios u-popup层级问题-程序员宅基地

文章浏览阅读3.5k次。uni-popup层级 _ios u-popup层级问题

浅谈 qmake 之 pro、pri、prf、prl文件_zooperwidgetpro官网-程序员宅基地

文章浏览阅读6.4w次,点赞35次,收藏208次。尽管每次和cmake对比起来,我们总是说 qmake 简单、功能少。但是qmake仍然是一个非常复杂的东西,我想大多人应该和我一样吧:不是太清楚CONFIG等变量到底如何起作用的用过的qmake内置变量和函数不超过20个看Qt Creator源码或者QtSolutio_zooperwidgetpro官网

推荐文章

热门文章

相关标签