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