蔡枫 福州瑞芯微电子股份有限公司
一种使用存储介质驱动的方式
蔡枫 福州瑞芯微电子股份有限公司
现代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