蔡楓 福州瑞芯微電子股份有限公司
一種使用存儲(chǔ)介質(zhì)驅(qū)動(dòng)的方式
蔡楓 福州瑞芯微電子股份有限公司
現(xiàn)代SoC(System on chip,系統(tǒng)芯片)的設(shè)計(jì)越來(lái)越復(fù)雜。Boot rom的功能也越來(lái)越強(qiáng)大。傳統(tǒng)的boot rom只在啟動(dòng)的時(shí)候使用一次。之后就再也不會(huì)用到了。本文介紹了一種利用boot rom中的驅(qū)動(dòng)程序來(lái)驅(qū)動(dòng)存儲(chǔ)介質(zhì)的方法。
Boot rom 驅(qū)動(dòng)程序 存儲(chǔ)介質(zhì) 函數(shù) 固件 靜態(tài)隨機(jī)存儲(chǔ)器 內(nèi)存
系統(tǒng)芯片(英語(yǔ):System on Chip,縮寫:SoC)是一個(gè)將電腦或其他電子系統(tǒng)集成到單一芯片的集成電路。系統(tǒng)芯片可以處理數(shù)字信號(hào)、模擬信號(hào)、混合信號(hào)甚至更高頻率的信號(hào)。系統(tǒng)芯片常常應(yīng)用在嵌入式系統(tǒng)中。系統(tǒng)芯片的集成規(guī)模很大,一般達(dá)到幾百萬(wàn)門到幾千萬(wàn)門。
盡管微控制器通常只有不到100 kB的隨機(jī)存取存儲(chǔ)器,但是事實(shí)上它是一種簡(jiǎn)易的、功能弱化的單芯片系統(tǒng),而“系統(tǒng)芯片”這個(gè)術(shù)語(yǔ)常被用來(lái)指功能更加強(qiáng)大的處理器,這些處理器可以運(yùn)行Windows和Linux的某些版本。系統(tǒng)芯片更強(qiáng)的功能要求它具備外部存儲(chǔ)芯片,例如有的系統(tǒng)芯片配備了閃存。系統(tǒng)芯片往往可以連接額外的外部設(shè)備。系統(tǒng)芯片對(duì)半導(dǎo)體器件的集成規(guī)模提出了更高的要求。為了更好地執(zhí)行更復(fù)雜的任務(wù),一些系統(tǒng)芯片采用了多個(gè)處理器核心。
SoC生產(chǎn)的時(shí)候會(huì)把一段程序固化在芯片的rom中,芯片上電的時(shí)候會(huì)從rom中的某個(gè)特定地址開(kāi)始運(yùn)行。這個(gè)rom就叫做Boot Rom。
現(xiàn)代SoC的固件一般包含Bootloader,kernel等。SoC中固化有boot rom。如下表:隨著SoC功能越來(lái)越強(qiáng)大,設(shè)計(jì)越來(lái)越復(fù)雜,Boot rom的功能也越來(lái)越強(qiáng)大。由于boot rom中的啟動(dòng)代碼需要從不同的存儲(chǔ)介質(zhì)中加載下一級(jí)的bootloader。所以boot rom中必然包含不同存儲(chǔ)介質(zhì)的驅(qū)動(dòng)程序。
由于bootloader也需要從不同的存儲(chǔ)介質(zhì)中加載下一級(jí)的固件。所以bootloader中也必然包含不同存儲(chǔ)介質(zhì)的驅(qū)動(dòng)程序。
由于在kernel中也可能有需要訪問(wèn)不通的存儲(chǔ)介質(zhì)。所以kernel中也可能包含不通存儲(chǔ)介質(zhì)的驅(qū)動(dòng)程序。
這樣,在固件的不同部分包含了多份存儲(chǔ)介質(zhì)的驅(qū)動(dòng)。這造成bootloader,kernel的固件大小變大,從而造成了存儲(chǔ)介質(zhì)空間的浪費(fèi),同時(shí)由于bootloader和kernel是在靜態(tài)隨機(jī)存儲(chǔ)器或者內(nèi)存中中運(yùn)行的。這也造成了靜態(tài)隨機(jī)存儲(chǔ)器和內(nèi)存的空間的浪費(fèi)。
本文提出了一種方法,讓固件的不同部分使用boot rom中的存儲(chǔ)介質(zhì)的驅(qū)動(dòng)。從而降低了固件大小,減小了對(duì)存儲(chǔ)介質(zhì)空間需求,對(duì)靜態(tài)隨機(jī)存儲(chǔ)器大小的需求,對(duì)內(nèi)存大小的需求。
SoC啟動(dòng)后會(huì)將boot rom中的代碼加載到靜態(tài)隨機(jī)存儲(chǔ)器中運(yùn)行。由于boot rom是在芯片生產(chǎn)時(shí)固化在芯片中的。所以只能讓bootloader,kernel等調(diào)用boot rom中的存儲(chǔ)介質(zhì)的驅(qū)動(dòng)。
要保證這部分代碼不被后面的固件覆蓋。然后申明一個(gè)函數(shù)指針。把函數(shù)指針指向?qū)?yīng)需要調(diào)用的函數(shù)在靜態(tài)隨機(jī)存儲(chǔ)器中的地址。如下,func為申明的函數(shù)指針,para1~3為傳入所調(diào)用的函數(shù)的參數(shù)。這里只是舉例,實(shí)際使用時(shí)需要根據(jù)所調(diào)用的boot rom的函數(shù)所需的參數(shù)個(gè)數(shù)以及類型來(lái)修改。0xabcdefgh為對(duì)應(yīng)的函數(shù)在靜態(tài)隨機(jī)存儲(chǔ)器中的地址。
①Bootloader可以使用bootrom的存儲(chǔ)介質(zhì)的驅(qū)動(dòng)
②Kernel使用可以bootrom的存儲(chǔ)介質(zhì)的驅(qū)動(dòng)
③固件大小變小
④存儲(chǔ)固件的存儲(chǔ)介質(zhì)空間需求變小
⑤靜態(tài)隨機(jī)存儲(chǔ)器大小需求變小
⑥內(nèi)存大小需求變小
[1]Integrated Circuit Test Engineering: Modern Techniques