开发板:A33,运行linux-3.4.39
主机:Ubuntu 14.04
----------------------------------------------
1. 进入uboot目录:~/A33-Vstar/dragonboard/brandy/u-boot-2011.09
编译涉及的重要文件:build.sh、Makefile
2. 编译
2.1 方式一,使用build.sh脚本
执行:sudo ./build.sh -p sun8iw5p1
出现以下错误:
1)make: INTERNAL: Exiting with 9 jobserver tokens available; should be 8!
解决:打开build.sh,将-j8去掉即可。
即将make -j8 $PLATFORM CROSS_COMPILE=arm-linux-gnueabi-
修改为make $PLATFORM CROSS_COMPILE=arm-linux-gnueabi-
2)dereferencing type-punned pointer will break strict-aliasing rules
原因:dereferencing type-punned pointer will break strict-aliasing rules警告信息跟优化选项-strict-aliasing 有关。当开启这个优化选项时,可能优化会导致源代码中部分语句缺失,而造成系统工作不正常,所以就所有的违反strict-aliasing rules原则的地方加了条这个警告信息,提醒读者检查这个地方的代码,看看是不是如果优化后会导致部分语句工作不正常。同时这个信息提示还有另外一个目的,两个不同类型的指针指向同一个地址时,极有可能会导致代码编写出错(比如犯大小端的错误,还有地址字节对齐的错误),所以这个警告信息还有这一层的目的。
解决:编译时make系统使用了错误的gcc编译器:/usr/bin/arm-linux-,必须要使用A33自带的gcc编译器,位于~/A33-Vstar/dragonboard/out/sun8iw5p1/dragonboard/common/buildroot/external-toolchain/bin/
-1. 先屏蔽 /usr/bin/下的gcc系列编译器,可将其移动到别的路径。
-2. 修改build.sh,将PATH修改为:
export PATH=$PATH:~/A33-Vstar/dragonboard/out/sun8iw5p1/dragonboard/common/buildroot/external-toolchain/bin/
即A33自带gcc编译器的存放路径。
注:通过在Makefile中添加CFLAGS = -fno-strict-aliasing -O0无效,依旧会出现此错误,所以只能采用换自带编译器的方法。
3)cp: cannot create regular file ‘../brandy/out_source’: No such file or directory
解决:去掉build.sh最后一行:cp -rf u-boot.bin ../brandy/out_source
依次解决上述错误后,编译成功:
2.2 方式二,直接执行make
$ sudo make distclean
$ sudo make sun8iw51
注:应该不会出现方式1的三个错误,并且方式二使用的是~/A33-Vstar/dragonboard/brandy/gcc-linaro/bin/目录下的gcc编译器
3. 使用u-boot
编译成功后,生成的u-boot.bin和u-boot-sun8iw5p1.bin文件存放在当前目录。且u-boot-sun8iw5p1.bin会自动copy到:~/A33-Vstar/dragonboard/tools/pack/chips/sun8iw5p1/bin/
这时回到dragonboard/目录下,直接运行sudo ./build pack即可使用新生成的u-boot。