为了在制作的mpc8360e处理器板上移植U-Boot,linux kernel,需要交叉编译环境,将使用过的方法总结如下,并简单给出中间曾经遇到的问题.
开发主机PC用过redhat9及Gentoo linux. 嵌入式板采用mpc8360e处理器,属于mpc83xx系列. MPC8349E-mITX板处理器mpc8349e亦属mpc83xx系列。
A: 交叉编译环境设置的四种简单方法:
A_1. 安装ELDK (Embedded Linux Development Kit)
说明主页:
说明: 操作主机为Gentoo linux. 在Gentoo中安装ELDK,必须安装rpm命令和相应的库.(emerge -av app-arch/rpm)
A_1.1 下载ELDK镜像ISO文件
# lftp ## 浏览下载ppc-2008-04-01_freescale.iso
lftp> cd 4.2/ppc-linux-x86/iso
lftp> get ppc-2008-04-01_freescale.iso
lftp> quit
A_1.2 挂载镜像文件
# mount -o loop -t iso9660 ppc-2008-04-01_freescale.iso /mnt/cdrom
! 浏览器打开其中的README.html,阅读说明
A_1.3 以下为安装步骤
1.3.1 创建安装目录
# mkdir -p /opt/eldk
A_1.3.2 进入ISO镜像挂载目录
# cd /mnt/cdrom
A_1.3.3 根据说明(README.html)选择cpu_familly为ppc_6xx(支持mpc83xx),指定安装目录进行安装
# ./install -d /opt/eldk ppc_6xx
A_1.3.4 验证安装结果
$ /opt/eldk/usr/bin/ppc_6xx-gcc -v
A_1.4 安装成功后修改环境变量(或修改/etc/bash/bashrc)
# export CROSS_COMPILE=ppc_6xx-
# export PATH=$PATH:/opt/eldk/usr/bin:/opt/eldk/bin
A_1.5 测试编译
$ powerpc-linux-gcc -o hello hello.c
A_1.6 更新修改ELDK
由于ELDK制作滞后与U-Boot和内核kernel源码。根据需要可以删除或更新ELDK中自带的源码.
# cd /opt/eldk/ppc_6xx/usr/src
# rm -rf linux-2.6.24 linux-2.6.24-xenomai u-boot-1.3.1 linux
# ftp_get_kernel linux-2.6.30.5.tar.bz2
# tar -xjvf linux-2.6.30.5.tar.bz2
# ln -s linux-2.6.30.5 linux
A_3. 直接复制现有的ELDK环境
Gentoo主机A中如方法1中已经安装了ELDK4.2,将其现成的ELDK环境复制到Gentoo主机B中。
主机A中打包ELDK环境,上传至主机B中,如下操作:
[A]# cd /opt/
[A]# tar -czvf eldk.tar.gz eldk
[A]# ftp ip_addr_of_B
[A]> put eldk.tar.gz
主机B中安装A的目录和环境解包ELDK环境,修改环境变量,如下操作:
[B]# cd /opt/
[B]# mv ftp_dir/eldk.tar.gz /opt/
[B]# tar -xzvf eldk.tar.gz
[B]# export CROSS_COMPILE=ppc_6xx-
[B]# export PATH=$PATH:/opt/eldk/usr/bin:/opt/eldk/bin
A_4. 直接复制现有的ltib交叉编译环境
主机A(redhat9)中如方法2已经安装了ltib,将其现成的交叉编译环境复制到主机B(Gentoo)中。
主机A中如下操作:
[A]# cd /opt/freescale/
[A]# ls -l
[A]# tar -czvf powerpc-linux-gcc.tar.gz usr
[A]# ftp_put_B powerpc-linux-gcc.tar.gz
在主机B中如下操作:
[B]# mkdir -m 755 -p /opt/freescale/
[B]# cd /opt/freescale/
[B]# cp powerpc-linux-gcc.tar.gz .
[B]# tar -xzvf powerpc-linux-gcc.tar.gz
[B]# vim /etc/bash/bashrc
#export PATH=/opt/freescale/usr/local/gcc-3.4.3-uClibc-0.9.28-1/powerpc-linux/bin:$PATH
export PATH=/opt/freescale/usr/local/gcc-4.0.2-glibc-2.3.6-nptl-3/powerpc-linux/bin:$PATH
[B]# source /etc/bash/bashrc
[B]# powerpc-linux-gcc hello.c -o hello
测试交叉编译的程序,板子上操作:
mpc8349itx# ftpget -u liuby -p starby 59.64.155.122 hello hello
注意到方法4中修改环境时export语句的不同,两条语句(一个被注释,不起作用)对应不同交叉编译链(他们使用不同的库)。
下面给出嵌入式板中库与交叉编译链库的差异导致的问题:
说明: 嵌入式板mpc8349itx文件系统由ltib编译文件系统时选择了gcc-4.0.2-glibc-2.3.6-nptl-3生成.
mpc8349itx # ./a.out ## 使用uClibc的库(对应export gcc-3.4.3-uClibc-0.9.28-1)
-sh: ./a.out: not found
mpc8349itx # ftpget -u liuby -p starby 59.64.155.199 a.out a.out
mpc8349itx # ./a.out ## 使用uClibc的库,静态编译 -static
hello world
Segmentation fault
mpc8349itx # ftpget -u liuby -p starby 59.64.155.199 a.out a.out
mpc8349itx # ./a.out ## 使用glibc的库,正常。(对应 gcc-4.0.2-glibc-2.3.6-nptl-3)
hello world
以上说明交叉编译链可以正常工作
B. 使用交叉编译编译U-Boot, linux kernel:
B_1. U-Boot下载及编译:
B_1.1 下载U-Boot
网页浏览 点击snapshot下载。(注: 根据需要选择下载,一般可以浏览 点击snapshot下载最新的源码)
或者使用Git clone下载
B_1.2 解压U-Boot源码
$ tar -xzvf u-boot-mpc83xx-HEAD.tar.gz
B_1.3 编译U-Boot(mpc8349itx板)
$ cd u-boot-mpc83xx
$ make CROSS_COMPILE=ppc_6xx- mrproper
$ make CROSS_COMPILE=ppc_6xx- MPC8349ITX_config
$ make CROSS_COMPILE=ppc_6xx-
B_1.4 下载u-boot.bin
$ cp u-boot.bin ~/tftproot/
B_2. kernel下载及编译:
B_2.1 下载最新的stable的内核源码
网页浏览 选择Latest Stable Kernel内核,点击Download图标下载。
或者使用Git clone下载
B_2.2 解压内核源码
$ tar -xjvf linux-2.6.30.5.tar.bz2
B_2.3 编译kernel(mpc8349itx板)
$ cd linux-2.6.30.5
$ make distclean
$ make mrproper 保持源码`纯净'
$ make ARCH=powerpc CROSS_COMPILE=ppc_6xx- oldconfig 使用当前目录下的.config做默认配置文件 [*]
$ make ARCH=powerpc CROSS_COMPILE=ppc_6xx- mpc834x_itx_defconfig 使用arch/powerpc/configs/目录下的*_defconfig文件作默认配置文件 [*]
$ make ARCH=powerpc CROSS_COMPILE=ppc_6xx- menuconfig 自己手动配置 [*]
! 说明: [*]表示的三个操作任选其一[oldconfig/mpc834x_itx_defconfig/menuconfig选其一]
$ make ARCH=powerpc CROSS_COMPILE=ppc_6xx- uImage 真正编译内核
$ make ARCH=powerpc CROSS_COMPILE=ppc_6xx- modules 编译模块
$ make ARCH=powerpc CROSS_COMPILE=ppc_6xx- INSTALL_MOD_PATH=/opt/eldk/ppc_6xx/ modules_install 模块目录
B_2.4 下载uImage
$ cp arch/powerpc/boot/uImage ~/tftproot/
注: 上面四种方法提供的交叉编译链,方法A_4编译内核会报错.
阅读(6894) | 评论(0) | 转发(0) |