编译u-boot-2015-10
u-boot    2017-02-19 11:00:32    85    0    0
tianwaifeixian   u-boot

交叉编译工具:

友善之臂的 arm-linux-gcc-4.5.1

在顶层Makefile文件里面添加

ARCH=arm
CROSS_COMPILE ?= arm-linux-
cd u-boot-2015.10/
 vim Makefile
 make smdk2410_config
 make

这里测试通过 不过编译出来的文件是不能用的

 

==============================================

昨天搞了一天不知道为嘛添加单板后报错

然后各种的找原因~~~~~~~

 

>make smdk2440_config
	make[1]: *** No rule to make target 'board/samsung/smdk2440/smdk2440.o', needed by 'board/samsung/smdk2440/built-in.o'。 停止。
	Makefile:1196: recipe for target 'board/samsung/smdk2440' failed
	make: *** [board/samsung/smdk2440] Error 2

 

报出这种错误一般就是文件名字还有路径什么的不匹配

找出board/samsung/smdk2440/相关的文件依赖还有头文件定义


最初我还以为是Makefiel写的脚本原因 各种的找 找 找

找了一天 看了一些关于u-boot的Makefile编译流程和分析 

最后结果就集中到了脚本生成的相关文件上

在脚本目录里面找来找去也看不出毛病在那儿~

===========================================这里是部分寻找过程

>grep "built-in.o" -nR > built-in.txt

		board/samsung/smdk2410/.built-in.o.cmd:1:cmd_board/samsung/smdk2410/built-in.o :=  arm-linux-ld     -r -o 
		board/samsung/smdk2440/.built-in.o.cmd:1:cmd_board/samsung/smdk2410/built-in.o :=  arm-linux-ld     -r -o 

这里很明显 在两个不同的目录下脚本自动生成了相同名称的目录

到这里Makefiel继续执行.....他会依赖一些自动化脚本自动执行

然后脚本找不到相关链接文件了 然后就遇到了上面的错误了。。。。

目录:scripts/Kbuile.include 

 281-191行:

# (1) PHONY targets are always build	
# (2) No target, so we better build it
# (3) Prerequisite is newer than target
# (4) The command line stored in the file named dir/.target.cmd
#     differed from actual command line. This happens when compiler
#     options changes
# (5) No dir/.target.cmd file (used to store command line)
# (6) No dir/.target.cmd file and target not listed in $(targets)
#     This is a good hint that there is a bug in the kbuild file

============================================部分需找过成到这里结束

只好论坛发帖问了 论坛回复说我的相关文件和目录没有添加 我看了一下 都添加了

然后突然发现我在smdk2440目录里面的smdk2440.c文件名字写错了 我去~~~


>ls -l board/samsung/smdk2440/
built-in.o            lowlevel_init.o       MAINTAINERS           smkd2440.c  这里名字写错了!!!
.built-in.o.cmd       .lowlevel_init.o.cmd  Makefile              smkd2440.c~
Kconfig               lowlevel_init.S       smdk2410.o            
Kconfig~              lowlevel_init.S~      .smdk2410.o.cmd     

 改过来之后继续编译 。。。。。。

 

>make smdk2440_defconfig
#
# configuration written to .config
#
>make all

	LD      u-boot
	arm-linux-ld:u-boot.lds:1: ignoring invalid character `#' in expression
	arm-linux-ld:u-boot.lds:1: syntax error
	Makefile:1178: recipe for target 'u-boot' failed
	make: *** [u-boot] Error 1

这个报错的要点是 arm-linux-ld:u-boot.lds

因为改了/include/configs/smdk2440.h头文件里面几个宏定义

注释方法是//方式 结果不行

// 改成 /*  这里是内容   */

这不就是linux内核的注释标准吗。。。。。。。

然后

 

>make distclean 
>make smdk2440_defconfig
>make all
	u-boot contains unexpected relocations: 
	Makefile:1360: recipe for target 'checkarmreloc' failed
	make: *** [checkarmreloc] Error 1
	/var/smdk2440/u-boot-2015.10

这里的报错是因为 checkarmreloc

这个东西在arch/arm/config.mk

注释掉

#ALL-y += checkarmreloc

继续编译通过了~​

LD u-boot
 OBJCOPY u-boot.srec
 OBJCOPY u-boot.bin
 CFG u-boot.cfg
/var/smdk2440/u-boot-2015.10​
/var/smdk2440/u-boot-2015.10
五 2月 24|15:08|0:>ls -l u-boot.bin
-rwxr-xr-x 1 xuan users 479624 2月  24 15:08 u-boot.bin

四百多kb。。。。好大~

参考:​

http://blog.csdn.net/sinat_24088685/article/details/52164489
http://blog.csdn.net/sinat_24088685/article/details/52177808
http://blog.csdn.net/ooonebook/article/details/52949584
http://m.blog.csdn.net/article/details?id=52766156
http://m.doc00.com/doc/100100hb0
http://www.itdadao.com/articles/c15a377545p0.html
http://www.wowotech.net/u-boot/375.html

 

 

 

 

上一篇: 为2440配置4.4.1内核

下一篇: 2017初探期市

85 人读过
立即登录, 发表评论.
没有帐号? 立即注册
0 条评论
文档导航