BLOB启动流程与Bootloader程序可移植性研究
根据Bootloader的启动流程可知,对于不同架构的CPU,尽管处理流程相似,但是实现方法不同,主要体现在启动的第一阶段对CPU的设置上。所以这部分的硬件相关代码基本上要重新编写。
多数Bootloader在stage1的代码不易由C语言实现,因而大多采用汇编语言实现。以U-boot为例,stage1代码主要位于start.S、IO.S、Cache.S中,其中最重要的是start.S。该代码主要针对特定处理器,对其内部各个寄存器进行设置并初始化CPU。主要完成设置处理器工作模式、初始化缓冲区、设置堆栈、设置中断向量、内存控制器初始化[6]。
完成stage1代码编写之后,还需要按照相同构架下Bootloader移植的方法对相关代码进行编写。
2.3 提高可移植性的方案设计
目前影响Bootloader可移植性的因素主要有:CPU不同架构,同一架构不同CPU型号,目标板硬件不同结构。针对以上问题提出了几点提高可移植性的方案设计。
(1)对于遵从GPL协议的开源Bootloader,可以根据不同架构和不同硬件定制相应的驱动文件,如各种.c和.h文件。考虑到目前嵌入式硬件种类非常多,需要大量开源软件开发者的支持,尽管不能覆盖所有硬件,但在一定范围内可以大大减少嵌入式系统开发的工作量。
(2)在上一步的基础上,采用类似Linux内核配置的方法(如make menuconfig或make xconfig),用终端式的配置菜单对具体硬件进行设置,减少移植过程中代码级的修改。
在实验过程中实现了BLOB在PXA255目标板及SA1110目标板的移植。此项研究已经应用在清华大学精密测试技术与仪器国家重点实验室的嵌入式生物特征识别平台上,可以实现BLOB、内核镜像、文件系统镜像的下载及内核的引导。
评论