Bootloader
|
Monitor
|
描 述
|
x86
|
ARM
|
PowerPC
|
LILO
|
否
|
Linux磁盘引导程序
|
是
|
否
|
否
|
GRUB
|
否
|
GNU的LILO替代程序
|
是
|
否
|
否
|
Loadlin
|
否
|
从DOS引导Linux
|
是
|
否
|
否
|
ROLO
|
否
|
从ROM引导Linux而不需要BIOS
|
是
|
否
|
否
|
Etherboot
|
否
|
通过以太网卡启动Linux系统的固件
|
是
|
否
|
否
|
LinuxBIOS
|
否
|
完全替代BUIS的Linux引导程序
|
是
|
否
|
否
|
BLOB
|
否
|
LART等硬件平台的引导程序
|
否
|
是
|
否
|
U-boot
|
是
|
通用引导程序
|
是
|
是
|
是
|
RedBoot
|
是
|
基于eCos的引导程序
|
是
|
是
|
是
|
目 录
|
特 性
|
解 释 说 明
|
board
|
平台依赖
|
存放电路板相关的目录文件,例如:RPXlite(mpc8xx)、smdk2410(arm920t)、sc520_cdp(x86) 等目录
|
cpu
|
平台依赖
|
存放CPU相关的目录文件,例如:mpc8xx、ppc4xx、arm720t、arm920t、 xscale、i386等目录
|
lib_ppc
|
平台依赖
|
存放对PowerPC体系结构通用的文件,主要用于实现PowerPC平台通用的函数
|
目 录
|
特 性
|
解 释 说 明
|
lib_arm
|
平台依赖
|
存放对ARM体系结构通用的文件,主要用于实现ARM平台通用的函数
|
lib_i386
|
平台依赖
|
存放对X86体系结构通用的文件,主要用于实现X86平台通用的函数
|
include
|
通用
|
头文件和开发板配置文件,所有开发板的配置文件都在configs目录下
|
common
|
通用
|
通用的多功能函数实现
|
lib_generic
|
通用
|
通用库函数的实现
|
Net
|
通用
|
存放网络的程序
|
Fs
|
通用
|
存放文件系统的程序
|
Post
|
通用
|
存放上电自检程序
|
drivers
|
通用
|
通用的设备驱动程序,主要有以太网接口的驱动
|
Disk
|
通用
|
硬盘接口程序
|
Rtc
|
通用
|
RTC的驱动程序
|
Dtt
|
通用
|
数字温度测量器或者传感器的驱动
|
examples
|
应用例程
|
一些独立运行的应用程序的例子,例如helloworld
|
tools
|
工具
|
存放制作S-Record 或者 U-Boot格式的映像等工具,例如mkimage
|
Doc
|
文档
|
开发使用文档
|
文 件 名 称
|
说 明
|
文 件 名 称
|
说 明
|
System.map
|
U-Boot映像的符号表
|
u-boot.bin
|
U-Boot映像原始的二进制格式
|
u-boot
|
U-Boot映像的ELF格式
|
u-boot.srec
|
U-Boot映像的S-Record格式
|
工 具 名 称
|
说 明
|
工 具 名 称
|
说 明
|
bmp_logo
|
制作标记的位图结构体
|
img2srec
|
转换SREC格式映像
|
envcrc
|
校验u-boot内部嵌入的环境变量
|
mkimage
|
转换U-Boot格式映像
|
gen_eth_addr
|
生成以太网接口MAC地址
|
updater
|
U-Boot自动更新升级工具
|
U-Boot能够支持多种体系结构的处理器,支持的开发板也越来越多。因为Bootloader是完全依赖硬件平台的,所以在新电路板上需要移植U-Boot程序。
开始移植U-Boot之前,先要熟悉硬件电路板和处理器。确认U-Boot是否已经支持新开发板的处理器和I/O设备。假如U-Boot已经支持一块非常相似的电路板,那么移植的过程将非常简单。
移植U-Boot工作就是添加开发板硬件相关的文件、配置选项,然后配置编译。
开始移植之前,需要先分析一下U-Boot已经支持的开发板,比较出硬件配置最接近的开发板。选择的原则是,首先处理器相同,其次处理器体系结构相同,然后是以太网接口等外围接口。还要验证一下这个参考开发板的U-Boot,至少能够配置编译通过。
以S3C2410处理器的开发板为例,U-Boot-1.1.2版本已经支持SMDK2410开发板。我们可以基于SMDK2410移植,那么先把SMDK2410编译通过。
我们以S3C2410开发板fs2410为例说明。移植的过程参考SMDK2410开发板,SMDK2410在U-Boot-1.1.2中已经支持。
移植U-Boot的基本步骤如下。
(1)在顶层Makefile中为开发板添加新的配置选项,使用已有的配置项目为例。
smdk2410_config : unconfig
@./mkconfig $(@:_config=) arm arm920t smdk2410 NULL s3c24x0
参考上面2行,添加下面2行。
fs2410_config : unconfig
@./mkconfig $(@:_config=) arm arm920t fs2410 NULL s3c24x0
(2)创建一个新目录存放开发板相关的代码,并且添加文件。
board/fs2410/config.mk
board/fs2410/flash.c
board/fs2410/fs2410.c
board/fs2410/Makefile
board/fs2410/memsetup.S
board/fs2410/u-boot.lds
(3)为开发板添加新的配置文件
可以先复制参考开发板的配置文件,再修改。例如:
$cp include/configs/smdk2410.h include/configs/fs2410.h
如果是为一颗新的CPU移植,还要创建一个新的目录存放CPU相关的代码。
(4)配置开发板
$ make fs2410_config
(5)编译U-Boot
执行make命令,编译成功可以得到U-Boot映像。有些错误是跟配置选项是有关系的,通常打开某些功能选项会带来一些错误,一开始可以尽量跟参考板配置相同。
(6)添加驱动或者功能选项
在能够编译通过的基础上,还要实现U-Boot的以太网接口、Flash擦写等功能。
对于FS2410开发板的以太网驱动和smdk2410完全相同,所以可以直接使用。CS8900驱动程序文件如下。
drivers/cs8900.c
drivers/cs8900.h
对于Flash的选择就麻烦多了,Flash芯片价格或者采购方面的因素都有影响。多数开发板大小、型号不都相同。所以还需要移植Flash的驱动。每种开发板目录下一般都有flash.c这个文件,需要根据具体的Flash类型修改。例如:
board/fs2410/flash.c
(7)调试U-Boot源代码,直到U-Boot在开发板上能够正常启动。
调试的过程可能是很艰难的,需要借助工具,并且有些问题可能困扰很长时间。
环 境 变 量
|
解 释 说 明
|
bootdelay
|
定义执行自动启动的等候秒数
|
baudrate
|
定义串口控制台的波特率
|
netmask
|
定义以太网接口的掩码
|
ethaddr
|
定义以太网接口的MAC地址
|
bootfile
|
定义缺省的下载文件
|
bootargs
|
定义传递给Linux内核的命令行参数
|
bootcmd
|
定义自动启动时执行的几条命令
|
serverip
|
定义tftp服务器端的IP地址
|
ipaddr
|
定义本地的IP地址
|
stdin
|
定义标准输入设备,一般是串口
|
stdout
|
定义标准输出设备,一般是串口
|
stderr
|
定义标准出错信息输出设备,一般是串口
|