您的位置:首页 > 其它

u-boot2010.03 移植篇(一) 建立编译目标

2012-09-26 16:22 411 查看
参考 /article/1355240.html

u-boot2010.03 Makefile分析

/article/1355243.html

u-boot2010.03 配置编译目标分析

/article/1355244.html

移植篇(一)-----修改Makefile,生成编译目标---S3C6410

----------------------------------------------------------

使用环境

PC: Centos5.4

kernel: 3.0.1

corss: arm-linux-gcc 4.4.1

arm: s3c6410

uboot: uboot-2010-03

----------------------------------------------------------

开始教程之前.你需要下载源码,解压....此处略过千万行~~源码为uboot2010.03这个..别整错了.错了也没事,都差不多~

这里,我们直接打开Makefile,找到smdk6400_config,根据6400 添加6410 的目标......如下:

[cpp]
view plaincopyprint?

######################################################################### ## ARM1176 Systems ######################################################################### smdk6400_noUSB_config \ smdk6400_config : unconfig @mkdir -p $(obj)include $(obj)board/samsung/smdk6400 @mkdir -p $(obj)nand_spl/board/samsung/smdk6400 @echo "#define CONFIG_NAND_U_BOOT" > $(obj)include/config.h @if [ -z "$(findstring smdk6400_noUSB_config,$@)" ]; then \ echo "RAM_TEXT = 0x57e00000" >> $(obj)board/samsung/smdk6400/config.tmp;\ $(MKCONFIG) $(@:_config=) arm arm1176 smdk6400 samsung s3c64xx; \ else \ echo "RAM_TEXT = 0xc7e00000" >> $(obj)board/samsung/smdk6400/config.tmp;\ $(MKCONFIG) $(@:_noUSB_config=) arm arm1176 smdk6400 samsung s3c64xx; \ fi @echo "CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk smdk6410_noUSB_config \ smdk6410_config : unconfig @mkdir -p $(obj)include $(obj)board/samsung/smdk6410 @mkdir -p $(obj)nand_spl/board/samsung/smdk6410 @echo "#define CONFIG_NAND_U_BOOT" > $(obj)include/config.h @if [ -z "$(findstring smdk6400_noUSB_config,$@)" ]; then \ echo "RAM_TEXT = 0x57e00000" >> $(obj)board/samsung/smdk6410/config.tmp;\ $(MKCONFIG) $(@:_config=) arm arm1176 smdk6410 samsung s3c64xx; \ else \ echo "RAM_TEXT = 0xc7e00000" >> $(obj)board/samsung/smdk6410/config.tmp;\ $(MKCONFIG) $(@:_noUSB_config=) arm arm1176 smdk6410 samsung s3c64xx; \ fi @echo "CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk

#########################################################################
## ARM1176 Systems
#########################################################################
smdk6400_noUSB_config \
smdk6400_config : unconfig
@mkdir -p $(obj)include $(obj)board/samsung/smdk6400
@mkdir -p $(obj)nand_spl/board/samsung/smdk6400
@echo "#define CONFIG_NAND_U_BOOT" > $(obj)include/config.h
@if [ -z "$(findstring smdk6400_noUSB_config,$@)" ]; then \
echo "RAM_TEXT = 0x57e00000" >> $(obj)board/samsung/smdk6400/config.tmp;\
$(MKCONFIG) $(@:_config=) arm arm1176 smdk6400 samsung s3c64xx; \
else \
echo "RAM_TEXT = 0xc7e00000" >> $(obj)board/samsung/smdk6400/config.tmp;\
$(MKCONFIG) $(@:_noUSB_config=) arm arm1176 smdk6400 samsung s3c64xx; \
fi
@echo "CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk

smdk6410_noUSB_config \
smdk6410_config : unconfig
@mkdir -p $(obj)include $(obj)board/samsung/smdk6410
@mkdir -p $(obj)nand_spl/board/samsung/smdk6410
@echo "#define CONFIG_NAND_U_BOOT" > $(obj)include/config.h
@if [ -z "$(findstring smdk6400_noUSB_config,$@)" ]; then \
echo "RAM_TEXT = 0x57e00000" >> $(obj)board/samsung/smdk6410/config.tmp;\
$(MKCONFIG) $(@:_config=) arm arm1176 smdk6410 samsung s3c64xx; \
else \
echo "RAM_TEXT = 0xc7e00000" >> $(obj)board/samsung/smdk6410/config.tmp;\
$(MKCONFIG) $(@:_noUSB_config=) arm arm1176 smdk6410 samsung s3c64xx; \
fi
@echo "CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk

接着修改交叉编译器:

[cpp]
view plaincopyprint?

# set default to nothing for native builds ifeq ($(HOSTARCH),$(ARCH)) CROSS_COMPILE ?= arm-linux- endif

# set default to nothing for native builds
ifeq ($(HOSTARCH),$(ARCH))
CROSS_COMPILE ?= arm-linux-
endif

下面先编译试下...肯定很多错误喔~~~

好了,那我这里就犯个傻.来Make下,首先你得Make
smdk6410_config


我这第一个错误是如下:

fatal error: configs/smdk6410.h: No such file or directory

为啥呢?为什么会出现这个文件没有呢?到底哪个文件里面居然能未卜先知,知道我们要添加smdk6410.h呢?

我自问自答吧...你可以看分析篇中,mkconfig中最后有写入config.h中的一句话,有这么一句#include
<configs/$1.h>


$1 没错,就是我们板级的名字smdk6410 这样uboot就有了未卜先知的能力...具体查看分析篇

好.我们复制smdk6400.h

cp include/configs/smdk6400.h include/configs/smdk6410.h


好,我们继续make,接着是我的第二个错误.没有smdk6410这个目录...哎~~这里就不分析为什么会冒出来smdk6410这个目录了..请看分析篇

make -C board/samsung/smdk6410/

make[1]: 正在进入目录 `/home/LinuxProject/u-boot/u-boot-2010.03/board/samsung/smdk6410'

make[1]: *** 没有指明目标并且找不到 makefile。 停止。

make[1]:正在离开目录 `/home/LinuxProject/u-boot/u-boot-2010.03/board/samsung/smdk6410'

make: *** [board/samsung/smdk6410/libsmdk6410.a] 错误 2


我们依旧复制smdk6400的.不过得稍微修改下里面的文件喔~~把smdk6400 都改成smdk6410

cd board/samsung/

cp smdk6400 smdk6410 -rf

cd smdk6410/


修改smdk6400.csmdk6410.c

打开smdk6410.c 修改头文件#include
<asm/arch/s3c6400.h>
#include <asm/arch/s3c6410.h>

没错,这个头文件是没有的,一会自己复制下....依旧是复制s3c6400.h

cp include/asm-arm/arch-s3c64xx/s3c6400.h include/asm-arm/arch-s3c64xx/s3c6410.h


这里为什么复制的路径不是asm/arch请看分析篇,在make smdk6410_config的时候.会根据参数建立软连接,最后就是这个目录

该目录下的其他文件也得看看有没有这个头文件.需要修改呦~~~

好了.最后剩下Makefile需要修改了.在编译错误中说,libsmdk6410.a 这个没有...对滴..需要把Makefile中的smdk6400.o 改成smkd6410.o

因为我们的源文件名字已经改了...

咱们继续编译Make咯~~~

哎呀妈呀..又是错...这又是啥呢?没有cpu_init.o库?

我们直接进这个目录下一看究竟

arm-linux-ld: cannot find cpu/arm1176/s3c64xx/cpu_init.o

直接打开Makefile发现啥?COBJS-$(CONFIG_S3C6400) += cpu_init.o speed.o

居然跟我们玩条件编译喔~~~但是不对啊...CONFIG_S3C6400是定义的啊,,在include/configs/smdk6410.h 中是有的.那为什么没有编译呢?

哈哈~~其实只要重新选择板级make smdk6410_config 重新生成config.mk

(在下一篇修改/include/configs/smdk6410.h 的时候,

最后一步说要把所有的6400改为6410,其实不然,在下面这一步就不能改,否则会出现上面那个cpu_init.o
not find 的现象,而且用上面的方法是行不通的。

Smdk6410.h

#define CONFIG_S3C6400

)

继续编译....还是有错~~~疯了没?别着急,快了哈~~~

make -C nand_spl/board/samsung/smdk6410 all

make[1]: 正在进入目录 `/home/LinuxProject/u-boot/u-boot-2010.03/nand_spl/board/samsung/smdk6410'

make[1]: *** 没有规则可以创建目标“all”。 停止。

make[1]:正在离开目录 `/home/LinuxProject/u-boot/u-boot-2010.03/nand_spl/board/samsung/smdk6410'

make: *** [nand_spl] 错误 2


这个问题简单了吧....当然是没有这个目录了...咱们还是去复制吧

cp nand_spl/board/samsung/smdk6400 nand_spl/board/samsung/smdk6410 -rf

cd nand_spl/board/samsung/smdk6410/


继续修改头文件,还有Makefile 还有文件名字对吧...没错...聪明~~~~

进去一看...傻了?没什么好修改的嘛....那就不改呗~~~继续编译吧...

天哪~~好了....编译出了uboot.bin

开心吧~~~今天教程就到这了...我们已经达成目的了.到底怎么添加我们需要的目标,以及目标的编译,需要修改哪些文件,需要添加哪些目录..

我这里总结下:

1:修改Makefile

->交叉编译器

->添加smdk6410_config目标

2:添加configs/smdk6410.h头文件

3:添加board/samsung/smdk6410 目录,并修改该目录内文件,以及Makefile

4:添加include/asm-arm/arch-s3c64xx/s3c6410.h头文件

5:添加nand_spl/board/samsung/smdk6410目录
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: