zoukankan      html  css  js  c++  java
  • 基于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

     

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

  • 相关阅读:
    在Android模拟器(BlueStacks)中调试录音应用【20121221】
    一路来的脚印_停第二念【20130109】
    Office集锦_Word_禁止在粘帖内容前后添加空格【201318】
    Libgdx使用过程中在Android环境下遇到的各种错误提示的解决【2012112】
    童真趣语【20121217】
    【转】Android中的资源分析、读取【2012113】
    Office集锦_Word_禁止拼写检查【201318】
    BlueStacks中用户自己的SdCard的位置【2012116】
    Eclipse+BlueStacks调试Android应用_补充篇【20121030】
    The Power of H3D2 ! 截图,视频!
  • 原文地址:https://www.cnblogs.com/huaweiyun/p/14137555.html
Copyright © 2011-2022 走看看