System.ArgumentOutOfRangeException: 索引和長度必須引用該字符串內(nèi)的位置。 參數(shù)名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技術(shù)實(shí)現(xiàn)步驟摘要】
本申請(qǐng)涉及一種嵌入式系統(tǒng)(embedded?system),尤其涉及一種鴻蒙系統(tǒng)中通過鏈接腳本自搬移解壓的方法。
技術(shù)介紹
1、嵌入式系統(tǒng)在開發(fā)時(shí),通常是將啟動(dòng)加載器(bootloader)、系統(tǒng)內(nèi)核(kernel)、文件系統(tǒng)、應(yīng)用程序獨(dú)立開發(fā)的,前三者都屬于操作系統(tǒng)。開發(fā)完成后將以上各部分整合在一起制作成系統(tǒng)鏡像文件,系統(tǒng)鏡像文件被燒寫到嵌入式設(shè)備的非易失性存儲(chǔ)器——例如閃存(flash)中。嵌入式設(shè)備上電后,在啟動(dòng)階段會(huì)將操作系統(tǒng)的代碼從非易失性存儲(chǔ)器加載到內(nèi)存中運(yùn)行。需要運(yùn)行某個(gè)應(yīng)用程序時(shí),嵌入式系統(tǒng)將該應(yīng)用程序從非易失性存儲(chǔ)器加載進(jìn)內(nèi)存運(yùn)行,或者在非易失性存儲(chǔ)器中以xip(execute?in?place,就地執(zhí)行)方式執(zhí)行。
2、通常情況下,嵌入式設(shè)備有多個(gè)內(nèi)存空間可以運(yùn)行應(yīng)用程序的代碼,例如itcm(instruction?tightly-coupled?memory,指令緊耦合存儲(chǔ)器)、sram(static?random-access?memory,靜態(tài)隨機(jī)存儲(chǔ)器)、psram(pseudo?static?random?access?memory,偽靜態(tài)隨機(jī)存儲(chǔ)器)等。代碼的運(yùn)行效率是itcm>sram>psram,而內(nèi)存空間的容量大小則是psram>sram>itcm。尤其是itcm的空間很小,僅能容納少量代碼。
3、嵌入式系統(tǒng)的開發(fā)設(shè)計(jì)使用編譯器(compiler)、鏈接器(linker)和調(diào)試器(debugger)。鏈接器是一個(gè)程序,將一個(gè)或多個(gè)由編譯器或匯編器生成的目標(biāo)文件外加庫,
4、一個(gè)段可以被標(biāo)記為可加載(loadable),這意味著在運(yùn)行輸出文件時(shí)該段內(nèi)容需要先加載到內(nèi)存中。一個(gè)沒有內(nèi)容的段是可分配的,這意味著應(yīng)該在內(nèi)存中預(yù)留一個(gè)區(qū)域,但是這里不需要加載任何東西(在某些情況下,該內(nèi)存必須清零)。既不可裝載也不可分配的部分通常包含某種調(diào)試信息。
5、每個(gè)可加載或可分配的輸出段都有兩個(gè)地址。第一個(gè)是vma(virtual?memoryarea,虛擬內(nèi)存地址),第二個(gè)是lma(load?memory?address,加載內(nèi)存地址)。虛擬內(nèi)存地址就是鏈接地址(link?address)。在編譯程序時(shí),每個(gè)目標(biāo)文件都是由源代碼編譯得到的,最終多個(gè)目標(biāo)文件鏈接生成一個(gè)可執(zhí)行文件。鏈接地址指示各個(gè)目標(biāo)文件在可執(zhí)行程序中的位置。例如,一個(gè)可執(zhí)行程序(輸出文件)a.out由三個(gè)目標(biāo)文件(輸入文件)a1.0、a2.o、a3.o組成,那么在輸出文件中各個(gè)輸入文件的先后順序就是由鏈接地址決定的。加載地址指示可執(zhí)行文件(應(yīng)用程序)的各個(gè)段加載到內(nèi)存中運(yùn)行的地址。在大多數(shù)情況下,每個(gè)段的鏈接地址和加載地址是相同的,當(dāng)然它們也可能不同。
6、鴻蒙系統(tǒng)的應(yīng)用程序啟動(dòng)的常規(guī)流程是通過引導(dǎo)程序加載應(yīng)用程序,將應(yīng)用程序從非易失性存儲(chǔ)器讀入到內(nèi)存運(yùn)行、或者在非易失性存儲(chǔ)器中以xip方式運(yùn)行。應(yīng)用程序中執(zhí)行的第一條指令稱為入口點(diǎn)(entry?point)。鴻蒙系統(tǒng)加載應(yīng)用程序后,進(jìn)入應(yīng)用程序的入口點(diǎn)。這樣的運(yùn)行方式限定了一個(gè)應(yīng)用程序必須全部運(yùn)行在同一塊內(nèi)存空間中。當(dāng)某個(gè)應(yīng)用程序的代碼量比較大時(shí),其通常運(yùn)行在容量大但運(yùn)行效率相對(duì)較低的內(nèi)存空間——例如psram中,這樣會(huì)造成該應(yīng)用程序的代碼運(yùn)行效率低下,尤其是對(duì)于一些需要頻繁調(diào)用的模塊或者一些需要提高運(yùn)行效率的模塊會(huì)有很大的負(fù)面影響。
技術(shù)實(shí)現(xiàn)思路
1、本申請(qǐng)所要解決的技術(shù)問題是如何使鴻蒙系統(tǒng)的鏈接腳本支持自搬移解壓,以提高鴻蒙系統(tǒng)中應(yīng)用程序的運(yùn)行效率。
2、為解決上述技術(shù)問題,本申請(qǐng)?zhí)岢隽艘环N鴻蒙系統(tǒng)的鏈接腳本自搬移解壓的方法,包括如下步驟。步驟s1:在生成嵌入式設(shè)備的系統(tǒng)鏡像文件時(shí),對(duì)至少部分應(yīng)用程序的部分段進(jìn)行數(shù)據(jù)壓縮以減少體積。步驟s2:將“需要提升運(yùn)行效率的應(yīng)用程序的段”稱為需要搬移的段,在鏈接腳本文件中為需要搬移的段指定加載內(nèi)存地址為容量足夠且運(yùn)行效率最高的內(nèi)存空間;根據(jù)鏈接腳本對(duì)每個(gè)應(yīng)用程序的每個(gè)段進(jìn)行內(nèi)存布局的規(guī)則創(chuàng)建一張全局列表;所述全局列表保存了鏈接腳本里記錄的需要搬移的段的源地址、目的地址、源數(shù)據(jù)大小、目的數(shù)據(jù)大小,還保存了鏈接腳本里記錄的需要清零的段;需要清零的段的目的數(shù)據(jù)大小為0。步驟s3:鴻蒙系統(tǒng)中實(shí)現(xiàn)一個(gè)自搬移和自解壓程序。步驟s4:鴻蒙系統(tǒng)在向嵌入式設(shè)備的內(nèi)存空間加載每個(gè)應(yīng)用程序的每個(gè)段時(shí),先在預(yù)先加載進(jìn)內(nèi)存的所述全局列表中查詢?cè)摱?。如果在所述全局列表中記錄的該段的目的?shù)據(jù)大小為0,將該段數(shù)據(jù)清零。如果在所述全局列表中記錄的該段的源數(shù)據(jù)大小與目的數(shù)據(jù)大小相同,將該段從所述全局列表中記錄的該段的源地址復(fù)制到該段的目的地址。如果在所述全局列表中記錄的該段的源數(shù)據(jù)大小與目的數(shù)據(jù)大小不同,先從所述全局列表中記錄的該段的源地址讀取該段數(shù)據(jù),再調(diào)用所述自搬移和自解壓程序?qū)λx取的該段數(shù)據(jù)進(jìn)行解壓縮,然后將解壓縮后的該段數(shù)據(jù)寫到所述全局列表中記錄的該段的目的地址。
3、進(jìn)一步地,所述步驟s1中,所述段包括代碼段、數(shù)據(jù)段、bss段、只讀數(shù)據(jù)段的任意一種或多種。
4、進(jìn)一步地,所述步驟s2中,嵌入式設(shè)備有多個(gè)用于運(yùn)行應(yīng)用程序的內(nèi)存空間,按照代碼的運(yùn)行效率由高到低排序是指令緊耦合存儲(chǔ)器itcm>靜態(tài)隨機(jī)存儲(chǔ)器sram>偽靜態(tài)隨機(jī)存儲(chǔ)器psram;按照內(nèi)存空間的容量由大到小排序是psram>sram>itcm。
5、進(jìn)一步地,所述步驟s2中,鏈接腳本中為每個(gè)段指定虛擬內(nèi)存地址vma,還為某個(gè)段通過at關(guān)鍵字指定加載內(nèi)存地址lma;如果鏈接腳本沒有為某個(gè)段通過at關(guān)鍵字指定lma,鏈接器默認(rèn)該段的lma等同于vma。
6、進(jìn)一步地,所述步驟s2中,所述需要搬移的段是指鏈接腳本里由at關(guān)鍵字指定的lma與vma不一致的段。
7、進(jìn)一步地,所述步驟s2中,所述需要清零的段是指加載到內(nèi)存時(shí)會(huì)被清零的段或者不加載進(jìn)內(nèi)存的段。
8、進(jìn)一步地,所述步驟s3中,所述自搬移和自解壓程序放在鴻蒙系統(tǒng)的最開始的啟動(dòng)位置,不能被搬移和解壓縮,用來對(duì)需要搬移的段進(jìn)行自搬移和自解壓處理。
9、進(jìn)一步地,所述步驟s4中,如果在所述全局列表中記錄的該段的目的數(shù)據(jù)大小為0,表明該段是需要清零的段。如果在所述全局列表中記錄的該段的源數(shù)據(jù)大小與目的數(shù)據(jù)大小相同,表明該段是需要搬移的段、且該段數(shù)據(jù)未被壓縮。如果在所述全局列表中記錄的該段的源數(shù)據(jù)大小與目的數(shù)據(jù)大小不同,表明該段是需要搬移的段、且該段數(shù)據(jù)被壓縮。
10、本申請(qǐng)還提出了一種鴻蒙系統(tǒng)的鏈接腳本自搬移解壓的裝置,包括壓縮單元、設(shè)置與創(chuàng)建單元、實(shí)現(xiàn)單元、查本文檔來自技高網(wǎng)...
【技術(shù)保護(hù)點(diǎn)】
1.一種鴻蒙系統(tǒng)的鏈接腳本自搬移解壓的方法,其特征是,包括如下步驟;
2.根據(jù)權(quán)利要求1所述的鴻蒙系統(tǒng)的鏈接腳本自搬移解壓的方法,其特征是,所述步驟S1中,所述段包括代碼段、數(shù)據(jù)段、BSS段、只讀數(shù)據(jù)段的任意一種或多種。
3.根據(jù)權(quán)利要求1所述的鴻蒙系統(tǒng)的鏈接腳本自搬移解壓的方法,其特征是,所述步驟S2中,嵌入式設(shè)備有多個(gè)用于運(yùn)行應(yīng)用程序的內(nèi)存空間,按照代碼的運(yùn)行效率由高到低排序是指令緊耦合存儲(chǔ)器ITCM>靜態(tài)隨機(jī)存儲(chǔ)器SRAM>偽靜態(tài)隨機(jī)存儲(chǔ)器PSRAM;按照內(nèi)存空間的容量由大到小排序是PSRAM>SRAM>ITCM。
4.根據(jù)權(quán)利要求1所述的鴻蒙系統(tǒng)的鏈接腳本自搬移解壓的方法,其特征是,所述步驟S2中,鏈接腳本中為每個(gè)段指定虛擬內(nèi)存地址VMA,還為某個(gè)段通過AT關(guān)鍵字指定加載內(nèi)存地址LMA;如果鏈接腳本沒有為某個(gè)段通過AT關(guān)鍵字指定LMA,鏈接器默認(rèn)該段的LMA等同于VMA。
5.根據(jù)權(quán)利要求4所述的鴻蒙系統(tǒng)的鏈接腳本自搬移解壓的方法,其特征是,所述步驟S2中,所述需要搬移的段是指鏈接腳本里由AT關(guān)鍵字指定的LMA與VMA不一致
6.根據(jù)權(quán)利要求1所述的鴻蒙系統(tǒng)的鏈接腳本自搬移解壓的方法,其特征是,所述步驟S2中,所述需要清零的段是指加載到內(nèi)存時(shí)會(huì)被清零的段或者不加載進(jìn)內(nèi)存的段。
7.根據(jù)權(quán)利要求1所述的鴻蒙系統(tǒng)的鏈接腳本自搬移解壓的方法,其特征是,所述步驟S3中,所述自搬移和自解壓程序放在鴻蒙系統(tǒng)的最開始的啟動(dòng)位置,不能被搬移和解壓縮,用來對(duì)需要搬移的段進(jìn)行自搬移和自解壓處理。
8.根據(jù)權(quán)利要求1所述的鴻蒙系統(tǒng)的鏈接腳本自搬移解壓的方法,其特征是,所述步驟S4中,如果在所述全局列表中記錄的該段的目的數(shù)據(jù)大小為0,表明該段是需要清零的段;
9.一種鴻蒙系統(tǒng)的鏈接腳本自搬移解壓的裝置,其特征是,包括壓縮單元、設(shè)置與創(chuàng)建單元、實(shí)現(xiàn)單元、查詢與處理單元;
...【技術(shù)特征摘要】
1.一種鴻蒙系統(tǒng)的鏈接腳本自搬移解壓的方法,其特征是,包括如下步驟;
2.根據(jù)權(quán)利要求1所述的鴻蒙系統(tǒng)的鏈接腳本自搬移解壓的方法,其特征是,所述步驟s1中,所述段包括代碼段、數(shù)據(jù)段、bss段、只讀數(shù)據(jù)段的任意一種或多種。
3.根據(jù)權(quán)利要求1所述的鴻蒙系統(tǒng)的鏈接腳本自搬移解壓的方法,其特征是,所述步驟s2中,嵌入式設(shè)備有多個(gè)用于運(yùn)行應(yīng)用程序的內(nèi)存空間,按照代碼的運(yùn)行效率由高到低排序是指令緊耦合存儲(chǔ)器itcm>靜態(tài)隨機(jī)存儲(chǔ)器sram>偽靜態(tài)隨機(jī)存儲(chǔ)器psram;按照內(nèi)存空間的容量由大到小排序是psram>sram>itcm。
4.根據(jù)權(quán)利要求1所述的鴻蒙系統(tǒng)的鏈接腳本自搬移解壓的方法,其特征是,所述步驟s2中,鏈接腳本中為每個(gè)段指定虛擬內(nèi)存地址vma,還為某個(gè)段通過at關(guān)鍵字指定加載內(nèi)存地址lma;如果鏈接腳本沒有為某個(gè)段通過at關(guān)鍵字指定lma,鏈接器默認(rèn)該段的lma等同于vma。
...
【專利技術(shù)屬性】
技術(shù)研發(fā)人員:胡文,黃金華,龍?jiān)乞v,
申請(qǐng)(專利權(quán))人:翱捷科技股份有限公司,
類型:發(fā)明
國別省市:
還沒有人留言評(píng)論。發(fā)表了對(duì)其他瀏覽者有用的留言會(huì)獲得科技券。