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