第四部分 测试交叉编译器
4.1 编译一个小程序来验证我们的编译器
示意图如下:
4.2 编译我们基于PowerPC的linux-2.6.38内核
本篇博文中我用的是Linux-2.6.38内核头文件。下面我们将用上面搭建的这个交叉编译器来编译Linux-2.6.38内核。
因为在编译内核zImage镜像时会用到mkimage工具,所以我们先要在我们的Fedora
14系统中安装这个工具uboot-tools工具。
使用命令如下:
$yum search uboot-tools
#yum intall
uboot-tools
备注:Fedora 14安装uboot-tools时用到root权限,O(∩_∩)O~
另外在Fedora 14下编译内核会用到ncurses-devel工具,可以用:
$sudo yum install ncurses-devel
进行安装
备注:如果你的Fedora
14没有给当前用户的sudo命令配置root权限的话你需要切换到root权限进行安装(即#yum install ncurses-devel
),而我的tom用户下是给sudo命题配置了root权限的,所以可以用sudo暂时获取root权限安装ncurses-devel,O(∩_∩)O~
在编译内核之前,我们需要对linux-2.6.38内核的几个Makefile文件进行一些处理:
第一件:删除linux-2.6.38/arch/powerpc/kernel/Makefile文件中的第7行中的-Werror:
subdir-ccflags-$(CONFIG_PPC_WERROR) :=
-Werror
改为:
subdir-ccflags-$(CONFIG_PPC_WERROR)
:=
第二件:删除linux-2.6.38/arch/powerpc/mm/Makefile文件中的第5行中的-Werror:
subdir-ccflags-$(CONFIG_PPC_WERROR)
:= -Werror
改为:
subdir-ccflags-$(CONFIG_PPC_WERROR)
:=
修改的原因:是这两处的配置文件,把gcc的warnings当做error来处理,当在这两个目录中的代码出现warings时,powerpc-tom-linux-gnu-gcc就会终止编译,所以要把这两个-Werror选项关闭!
执行命令:
$cd
$PRJROOT/kernel/linux-2.6.38
$cp
arch/powerpc/configs/86xx/sbc8641d_defconfig ./.config
$make ARCH=powerpc
CROSS_COMPILE=powerpc-tom-linux-gnu- menuconfig
$make ARCH=powerpc
CROSS_COMPILE=powerpc-tom-linux-gnu- uImage
执行完成之后的示意图:
第五部分 总结
至此,我们完整地再现了基于PowerPC平台的交叉工具链的搭建过程,整个过程花了我六个晚上的时间,再加上对博文的整理也花去了我3个晚上的时间,通过发现错误,解决错误,受益匪浅。
但是到现在为止我们仍然不能确定上面搭建的交叉编译器可以正常工作,只有等到我们把编译的linux
kernel加上Rootfs能在我们的PowerPC目标机上跑起来。那到那时,我们才可以拍拍胸膛负责任的说:这个新建的这个编译器没有问题,毕竟实践是检验真理的唯一标准!!
现在我可以负责的告诉大家,我们用这个交叉编译器编译的基于MPC8641D的linux-2.6.38内核可以在飞思卡尔的MPC8641D开发版上顺利的跑起来,
示意图如下:
另外我在整个GNU交叉编译器的搭建过程中,除了安装uboot-tools使用root权限,其余的安装过程都是在普通用户tom的权限下完成的。我们不要滥用root权限(我在初学Linux时就犯了这个错误),因为用root权限很容易在搭建的过程中损换Fedora
14系统中自带的gcc编译器的相关文件,导致我们系统的gcc编译器不能正常工作!!
第六部分 参考资料
Karim Yaghmour.Building Embedded Linux
Systems.Chapter 4. Development Tools
http://cross-/view/CLFS-1.2.0/ppc/
致谢:
感谢师兄Xin Huang的帮助;
感谢老大Chanjuan Li的指导,O(∩_∩)O~