首页 / 操作系统 / Linux / 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 /optexport 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)
endif3、添加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顺利编译通过。