OpenHarmony輕量系統移植示例
1、移植類型
OpenHarmony輕量系統的移植比較簡單,代碼中解耦做得非常好。從代碼的設計理念上來看,移植主要是3部分的內容:
- ARCH部分的代碼。
- SoC部分的代碼。
- board級的代碼。
從上至下我們可以用一張圖來做對比:
ARCH也就是架構,例如ARM架構、RISC-V架構等。
SoC是具體芯片,例如STM32、海思等,一個架構可以有多個芯片。
Board是具體開發板,例如3861有潤和的開發板、也有小熊派的開發板。
通常來說,相關架構的不同SoC,應該是共用一套ARCH代碼,不需要為每個SoC都重新寫一遍ARCH代碼,可以增加代碼的復用。
相關SoC的不通過board開發板,也應該共用一套SoC代碼即可,板卡之間的代碼差異應該放到board中。
基于如上設計,我們移植的類型可以分為3部分:
- ARCH移植:全新的架構級別的移植。
- SoC移植:已支持的架構做SoC級別的移植。
- board級別的移植:只針對開發板做少量移植。
移植的難度也是ARCH最難,SoC較難、board較簡單。
2、 相關代碼
我們看下OpenHarmony輕量系統之3部分的代碼分別在哪里:
(1)ARCH相關代碼。
ARCH相關的代碼存放在kernel\liteos_m\arch文件夾中。
可以看到目前已支持的架構有ARM(M3、M4、M33、M7、ARM9)、csky、risc-v、xtensa。
(2)SoC相關代碼。
SoC相關的代碼位于:device\soc。
(3)board相關代碼。
board相關的代碼位于:device/board。
(4)vendor相關代碼。
除了以上3部分的代碼之外,還有廠商配置相關代碼,這一部分主要是用于編譯系統、HDF配置等,路徑為: vendor。
內容如下:
3、移植思路
建議是先從最簡單的開始,路線如下:
vendor —— board —— soc —— ARCH。
下一篇文章,將開始講解如何創建一個自己的vendor廠商配置和編譯流程。
一開始會基于GD32單片機。
4、 代碼倉庫
代碼倉庫如下:
其中,01_vendor_soc_board 是初步移植的示例,編譯不通過。
02_vendor_soc_board是已經可以編譯通過并且燒錄到GD32F303上可以正常跑的。
5、 使用說明
(1)代碼下載
開發者可以直接先下載最新的openharmony代碼,參考文章:
https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/quick-start/quickstart-lite-sourcecode-acquire.md。
然后下載本倉庫的代碼,將對應的代碼拷貝到device/board 、device/soc、vendor中。
(2)交叉編譯器下載:
我們使用的編譯器是arm-none-eabi-gcc,下載地址:
git clone https://gitee.com/harylee/gcc-arm-none-eabi-10-2020-q4-major.git。
將交叉編譯器環境變量bin目錄配置到.bashrc文件中。
執行arm-none-eabi-gcc -v,有如下打印則表示交叉編譯器配置正確。
(3)編譯。
執行hb set,選擇gd32f303_lianzhian。
然后執行hb build -f,如下提示,則表示編譯成功。