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

①Bootloader可以使用bootrom的存儲介質的驅動
②Kernel使用可以bootrom的存儲介質的驅動
③固件大小變小
④存儲固件的存儲介質空間需求變小
⑤靜態隨機存儲器大小需求變小
⑥內存大小需求變小
[1]Integrated Circuit Test Engineering: Modern Techniques