分类: LINUX
2009-12-13 14:21:52
阅读了一些文章,下面做一个总结,关于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. 熟悉SEP4020芯片及UB4020MBT开发板;
2.在虚拟机上(Linux
在fedora系统下以root用户登录,下载cross-
[root@localhost /]# tar -jxvf cross-
这个命令会在/usr/local/arm/
[root@localhost /]# export PATH=/usr/local/arm/
或把PATH=/usr/local/arm/
export PATH=/usr/local/arm/
测试:把终端关闭,重新打开后执行如下命令:
[root@localhost /]# arm-linux-gcc –v
若出现:gcc version
3.下载u-boot
这里先下载移植好的。。。
4.测试交叉编译器配置好没有
在u-boot-
[root@localhost u-boot-
[root@localhost u-boot-
[root@localhost u-boot-
没错的话会在u-boot-
u-boot
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) 修改交叉编译器为arm-linux-gcc(如下):
ifeq ($(ARCH),arm)
CROSS_COMPILE = /usr/local/arm/
(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
2.在board子目录prochip/UB4020文件夹
修改开发板UB4020目录下的Makefile文件为:
OBJS := UB4020.o flash.o dm9161.o
再修改UB4020下config.mk的TEXT_BASE为:
TEXT_BASE = 0x30700000
此即为u-boot在SDRAM中开始运行的地址。
3.在include/configs/中建立配置头文件UB4020.h
4.修改cpu/sep4020/config.mk文件
[root@localhost sep4020]# gedit config.mk
把下面这句:
PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,-mabi=apcs-gnu)
改为:
PLATFORM_CPPFLAGS +=$(callcc-option,-mapcs-32,$(call cc-option,-mabi=apcs-gnu,))
5.测试编译能否成功
[root@localhost u-boot-
[root@localhost u-boot-
[root@localhost u-boot-
如果编译成功的话会在u-boot-
l u-boot:ELF格式的文件,可以被大多数Debug程序识别;
l u-boot.bin:二进制bin文件,纯粹的u-boot二进制执行代码,不保存ELF格式和调试信息,这个文件一般用于烧录到用户开发板中;
l u-boot.srec:Motorola S-Record格式,可以通过串行口下载到开发板中。
以上仅实现了最基本的移植过程,几乎没有太大修改。