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

①Bootloader可以使用bootrom的存儲介質(zhì)的驅(qū)動
②Kernel使用可以bootrom的存儲介質(zhì)的驅(qū)動
③固件大小變小
④存儲固件的存儲介質(zhì)空間需求變小
⑤靜態(tài)隨機(jī)存儲器大小需求變小
⑥內(nèi)存大小需求變小
[1]Integrated Circuit Test Engineering: Modern Techniques