1. 程式人生 > 實用技巧 >基於LiteOS Studio零成本學習LiteOS物聯網作業系統

基於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

點選關注,第一時間瞭解華為雲新鮮技術~