#夏日挑战赛# 基于LiteOS Studio零成本学习LiteOS物联网操作系统 原创 精华

zhushangyuan_
发布于 2022-7-25 11:06
浏览
1收藏

「本文正在参加星光计划3.0–夏日挑战赛」
大家在学习物联网操作系统开发的时候,都不得不准备一套开发板和仿真器,也是一笔不小的投资。LiteOS社区现在对外开放了对Qemu模拟器的适配工程,在不使用开发板的情况下,也可以搭建LiteOS开发环境,做到零成本,非常方便初学者学习。

1、Qemu简介

Qemu是一套由FabriceBellard编写的以GPL许可证的模拟处理器,在GNU/Linux平台上使用广泛,也支持在X86环境上运行。有关Qemu的介绍可参考其github社区内容。LiteOS Stduio使用Qemu realview-pbx-a9开发板来模拟运行LiteOS开源工程。本文主要介绍Windows下基于Qemu运行LiteOS。

2、安装Qemu

在Windows上安装Qemu。下载qemu-w64-setup-20201124.exe,默认安装即可,不再赘述。如下图:
#夏日挑战赛# 基于LiteOS Studio零成本学习LiteOS物联网操作系统-鸿蒙开发者社区

HUAWEI LiteOS Studio 是以VisualStudio Code社区开源代码为基础,根据LiteOS嵌入式系统软件开发语言、业务场景等特点开发的一款轻量级定制集成开发环境解决方案。对于熟悉Visual Studio Code的开发者,非常容易上手。

访问LiteOS Studio官网,下载LiteOS Studio安装软件,安装过程非常简单,直接看官网资料即可,不赘述。安装完毕之后,需要参考官网文档,搭建windows开发环境(如下图)。

#夏日挑战赛# 基于LiteOS Studio零成本学习LiteOS物联网操作系统-鸿蒙开发者社区

注意,新建工程时,需要git客户端工具,请确保本地已安装git for windows工具并添加环境变量。

3、新建Qemu仿真工程

点击新建工程图标,打开新建工程界面。在使用LiteOS Studio新建工程时,确保网络畅通,可以访问LiteOS开源社区站点https://gitee.com/LiteOS/LiteOS。

  • 工程名称:填入自定义的工程名

  • 工程目录:填入或选择工程存储路径

  • SDK版本号:选择Gitee-LiteOS-Master

  • 开发板列表:选择Qemureakview-pbx-a9开发板

点击确认,后台将下载并保存所选目标板的SDK,下载完成后自动打开新建的工程。

#夏日挑战赛# 基于LiteOS Studio零成本学习LiteOS物联网操作系统-鸿蒙开发者社区

4、编译Qemu仿真工程

点击工具栏上的编译图标, 开始编译。编译成功后,在控制台输出如下信息:

#夏日挑战赛# 基于LiteOS Studio零成本学习LiteOS物联网操作系统-鸿蒙开发者社区
在编译完毕,打开工程设置,在烧录器Burner和调测器Debugger设置里,分别设置需要烧录的bin文件和调测使用的elf可执行文件,分别如下图:
烧录器Burner配置:
#夏日挑战赛# 基于LiteOS Studio零成本学习LiteOS物联网操作系统-鸿蒙开发者社区
调试器Debugger配置:

#夏日挑战赛# 基于LiteOS Studio零成本学习LiteOS物联网操作系统-鸿蒙开发者社区
除了烧录器、调试器,LiteOS Studio工程设置还支持对开发板、编译器、组件管理、串口等进行设置,大家可以自行查看相应的设置。本文使用默认设置即可,设置完毕后,点击确认Comfirm保存。

5、运行Qemu仿真工程

对于真实开发板,需要把镜像bin或者hex文件烧录到开发板,才能运行。使用Qemu模拟器好处是并不需要真实烧录,启动Qemu传入镜像参数即可。我们复用烧录功能,点击工具栏上的图标进行烧录,启动Qemu模拟器运行编译的LiteOS工程。

运行成功的截图如下:
#夏日挑战赛# 基于LiteOS Studio零成本学习LiteOS物联网操作系统-鸿蒙开发者社区

默认的配置时,输出启动信息后,就进入shell模式,我们可以输入task,查看运行中的任务的信息。更多LiteOS shell命令,请参考 https://gitee.com/LiteOS/LiteOS/tree/master/shell 。Shell命令输出示例如下:
#夏日挑战赛# 基于LiteOS Studio零成本学习LiteOS物联网操作系统-鸿蒙开发者社区
如果想退出Qemu运行,在Terminal终端窗口同时按Ctrl + A,然后按X键即可退出。

6、配置Qemu仿真工程运行Kernel Demo

LiteOS是高度可配置的系统,除了默认设置,我们可以在工程设置–组件管理中对系统组件配置进行定制。这里演示下如何开启Kernel Demo在Qemu模拟器上运行。
#夏日挑战赛# 基于LiteOS Studio零成本学习LiteOS物联网操作系统-鸿蒙开发者社区
开启的这个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代码后,重新编译一下。编译成功后,点击烧录按钮运行,即可看到如下输出:
#夏日挑战赛# 基于LiteOS Studio零成本学习LiteOS物联网操作系统-鸿蒙开发者社区
看到实际运行的效果后,建议读者们好好阅读下相关的Demo代码,包含任务、内存管理、中断、IPC通信、时间管理、双向链表、任务同步等。请参考:https://gitee.com/LiteOS/LiteOS/tree/master/demos/kernel

7、调测Qemu仿真工程

HUAWEI LiteOS Studio 调测非常简单易用,点击工具栏上的调测按钮即可开启GDB图形化调测。对于我们的Qemu工程,开始调测后的界面如下:#夏日挑战赛# 基于LiteOS Studio零成本学习LiteOS物联网操作系统-鸿蒙开发者社区

对界面上的区域进行介绍下:

  • 变量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操作系统内核会有个更深入的了解。

8、附资料:

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

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
6
收藏 1
回复
举报
4条回复
按时间正序
/
按时间倒序
红叶亦知秋
红叶亦知秋

楼主使用后感觉和真板子的区别在哪?

回复
2022-7-25 11:23:34
zhushangyuan_
zhushangyuan_ 回复了 红叶亦知秋
楼主使用后感觉和真板子的区别在哪?

qemu仿真的价值就是没有真实开发板的情况下,可以一定程度上替代开发板。比如,想体验内核开发,可以使用qemu进行运行调测。

 

通常qemu支持的功能有限,很多工作还是需要开发板才能完成。

1
回复
2022-7-25 11:31:52
宇宙之一粟
宇宙之一粟

学习了,可否给我文章来个互动呢?https://ost.51cto.com/posts/14793

回复
2022-7-25 13:39:01
红叶亦知秋
红叶亦知秋 回复了 zhushangyuan_
qemu仿真的价值就是没有真实开发板的情况下,可以一定程度上替代开发板。比如,想体验内核开发,可以使用qemu进行运行调测。 通常qemu支持的功能有限,很多工作还是需要开发板才能完成。

感谢老师回复

回复
2022-7-25 13:46:21
回复
    相关推荐