u-boot 体系架构移植步骤


移植到u-boot-1.1.4

安装交叉编译工具:

u-boot-1.1.4版本比较老,交叉编译工具使用eldk4.0,

ELDK(Embedded Linux Development Kit)是德国DENX软件工程公司推出的嵌入式Linux开发套件,而DENX公司的CEO就是大名鼎鼎的U-Boot的维护人Wolfgang Denk。从ELDK 4.0开始,这个开发套件开始提供针对ARM和MIPS的交叉编译环境(ELDK最初只支持PPC)。

下载eldk的网址如下:ftp://mirror.switch.ch/mirror/eldk/

下载后,mout iso,输入如下命令安装:/media/cdrom0/install -d /opt

export PATH=$PATH:/opt/usr/bin/

export CROSS_COMPILE=/opt/usr/bin/arm-linux-

交叉编译工具安装完毕。

熟知uboot启动流程,uboot体系架构的基础之上,可以安装如下步骤移植uboot,移植的原则是u-boot-1.1.4体系架构下的原来的所有单板都不受影响。

移植uboot步骤:

1、u-boot-1.1.4/cpu/arm***/

根据芯片源码u-boot-s/cpu/arm***/目录下的文件,修改u-boot-1.1.4/cpu/arm***/下的文件:

a、config.mk基本不需要修改;

b、cpu.c要改,实在做不到不改动影响原来的代码时,可以加条件编译;

c、interrupts.c文件也要修改,注意u-boot-s中interrupts.c文件可能不是放在这个文件夹下面,可能放在/lib-arm/下面,那么可以把/lib-arm/目录下的interrupts.c搬到这个目录下;

d、Makefile可以不修改,需试试看,我改了。

e、start.s改动不多,但是最好不包含其余的文件,比如如果用不到千万不要包含common.h文件,否则很难编译通过。

f、添加目录$(SOC)/,添加这个目录之后,注意这个目录如何把它编译进u-boot,这是由u-boot-1.1.4/Makefile管理的,注意查看其中有这样一句:

ifdef SOC
LIBS += cpu/$(CPU)/$(SOC)/lib$(SOC).a
endif

这样我们添加的目录就能够顺利编入u-boot。

2、u-boot-1.1.4/Makefile的修改

a、仔细比对两个Makefile,u-boot-s中申明的变量,只要不影响原来的u-boot-1.1.4都可以申明,uboot-s中与uboot-1.1.4中不同但是等价的写法,都直接采用u-boot-1.1.4中原来的写法,添加内容或修改内容都不能妨碍原来的代码。

b、添加单板_config的目标文件。

c、同时注意添加board下的单板文件夹时,对应的u-boot-1.1.4/Makefile中如下语句:

LIBS += $(shell if [ -f board/$(VENDOR)/common/Makefile ]; then echo \
 "board/$(VENDOR)/common/lib$(VENDOR).a"; fi)
LIBS += board/$(BOARDDIR)/lib$(BOARD).a

比如:可能我需要在board下添加如下文件夹board/$(VENDOR)/common和board/$(VENDOR)/$(BOARD)两个文件夹,由以上两句指定就能顺利编译进u-boot。

d、$(BOARDDIR)由u-boot-1.1.4/config.mk中如下语句指定:

ifdef VENDOR
BOARDDIR = $(VENDOR)/$(BOARD)
else
BOARDDIR = $(BOARD)
endif

3、添加board/$(VENDOR)/common和board/$(VENDOR)/$(BOARD)两个文件夹

4、添加include/asm-arm/arch-SOC/头文件目录

5、添加include/configs/单板.h文件

因为这个文件就是uboot的配置文件,非常关键,所以对每一行都要注意此行需要指定的内容,在uboot中是否也是这个写法,因为uboot不同的版本写法一样,所以一定要根据u-boot-1.1.4目标代码来修改。

6、其余根据gcc的提示来包含文件或者修改源码。

若进入start_armboot()函数,报很多函数找不到,那些函数基本上都是接口驱动函数提供的,注意将u-boot-s的相应的接口驱动添加进去,uboot顺利编译通过。

相关内容