1.1 u-boot1.3.3的基本移植分析
阅读了一些文章,下面做一个总结,关于u-boot1.3.3在以SEP4020为核心的UB4020MBT试验平台上的移植概述,对整个流程有一个了解。
1.1.1 u-boot代码结构
u-boot代码采用了一种高度模块化的编程方式,与移植相关的主要目录如下:
l Board:目标板相关文件,主要包含SDRAM、Flash驱动;
l common:独立于处理器体系结构的通用代码,如内存大小探测与故障检测;
l cpu:与处理器相关的文件,如mpc8xx子目录下含串口、网口、LCD驱动及中断初始化等文件;
l driver:通用设备驱动,如CFI Flash驱动(目前对Intel Flash支持较好);
l doc:u-boot的说明文档;
l examples:可在u-boot下运行的示例程序,如helloworld.c,timer.c;
l include:u-boot头文件,configs子目录下与目标板相关的配置头文件是移植过程中经常要修改的文件;
l lib_xxx:处理器体系相关的文件,如lib-ppc,lib_arm目录分别包含与PowerPC、ARM体系结构相关的文件;
l net:与网络功能相关的文件目录,如bootp、nfs、tftp;
l post:上电自检文件目录,尚有待于进一步完善;
l rtc:RTC驱动程序;
l tools:用于创建u-boot S-RECORD和BIN镜像文件的工具[10]。
本课题中u-boot的移植就是根据UB4020MBT的硬件资源来修改以上目录中的部分文件或者添加相关源文件,并且重新编译。
1.1.2 u-boot移植前的准备
1. 熟悉SEP4020芯片及UB4020MBT开发板;
2.在虚拟机上(Linux2.6.16系统)建立交叉编译环境;
在fedora系统下以root用户登录,下载cross-3.3.2.tar.bz2文件并将其复制到“/”目录下,解压安装(如下命令):
[root@localhost /]# tar -jxvf cross-3.3.2.tar.bz2
这个命令会在/usr/local/arm/3.3.2/bin目录下安装arm-linux-gcc交叉编译程序,然后在PATH变量中添加一项:/usr/local/arm/3.3.2/bin;
[root@localhost /]# export PATH=/usr/local/arm/3.3.2/bin:$PATH
或把PATH=/usr/local/arm/3.3.2/bin:$PATH添加到/etc/bashrc文件中的最后一行(如下命令):
export PATH=/usr/local/arm/3.3.2/bin: $PATH
测试:把终端关闭,重新打开后执行如下命令:
[root@localhost /]# arm-linux-gcc –v
若出现:gcc version 3.3.2,则说明建立好了。
3.下载u-boot1.3.3
这里先下载移植好的。。。
4.测试交叉编译器配置好没有
在u-boot-1.3.3目录下执行如下命令:
[root@localhost u-boot-1.3.3]# make distclean
[root@localhost u-boot-1.3.3]# make UB4020_config
[root@localhost u-boot-1.3.3]# make
没错的话会在u-boot-1.3.3下生成u-boot.bin文件。
1.1.3 u-boot移植方法
u-boot1.3.3支持UB4020MBT开发板,移植过程中需要修改的主要有如下一些文件:
l include/configs/UB4020.h //开发板的配置文件
l board/prochip/UB4020/UB4020.c
l board/prochip/UB4020/flash.c
l board/prochip/UB4020/lowlevel_init.S
l cpu/sep4020/start.S
l cpu/sep4020/serial.c
顶层目录下的Makefile首先可以配置开发板的定义,然后递归调用各层目录下的Makefile,最后把编译过的程序链接成u-boot映像。
1.进入u-boot-1.3.3/目录,修改Makefile;
(1) 修改交叉编译器为arm-linux-gcc(如下):
ifeq ($(ARCH),arm)
CROSS_COMPILE = /usr/local/arm/3.3.2/bin/arm-linux-
(2) 添加如下两行命令:
UB4020_config : unconfig
@./mkconfig $(@:_config=) arm sep4020 UB4020 prochip NULL
l arm:CPU的架构(ARCH) ;
l sep4020:CPU的类型,其对应于cpu/sep4020子目录;
l UB4020:开发板的型号(BOARD),对应于board/prochip/UB4020目录;
l prochip:开发者/或经销商(vender)。
l NULL:SOC。
在第2 行@前面的空格是Tab键,不能用空格来代替,因为是用它来识别命令的。
执行配置u-boot的命令make UB4020_config,通过./mkconfig脚本生成include/config.mk的配置文件,而文件内容正是通过这个配置u-boot的命令对开发板配置生成的,include/config.mk内容如下:
ARCH = arm
CPU = sep4020
BOARD = UB4020
VENDOR = prochip
这样,硬件平台的目录文件关系可以通过这些定义来确定:
board/prochip/UB4020/
cpu/sep4020/
lib_arm/
include/asm-arm/
include/configs/UB4020.h
所以,就要在上面所定义的对应目录放置移植所需要的对应文件!!!
在顶层Makefile中 ,已经包含了这些文件的定义,而各种体系结构通用的跪着直接在顶层config.mk中定义。通过ARCH、CPU、BOARD、VENDOR等不同硬件平台定义不同的选项。arm体系结构的规则包含在arm_config.mk中。
ifeq ($(obj)include/config.mk,$(wildcard $(obj) \
include/config.mk))
# load ARCH, BOARD, and CPU configuration
include $(obj)include/config.mk
export ARCH CPU BOARD VENDOR SOC