基于MPC8349控制计算机的U-Boot移植
0 引言
U-Boot (Universal Boot Loader),是在PPC Boot 的基础上,集成了ARM, XScale, x86,MIPS 等结构发展来的。作为Boot loader,其主要安装在嵌入式系统板上的ROM 中。 它主要用来初始化、检测系统硬件,以及下载、运行有关的应用代码。 在这篇论文中,采用的是开源的最新版本U-Boot 1.1.3。U-Boot 1.1.3 支持的CPU包括, MPC8xx, MPC5xx, MPC824x,MPC82xx, MPC83xx, MPC85xx, MPC74xx 等。
U-Boot 之所以主要是因其支持很多文件类型。
(1) 独立的应用程序:该程序直接在U-Boot 环境下执行,并且执行完毕后重新返回U-Boot 环境。
(2) “Linux 操作系统Kernel 文件”: U-Boot 可以引导Linux 操作系统Kernel 文件在系统板上执行。在完成该引导过程后,必须通过重新启动CPU 才能再次进入U-Boot 环境。
(3) “操作系统Ramdisk 文件”: U-Boot 可以引导加载Linux 操作系统Ramdisk 文件。该文件主要是作为系统板,启动时需要加载的文件系统。
(4)“综合文件”: 该文件可以包括一种或几种U-Boot 所支持的文件。比如包括Linux 操作系统内核和启动时需要加载的ramdisk 文件系统。
(5) “可执行文件”: 该文件主要由U-Boot 将其烧录到系统板的Flash 中。比如,uboot.bin。
(6) “脚本文件”: 该文件主要用在U-Boot 启动时利用脚本文件来设置具体的环境变量。
1 U-Boot 工作原理
U-Boot启动过程可以分成三个阶段。
(1)执行start.S(cpu/mpc83xx/start.S)汇编程序,见图1.
(2)执行U-Boot启动过程中的第一个C语言函数board.(lib_ppc/board.c),见图2。
(3)系统进入主循环main_loop(common/main.c)延时等待处理用户命令或自动执行启动,见图3。
3 U-Boot 的文件结构
在U-boot 包含board, common, cpu, disk,doc, drivers, dtt, examples, fs, include 等文件。但是,针对具体的应用,只需要修改设定的与我们系统有关的代码。当我们的U-boot 编译成功后,必要的二进制文件将成为在u-boot-1.1.3 文件夹中。这些文件中,最重要的是。
config.mk:定义基地址和CFLAGS。
MAKEALL:用来定义所有支持的系统板以及U-Boot 源码。
Makefile: U-Boot 编译时要用到的文件。
Mkconfig:用来创建头文件并链接生成针对系统板的U-Boot的脚本。
u-boot.bin:U-Boot 编译成功后形成的二进制文件,可以烧录到系统板的flash 中。
除了以上四个重要文件之后,在u-boot-1.1.3 目录下面还有一些重要的文件。
(1)在u-boot-1.1.3/board/下,重要的文件包括。
flash.c::定义针对flash 的命令。
init.S:用来定义 TLBs 和LAWs。
mpc8349.c: 针对mpc8349 的特殊代码。
u-boot.lds:: 系统板的链接文件。
(2)在u-boot-1.1.3/cpu/下, 主要的文件包括。
start.c::U-Boot 启动时所要执行的第一个程序。
spd_sdram.c:初始化和配置系统板的DDR。
(3)在u-boot-1.1.3/include/configs/下, 主要的文件包括。
MPC8349.h:针对系统板的具体局宏定义。
flash.h: 包含各种Flash 芯片的具体资料数据的定义。
(4)在u-boot-1.1.3/include/lib_ppc/下, 重要的文件包括。
board.c: 系统板的初始化函数。
(5)在u-boot-1.1.3/common/下, 重要的文件包括。
main.c: 整个U-Boot 启动时的主循环函数。
4 为MPC8349 制作合适的U-Boot
A 针对系统板的 U-Boot 修改
在控制计算机的硬件系统包括两片8M Flash, 128M SDRAM, 6 GBE 和 2 FCC 等。为了让U-Boot 在该系统上正确的运行 ,应该针对该系统设置一些特殊的结构参数选择。
(1)编辑 “Makefile” and “MAKEALL”
(2)添加新的代码到针对系统板的文件夹中。
在此过程中,我们应该创建一个新的目录用来存放系统的特殊代码。我们可以添加系统板需要的任何文件。在系统板的目录,有些文件是必须有的。
u-boot-1.1.3/board/mpc8349/mpc8349.c,
u-boot-1.1.3/board/mpc8349/flash.c,
u-boot-1.1.3/board/mpc8349/init.S,
u-boot-1.1.3/board/mpc8349/u-boot.lds,
u-boot-1.1.3/include/configs/MPC8349.h,
u-boot-1.1.3/lib_ppc/board.c,
u-boot-1.1.3/Makefile,
u-boot-1.1.3/MAKEALL.
B. U-Boot 的交叉编译环境的建立
开发系统主机的系统是FC6.0。用到的源码有gcc-3.4.3/glibc-2.3.2、Linux
评论