摘要:已初始化的讀寫數據,程序中定義并且初始化的全局變量和靜態變量位于此處。好了,初步移植要點講完了,下一篇文章講內核配置文件函數啟動后如何進入鴻蒙輕量內核。
9月30日,OpenHarmony 3.0 LTS版本發布,新版介紹見OpenHarmony 3.0 發布:OpenHarmony 3.0 發布-鴻蒙HarmonyOS技術社區-鴻蒙官方合作伙伴-51CTO.COM?
本文將介紹如何移植OpenHarmony 3.0到星空派開發板上。
星空派(GD)開發板是由旗點科技推出的一款GD32開發板,板載GD32F303ZET6芯片,可直接替代STM32F103和GD32F103系列。
支持WiFi、4G、loRa等物聯通信接口。板載Flash、eeprom等,支持3.2寸的TFT - LCD屏幕。所有IO口均引出,可完整地進行外設開發,包括:JTAG、RTC、I2C、UART、SPI、SDIO、EXMC、DAC、ADC、USB、TFT-LCD等。
?
2. ARM芯片移植輕量系統基礎知識
(1)適配LiteOS-M輕量系統
GD32F303系列器件是基于Arm? Cortex?-M4處理器的32位通用微控制器。所以我們使用的是內核是LiteOS-M,對應的是OpenHarmony輕量系統。
事實上,OpenHarmony已經做好了Cortex?-M4 核相關的通用移植工作,具體代碼可以查看文件夾:“kernel/liteos_m/kernel/arch/arm”
?
可以看到目前已經支持了cortex-m4核。所以內核移植工作基本不需要,減少了我們很多工作量,但是我們仍然需要移植GD32F303芯片相關的。
(2)哈佛架構
GD32F303采用的是哈佛架構,哈佛架構的特點是代碼指令和數據分開存儲。對于GD32F303而言,代碼是存放在片內flash上,地址是0x8000000。
數據(也就是代碼中用到的各種變量、內存等)是存放在芯片內部內存RAM上,地址是0x20000000,總共64K,即0x10000。
?
(3)編譯結果分析
對于GD32F303而言,編譯出來的固件一般是bin格式、或者hex格式。通常編譯最后的結果會產生4種不同的內容,有時我們也稱為4段:
(1)code:即程序代碼部分,該內容由所有程序指令組成,也是代碼運行的主體,通常是要燒錄到GD32F303片內flash上。
(2)RO-data:只讀數據段,例如我們在程序中所定義的全局常量數據和字符串都位于此處。由于這些數據都是只讀,不會改變的,那這些只讀的全局就沒必要放到內存種,可以直接放到flash中,可以節省內存。
(3)RW-data:已初始化的讀寫數據,程序中定義并且初始化的全局變量和靜態變量位于此處。由于內存剛上電后,內存上的數據是未知,所以我們需要事先把這些全局變量、靜態變量的初始值先存放到flash中,然后上電后,由CPU將flash中的初始值賦予到內存中的變量中。
(4)ZI-data:未初始化的全局變量或者初始化為0的全局變量,這些變量默認都是0,我們只需要CPU上電后,將這些內存都清零即可。
由上我們可以的出來2個結論:
1)我們編譯出來的固件要燒錄到GD32F303的片內flash,需要由3段數據:code、RO-data、RW-data
?
2)芯片上電后,GD32F303需要將RW-data的內容復制到內存對應位置,從而保證初始化的全局變量和靜態變量的值正確;還要對內存中的ZI-data段進行清零操作,最后才能執行main函數。
3. 移植GD32F303芯片到OpenHarmony3.0
這里提供移植好的相關代碼,下載鏈接:
GD32F303 for open Harmony 3.0: GD32F303 for open Harmony 3.0作者:連志安 13510979604
(1)先按官網教程搭建好Ubuntu下的開發環境。
下載arm交叉編譯器:
git clone https://gitee.com/harylee/gcc-arm-none-eabi-10-2020-q4-major.git ,將交叉編譯器環境變量bin目錄配置到.bashrc文件中或者配置device/st/stm32l4r9i_disco/liteos_m/config.gni文件中board_toolchain_path宏為交叉編譯器bin路徑。
(2)下載上方移植好的代碼,文件夾如下:
?
將device文件夾下的gd文件夾復制到OpenHarmony3.0代碼的device文件夾下
將vendor文件夾下的gd文件夾復制到OpenHarmony3.0代碼的vendor文件夾下
復制后,OpenHarmony3.0的device文件夾內容如下:
?
OpenHarmony3.0的vendor文件夾內容如下:
?
(3)編譯
進入OpenHarmony3.0源碼根目錄,輸入 hb set 可以看到由gd32f303_qidian的編譯選項。選擇。
?
輸入 hb build -f開始全編譯:
?
有看到 [OHOS INFO] gd32f303_qidian build success 表示編譯成功。
編譯完成后,可以在“out/gd32f303_qidian/gd32f303_qidian”文件夾下看到編譯結果,其中“gd32f303_qidian_ninjia.hex”就是可以直接燒錄到開發板的固件。
?
4. vendor文件夾
該文件下最重要的文件是“config.json”
?
內如如下,主要是配置相關組件:
?
4. device代碼
(1)device文件夾:
該文件夾下是星空派開發板的重要代碼部分,其中就有啟動文件、main函數、中斷處理等。
?
由于移植內容較長,本文重點介紹啟動文件、鏈接腳本。
(1)啟動文件
啟動文件startup_gd32f30x.s 。最重要的是將RW-data的內容復制到內存對應位置,從而保證初始化的全局變量和靜態變量的值正確;還要對內存中的ZI-data段進行清零操作,最后才能執行main函數。
代碼都是匯編,參考自st和gd相關啟動文件,重要代碼如下:
?
(2)鏈接腳本
鏈接腳本是“gd32f30x_qidian.ld”,用于指定code、RO-data、RW-data、ZI-data如何分布。
首先指定內存地址為0x20000000,大小為64K、
片上flash地址為:0x8000000,大小為512K
這里跟芯片相關,需要正確修改,否則可能起不來。
?
這里跟芯片相關,需要正確修改,否則可能起不來。
(3)固件生成規則。
同時鏈接腳本也指定了固件的生成規則:
?
這里只截取了部分,可以看到生成的固件最開始存放的isr_vector,這個是中斷向量表,在啟動文件中定義
接下來就是text,也就是代碼段
還有rodata,只讀數據段。
后面還有其它定義,我們下一篇再細節。
至此我們的啟動文件、鏈接腳本中比較關鍵的部分已經說明完。
5. liteos-m內核配置
進入“device/gd/gd32f303_qidian/liteos_m”文件夾,可以看到有這個文件“config.gni”
該文件用于配置 liteos-m內核。
其中比較重要部分是指定我們的處理器架構和交叉編譯工具鏈,如下:
?
我們使用的交叉編譯工具鏈是 “arm-none-eabi-”
下面還配置了相關宏定義和gd標準庫頭文件路徑,需要大家修改。
?
好了~~~,初步移植要點講完了,下一篇文章講openharmony內核配置文件、main函數啟動后如何進入鴻蒙輕量內核~~。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/122121.html
摘要:基于開發的軟件包導師汪禮超學員崔林威摘要騰訊物聯網操作系統是騰訊面向物聯網領域開發的實時操作系統,具有低功耗,低資源占用,模塊化,可裁剪等特性。圖中斷函數處理進行生成工程配置,按如下界面進行配置,最后點擊,并點擊。 ...
摘要:在熟悉下鴻蒙輕內核提供的虛擬內存管理模塊之前,作為預備基礎知識,我們先了解下虛擬內存進程空間編號,進程空間編號功能相對獨立,源代碼文件單獨維護。本文先介紹鴻蒙輕內核的虛擬地址空間編號知識,然后詳細分析進程空間編號的申請與釋放操作。 摘要:本文介紹了OpenHarmony鴻蒙輕內核LiteOS-A的虛擬地址空間編號知識,詳細...
摘要:要想放到樹莓派上運行,需要官方提供的固件四下載直接下載我們所需的在文件夾中,將其中的復制到卡的分區中之前分區時大小為,格式為的那個,再將編譯好的一同復制進去。 2021SC@SDUSC 一、uboot的介紹 1.1、計算機系統的主要部件 (1)計算機系統就是以CPU為核心來運行的系統。典型的...
閱讀 2580·2021-10-11 10:58
閱讀 1161·2021-09-29 09:34
閱讀 1515·2021-09-26 09:46
閱讀 3842·2021-09-22 15:31
閱讀 743·2019-08-30 15:54
閱讀 1465·2019-08-30 13:20
閱讀 1260·2019-08-30 13:13
閱讀 1495·2019-08-26 13:52