1 导言
Linux具有杰出的裁剪性和移植性,并且开源、资源丰富,已成为嵌入式体系的开发热门。一个完好的嵌入式Linux系通一般包含Bootloader、内核、文件体系三部分,方针板上电后由Bootloader初始化硬件,引导内核和文件体系来发动Linux。但因为在嵌入式开发中根据MIPS体系的Bootloader较少,开发者在移植MIPS Bootloader需花费很多精力。结合OCTEON3010(MIPS64)的U-boot移植经历,剖析嵌入式LinuxBootloader的作业原理及功用,规划了一个根据MIPS体系的Bootloader模型。对OCTEON系列的MIPS处理器Bootloader的规划具有参考价值和指导意义。
2 Bootloader原理剖析
Bootloader是在运转操作体系内核前所履行的一段小程序。经过履行这段小程序,完结初始化硬件设备、树立内存空间的映射图,从而为体系的软硬件环境设置一个适宜状况,以便为终究调用操作体系内核预备好正确环境。
大多数Bootloader包含“发动加载”和“下载”两种操作形式。从终究用户来看,Bootloader便是用来加载操作体系,而无作业形式差异。其间,发动加载形式是Bootloader从方针机上的某个固态存储设备将操作体系加载到RAM中运转,整个进程并没有用户介入。这种形式是Bootloader的正常作业形式。而在下载形式下,方针机上的Bootloader经过串口衔接或网络衔接从主机(Host)下载文件,例如下载内核映像和根文件体系映像等。
因为完结Bootloader依靠CPU的体系结构,因而大多数Bootloader分为stage1和stage2两部分,并依靠于CPU体系结构的代码,例如:设备初始化代码等,一般放在stage1中,一般选用汇编言语。而stage2则一般选用C言语完结杂乱功用,并且代码具有杰出的可读性和移植性。stage1过程一般包含:硬件设备初始化;为加载Bootloader的stage2预备RAM空间;复制Bootloader的stage2到RAM空间中;设置好仓库;跳转到stage2的C进口点。Bootloader的stage2过程一般包含:初始化当时阶段运用的硬件设备;检测体系内存映射;将Kernel映像和根文件体系映像从Flash上读到RAM空间中;为内核设置发动参数;调用内核。
3 规划移植
3.1 发动流程
针对详细的硬件内容,详细剖析U-Boot的发动流程后,给出发动流程中需求修正的代码。
3.2 移植剖析
片级移植首要是针对详细CPU初始化代码的修正,针对对应的MIPS渠道,首要包含:通用寄存器的初始化、CP0的初始化(status,config,watch,count,compare,etc.)、watchdog初始化、Cache初始化、TLB初始化。板级移植包含:串口驱动、Flash读写驱动(nor,nand)、HD读写驱动、网卡驱动。而功用层扩展可根据需求增加新功用或削减优化,包含调试功用、发动功用、下载功用等。
3.3 修正代码
首要修正的代码为:makefile增加开发板的编译支撑;Include/configs/myboard.h开发板的界说,发动参数等;cpu/mips/start.s修正初始化代码和进口;board/myboard/flash.c对应的Nor Flash驱动;board/myboard/myboard.c对应的板级初始化代码;board/myboard/lowlevel_init.s初始化硬件的汇编代码;board/myboard/serial.c串口驱动。
4 OCTEON系列CPU的硬件初始化实例
4.1 开发环境及硬件渠道简介
选用的是宿主机+方针板的开发形式,宿主机为PC+FC6,方针板的CPU选用根据MIPS64 V2体系结构的处理器OCTEON_CN3010,NOR Flash选用AMD公司8 Mb的AM-29DL640G.SDRAM选用三星公司512 Mb的M378T6553CZ3-CD5(64 Mb×8 bit)。存储部分的硬件衔接如图1所示。
4.2 详细完结代码
体系的开端地址一致规定为0xBFC00000,加电后,CPU从该地址开端履行。该地址也便是体系反常处理向量表的第一项(reset)。0xBFC00000处的中断向量表开端处的跳转指令,跳到了InitTLBStart中,完结了体系的大部分初始化,例如设置寄存器、CPU、SDRAM、Flash等。以下为详细程序代码:
体系完结初始化后,跳转到board.c。在board.c中的checkboard()函数将进一步设置CPU、SDRAM、Cache、串口等,并将硬件初始化代码从Flash复制到SDRAM中持续运转,最终调用main_loop()函数,进入Bootloader的第一个c函数-main_loop()函数,在这个函数中将初始化硬件渠道相关的参数、模块,并优化参数,设置loader参数等硬件初始化。
4.3 Bootloader的烧录和发动
运用Flash烧录器把生成的u-boot.Bin文件烧录到flash后,将其放人方针板的Flash槽。方针板通电后,串口输出数据。至此,Bootloader被成功移植。
5 结语
经过剖析引导转载体系在嵌入式Linux体系中的作业原理及功用,结合移植经历,规划了一个根据MIPS体系的引导装载体系模型,并给出了OCTEON初始化实例。本引导装载体系已应用于方针板中,达到了预期要求作用,由此证明这种引导装载体系的模型可行,将对OCTEON系列的MIPS处理器Bootloader的规划有必定参考价值和指导意义。