「本文正在參加星光計劃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,預設安裝即可,不再贅述。如下圖:
HUAWEI LiteOS Studio 是以VisualStudio Code社群開源代碼為基礎,根據LiteOS嵌入式系統軟體開發語言、業務場景等特點開發的一款輕量級定制內建開發環境解決方案。對于熟悉Visual Studio Code的開發者,非常容易上手。
通路LiteOS Studio官網,下載下傳LiteOS Studio安裝軟體,安裝過程非常簡單,直接看官網資料即可,不贅述。安裝完畢之後,需要參考官網文檔,搭建windows開發環境(如下圖)。
注意,建立工程時,需要git用戶端工具,請確定本地已安裝git for windows工具并添加環境變量。
3、建立Qemu仿真工程
點選建立工程圖示,打開建立工程界面。在使用LiteOS Studio建立工程時,確定網絡暢通,可以通路LiteOS開源社群站點https://gitee.com/LiteOS/LiteOS。
- 工程名稱:填入自定義的工程名
- 工程目錄:填入或選擇工程存儲路徑
- SDK版本号:選擇Gitee-LiteOS-Master
- 開發闆清單:選擇Qemureakview-pbx-a9開發闆
點選确認,背景将下載下傳并儲存所選目标闆的SDK,下載下傳完成後自動打開建立的工程。
4、編譯Qemu仿真工程
點選工具欄上的編譯圖示, 開始編譯。編譯成功後,在控制台輸出如下資訊:
在編譯完畢,打開工程設定,在燒錄器Burner和調測器Debugger設定裡,分别設定需要燒錄的bin檔案和調測使用的elf可執行檔案,分别如下圖:
燒錄器Burner配置:

調試器Debugger配置:
除了燒錄器、調試器,LiteOS Studio工程設定還支援對開發闆、編譯器、元件管理、序列槽等進行設定,大家可以自行檢視相應的設定。本文使用預設設定即可,設定完畢後,點選确認Comfirm儲存。
5、運作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鍵即可退出。
6、配置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
7、調測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作業系統核心會有個更深入的了解。
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