摘要:你們在學習物聯網操做系統開發的時候,都不得不許備一套開發板和仿真器,也是一筆不小的投資。LiteOS社區如今對外開放了對Qemu模擬器的適配工程,在不使用開發板的狀況下,也能夠搭建LiteOS開發環境,作到零成本,很是方便初學者學習。
Qemu是一套由FabriceBellard編寫的以GPL許可證的模擬處理器,在GNU/Linux平臺上使用普遍,也支持在X86環境上運行。有關Qemu的介紹可參考其github社區內容。LiteOS Stduio使用Qemu realview-pbx-a9開發板來模擬運行LiteOS開源工程。本文主要介紹Windows下基於Qemu運行LiteOS。git
在Windows上安裝Qemu。下載qemu-w64-setup-20201124.exe,默認安裝便可,再也不贅述。以下圖:github
HUAWEI LiteOS Studio 是以Visual Studio Code社區開源代碼爲基礎,根據LiteOS嵌入式系統軟件開發語言、業務場景等特色開發的一款輕量級定製集成開發環境解決方案。對於熟悉Visual Studio Code的開發者,很是容易上手。shell
訪問LiteOS Studio官網,下載LiteOS Studio安裝軟件,安裝過程很是簡單,直接看官網資料便可,不贅述。安裝完畢以後,須要參考官網文檔,搭建windows開發環境windows
(以下圖)。api
注意,新建工程時,須要git客戶端工具,請確保本地已安裝git for windows工具並添加環境變量。網絡
點擊新建工程圖標,打開新建工程界面。在使用LiteOS Studio新建工程時,確保網絡暢通,能夠訪問LiteOS開源社區站點https://gitee.com/LiteOS/LiteOS。工具
點擊確認,後臺將下載並保存所選目標板的SDK,下載完成後自動打開新建的工程。學習
點擊工具欄上的編譯圖標, 開始編譯。編譯成功後,在控制檯輸出以下信息:ui
在編譯完畢,打開工程設置,在燒錄器Burner和調測器Debugger設置裏,分別設置須要燒錄的bin文件和調測使用的elf可執行文件,分別以下圖:
燒錄器Burner配置:spa
調試器Debugger配置:
除了燒錄器、調試器,LiteOS Studio工程設置還支持對開發板、編譯器、組件管理、串口等進行設置,你們能夠自行查看相應的設置。本文使用默認設置便可,設置完畢後,點擊確認Comfirm保存。
對於真實開發板,須要把鏡像bin或者hex文件燒錄到開發板,才能運行。使用Qemu模擬器好處是並不須要真實燒錄,啓動Qemu傳入鏡像參數便可。咱們複用燒錄功能,點擊工具欄上的圖標進行燒錄,啓動Qemu模擬器運行編譯的LiteOS工程。
運行成功的截圖以下:
默認的配置時,輸出啓動信息後,就進入shell模式,咱們能夠輸入task,查看運行中的任務的信息。更多LiteOS shell命令,請參考 https://gitee.com/LiteOS/LiteOS/tree/master/shell 。Shell命令輸出示例以下:
若是想退出Qemu運行,在Terminal終端窗口同時按Ctrl + A,而後按X鍵便可退出。
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
HUAWEI LiteOS Studio 調測很是簡單易用,點擊工具欄上的調測按鈕便可開啓GDB圖形化調測。對於咱們的Qemu工程,開始調測後的界面以下:
對界面上的區域進行介紹下:
展現局部變量、全局變量、靜態變量的值。
監視指定的表達式,能夠輸入變量名稱或者表達式,實時計算結果。
展現當前運行狀態和暫停狀態的任務調用堆棧。
展現設置的斷點。
查看各個寄存器的數值,支持複製數值操做。
高亮顯示當前執行的源代碼行。
對應當前源代碼文件行所在的反彙編代碼。
展現GDB客戶端的輸出日誌。
展現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