基于PowerPC的微型BootLoader在Linux中的应用
本文介绍一款结构简单、功能完善的微型BootLoader在Linux系统中的应用。它主要适用于PowerPC e300系列处理器,也能很容易地进行修改,以适应其他嵌入式处理器。
引言
引导装载程序(BootLoader)通常是在硬件上执行的第一段代码。虽然目前在Linux开源社区里有大量的引导装载程序,但是对于很多嵌入式设备上的应用来说,这些引导装载程序都显得过于复杂和冗长。为此,本文专门针对PowerPC E300系列处理芯片,设计了一款小型BootLoader程序,并命名为Genesis。该程序结构简单、功能完善,能很好地引导Linux内核以及文件系统。
环境要求及系统映像
硬件环境
本文中开发的硬件环境如下:处理器采用MPC83xx系列;内存采用512M的DDR2内存;闪存采用8MB的闪存;串口采用uart16550;波特率采用115200。
编译环境
程序在mvl-linux、linux-kernal-2.6.10和gcc编译器环境下编译。
系统文件存放映像
Genesis程序存放在一块闪存里面。对于小型的Linux系统,包括内核和文件系统都和装载引导程序BootLoader一起编译产生二进制文件,最后存放在闪存中,在上电之后搬移到内存执行。图1就是编译产生的系统文件代码在闪存中以及搬移到内存以后的示意图。
图1 系统文件映像
Genesis的实现
Genesis的主体结构
功能完善的引导装载程序BootLoader必须经过以下几个步骤,即:初始化CPU;初始化内存,包括启用内存库、初始化内存配置寄存器等;初始化串行端口(如果在目标板上有的话);启用指令/数据高速缓存;设置堆栈指针;设置参数区域并构造参数结构和标记(这是重要的一步,因为内核在标识根设备、页面大小、内存大小以及更多内容时要使用引导参数);打开/关闭看门狗;调用主体入口函数;跳转到内核的开始。
程序模型的建立
根据Genesis的主体架构,本文在程序体内分别建立了几个最为重要的code程序:entry.S;board.c;cpu.c;console.c;main.c。这些程序的执行顺序如图2所示。
图2 程序执行顺序示意图
程序设计
这里,entry.S是程序的入口。entry.S中的代码全部是汇编指令。整个程序都围绕这些汇编代码展开。
cpu.c的功能是初始化CPU内核,CPU主要控制器以及系统时钟控制器;board.c主要是初始化跟目标板密切相关的外围设备,包括闪存、CPLD以及系统内存等;console.c是目标板的串口初始化程序,它对CPU的串口进行初始化,并配置串口的速率;main.c的功能就是引导Linux内核以及文件系统。
相关文章
- 2023-12-14浅谈减压阀的结构设计
- 2023-12-10吸收式制冷循环系统的热力学分析
- 2023-11-19轴类零件的高精度形状误差检测方法研究
- 2023-07-20光栅投影轮廓测量的系统标定技术
- 2023-03-09铜氨液流量测量的改进
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。