国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

移植OpenHarmony到星空派ARM芯片【1】

mist14 / 2564人閱讀

摘要:已初始化的讀寫(xiě)數(shù)據(jù),程序中定義并且初始化的全局變量和靜態(tài)變量位于此處。好了,初步移植要點(diǎn)講完了,下一篇文章講內(nèi)核配置文件函數(shù)啟動(dòng)后如何進(jìn)入鴻蒙輕量?jī)?nèi)核。

9月30日,OpenHarmony 3.0 LTS版本發(fā)布,新版介紹見(jiàn)OpenHarmony 3.0 發(fā)布:OpenHarmony 3.0 發(fā)布-鴻蒙HarmonyOS技術(shù)社區(qū)-鴻蒙官方合作伙伴-51CTO.COM?

本文將介紹如何移植OpenHarmony 3.0到星空派開(kāi)發(fā)板上。

1. 星空派開(kāi)發(fā)板介紹

星空派(GD)開(kāi)發(fā)板是由旗點(diǎn)科技推出的一款GD32開(kāi)發(fā)板,板載GD32F303ZET6芯片,可直接替代STM32F103和GD32F103系列。

支持WiFi、4G、loRa等物聯(lián)通信接口。板載Flash、eeprom等,支持3.2寸的TFT - LCD屏幕。所有IO口均引出,可完整地進(jìn)行外設(shè)開(kāi)發(fā),包括:JTAG、RTC、I2C、UART、SPI、SDIO、EXMC、DAC、ADC、USB、TFT-LCD等。

?

2. ARM芯片移植輕量系統(tǒng)基礎(chǔ)知識(shí)

(1)適配LiteOS-M輕量系統(tǒng)

GD32F303系列器件是基于Arm? Cortex?-M4處理器的32位通用微控制器。所以我們使用的是內(nèi)核是LiteOS-M,對(duì)應(yīng)的是OpenHarmony輕量系統(tǒng)。

事實(shí)上,OpenHarmony已經(jīng)做好了Cortex?-M4 核相關(guān)的通用移植工作,具體代碼可以查看文件夾:“kernel/liteos_m/kernel/arch/arm”

?

可以看到目前已經(jīng)支持了cortex-m4核。所以?xún)?nèi)核移植工作基本不需要,減少了我們很多工作量,但是我們?nèi)匀恍枰浦睪D32F303芯片相關(guān)的。

(2)哈佛架構(gòu)

GD32F303采用的是哈佛架構(gòu),哈佛架構(gòu)的特點(diǎn)是代碼指令和數(shù)據(jù)分開(kāi)存儲(chǔ)。對(duì)于GD32F303而言,代碼是存放在片內(nèi)flash上,地址是0x8000000。

數(shù)據(jù)(也就是代碼中用到的各種變量、內(nèi)存等)是存放在芯片內(nèi)部?jī)?nèi)存RAM上,地址是0x20000000,總共64K,即0x10000。

?

(3)編譯結(jié)果分析

對(duì)于GD32F303而言,編譯出來(lái)的固件一般是bin格式、或者h(yuǎn)ex格式。通常編譯最后的結(jié)果會(huì)產(chǎn)生4種不同的內(nèi)容,有時(shí)我們也稱(chēng)為4段:

(1)code:即程序代碼部分,該內(nèi)容由所有程序指令組成,也是代碼運(yùn)行的主體,通常是要燒錄到GD32F303片內(nèi)flash上。

(2)RO-data:只讀數(shù)據(jù)段,例如我們?cè)诔绦蛑兴x的全局常量數(shù)據(jù)和字符串都位于此處。由于這些數(shù)據(jù)都是只讀,不會(huì)改變的,那這些只讀的全局就沒(méi)必要放到內(nèi)存種,可以直接放到flash中,可以節(jié)省內(nèi)存。

(3)RW-data:已初始化的讀寫(xiě)數(shù)據(jù),程序中定義并且初始化的全局變量和靜態(tài)變量位于此處。由于內(nèi)存剛上電后,內(nèi)存上的數(shù)據(jù)是未知,所以我們需要事先把這些全局變量、靜態(tài)變量的初始值先存放到flash中,然后上電后,由CPU將flash中的初始值賦予到內(nèi)存中的變量中。

(4)ZI-data:未初始化的全局變量或者初始化為0的全局變量,這些變量默認(rèn)都是0,我們只需要CPU上電后,將這些內(nèi)存都清零即可。

由上我們可以的出來(lái)2個(gè)結(jié)論:

1)我們編譯出來(lái)的固件要燒錄到GD32F303的片內(nèi)flash,需要由3段數(shù)據(jù):code、RO-data、RW-data

?

2)芯片上電后,GD32F303需要將RW-data的內(nèi)容復(fù)制到內(nèi)存對(duì)應(yīng)位置,從而保證初始化的全局變量和靜態(tài)變量的值正確;還要對(duì)內(nèi)存中的ZI-data段進(jìn)行清零操作,最后才能執(zhí)行main函數(shù)。

3. 移植GD32F303芯片到OpenHarmony3.0

這里提供移植好的相關(guān)代碼,下載鏈接:

GD32F303 for open Harmony 3.0: GD32F303 for open Harmony 3.0作者:連志安 13510979604

(1)先按官網(wǎng)教程搭建好Ubuntu下的開(kāi)發(fā)環(huán)境。

下載arm交叉編譯器:

git clone https://gitee.com/harylee/gcc-arm-none-eabi-10-2020-q4-major.git ,將交叉編譯器環(huán)境變量bin目錄配置到.bashrc文件中或者配置device/st/stm32l4r9i_disco/liteos_m/config.gni文件中board_toolchain_path宏為交叉編譯器bin路徑。

(2)下載上方移植好的代碼,文件夾如下:

?

將device文件夾下的gd文件夾復(fù)制到OpenHarmony3.0代碼的device文件夾下

將vendor文件夾下的gd文件夾復(fù)制到OpenHarmony3.0代碼的vendor文件夾下

復(fù)制后,OpenHarmony3.0的device文件夾內(nèi)容如下:

?

OpenHarmony3.0的vendor文件夾內(nèi)容如下:

?

(3)編譯

進(jìn)入OpenHarmony3.0源碼根目錄,輸入 hb set 可以看到由gd32f303_qidian的編譯選項(xiàng)。選擇。

?

輸入 hb build -f開(kāi)始全編譯:

?

有看到 [OHOS INFO] gd32f303_qidian build success 表示編譯成功。

編譯完成后,可以在“out/gd32f303_qidian/gd32f303_qidian”文件夾下看到編譯結(jié)果,其中“gd32f303_qidian_ninjia.hex”就是可以直接燒錄到開(kāi)發(fā)板的固件。

?

4. vendor文件夾

該文件下最重要的文件是“config.json”

?

內(nèi)如如下,主要是配置相關(guān)組件:

?

4. device代碼

(1)device文件夾:

該文件夾下是星空派開(kāi)發(fā)板的重要代碼部分,其中就有啟動(dòng)文件、main函數(shù)、中斷處理等。

?

由于移植內(nèi)容較長(zhǎng),本文重點(diǎn)介紹啟動(dòng)文件、鏈接腳本。

(1)啟動(dòng)文件

啟動(dòng)文件startup_gd32f30x.s 。最重要的是將RW-data的內(nèi)容復(fù)制到內(nèi)存對(duì)應(yīng)位置,從而保證初始化的全局變量和靜態(tài)變量的值正確;還要對(duì)內(nèi)存中的ZI-data段進(jìn)行清零操作,最后才能執(zhí)行main函數(shù)。

代碼都是匯編,參考自st和gd相關(guān)啟動(dòng)文件,重要代碼如下:

?

(2)鏈接腳本

鏈接腳本是“gd32f30x_qidian.ld”,用于指定code、RO-data、RW-data、ZI-data如何分布。

首先指定內(nèi)存地址為0x20000000,大小為64K、

片上flash地址為:0x8000000,大小為512K

這里跟芯片相關(guān),需要正確修改,否則可能起不來(lái)。

?

這里跟芯片相關(guān),需要正確修改,否則可能起不來(lái)。

(3)固件生成規(guī)則。

同時(shí)鏈接腳本也指定了固件的生成規(guī)則:

?

這里只截取了部分,可以看到生成的固件最開(kāi)始存放的isr_vector,這個(gè)是中斷向量表,在啟動(dòng)文件中定義

接下來(lái)就是text,也就是代碼段

還有rodata,只讀數(shù)據(jù)段。

后面還有其它定義,我們下一篇再細(xì)節(jié)。

至此我們的啟動(dòng)文件、鏈接腳本中比較關(guān)鍵的部分已經(jīng)說(shuō)明完。

5. liteos-m內(nèi)核配置

進(jìn)入“device/gd/gd32f303_qidian/liteos_m”文件夾,可以看到有這個(gè)文件“config.gni”

該文件用于配置 liteos-m內(nèi)核。

其中比較重要部分是指定我們的處理器架構(gòu)和交叉編譯工具鏈,如下:

?

我們使用的交叉編譯工具鏈?zhǔn)?“arm-none-eabi-”

下面還配置了相關(guān)宏定義和gd標(biāo)準(zhǔn)庫(kù)頭文件路徑,需要大家修改。

?

好了~~~,初步移植要點(diǎn)講完了,下一篇文章講openharmony內(nèi)核配置文件、main函數(shù)啟動(dòng)后如何進(jìn)入鴻蒙輕量?jī)?nèi)核~~。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/122121.html

相關(guān)文章

  • 基于STM32Cube MX開(kāi)發(fā)的TencentOS-Tiny軟件包

    摘要:基于開(kāi)發(fā)的軟件包導(dǎo)師汪禮超學(xué)員崔林威摘要騰訊物聯(lián)網(wǎng)操作系統(tǒng)是騰訊面向物聯(lián)網(wǎng)領(lǐng)域開(kāi)發(fā)的實(shí)時(shí)操作系統(tǒng),具有低功耗,低資源占用,模塊化,可裁剪等特性。圖中斷函數(shù)處理進(jìn)行生成工程配置,按如下界面進(jìn)行配置,最后點(diǎn)擊,并點(diǎn)擊。 ...

    shiyang6017 評(píng)論0 收藏0
  • 鴻蒙輕內(nèi)核虛擬內(nèi)存基礎(chǔ)知識(shí):虛擬內(nèi)存進(jìn)程空間編號(hào)

    摘要:在熟悉下鴻蒙輕內(nèi)核提供的虛擬內(nèi)存管理模塊之前,作為預(yù)備基礎(chǔ)知識(shí),我們先了解下虛擬內(nèi)存進(jìn)程空間編號(hào),進(jìn)程空間編號(hào)功能相對(duì)獨(dú)立,源代碼文件單獨(dú)維護(hù)。本文先介紹鴻蒙輕內(nèi)核的虛擬地址空間編號(hào)知識(shí),然后詳細(xì)分析進(jìn)程空間編號(hào)的申請(qǐng)與釋放操作。 摘要:本文介紹了OpenHarmony鴻蒙輕內(nèi)核LiteOS-A的虛擬地址空間編號(hào)知識(shí),詳細(xì)...

    alighters 評(píng)論0 收藏0
  • 樹(shù)莓4B安裝uboot

    摘要:要想放到樹(shù)莓派上運(yùn)行,需要官方提供的固件四下載直接下載我們所需的在文件夾中,將其中的復(fù)制到卡的分區(qū)中之前分區(qū)時(shí)大小為,格式為的那個(gè),再將編譯好的一同復(fù)制進(jìn)去。 2021SC@SDUSC 一、uboot的介紹 1.1、計(jì)算機(jī)系統(tǒng)的主要部件 (1)計(jì)算機(jī)系統(tǒng)就是以CPU為核心來(lái)運(yùn)行的系統(tǒng)。典型的...

    izhuhaodev 評(píng)論0 收藏0
  • Linux學(xué)習(xí)

    摘要:學(xué)習(xí)樹(shù)莓派的的初識(shí)學(xué)習(xí)樹(shù)莓派的的初識(shí)初識(shí)初識(shí)學(xué)習(xí)書(shū)籍正點(diǎn)原子嵌入式驅(qū)動(dòng)開(kāi)發(fā)指南章節(jié)第三十章學(xué)習(xí)內(nèi)容書(shū)中介紹的獲取可以有三個(gè)途徑第一個(gè)是的官方代碼。網(wǎng)上的燒寫(xiě)樹(shù)莓派教程很多,但是為了學(xué)習(xí)我選擇了官方的代碼。Linux學(xué)習(xí) - 樹(shù)莓派4b的U-Boot的初識(shí)初識(shí)U-Boot學(xué)習(xí)書(shū)籍:《【正點(diǎn)原子】I.MX6U嵌入式Linux驅(qū)動(dòng)開(kāi)發(fā)指南V1.5.1》章節(jié):第三十章學(xué)習(xí)內(nèi)容:書(shū)中介紹uboot的獲...

    不知名網(wǎng)友 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<