Chinaunix首页 | 论坛 | 博客
  • 博客访问: 478055
  • 博文数量: 174
  • 博客积分: 2502
  • 博客等级: 少校
  • 技术积分: 1923
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-28 09:47
文章分类

全部博文(174)

文章存档

2011年(8)

2010年(16)

2009年(68)

2008年(82)

我的朋友

分类: 嵌入式

2009-09-05 21:11:44

为了在制作的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_2. 安装ltib
    详见freescale LTIB使用总结使用总结(略)
 

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编译内核会报错.
阅读(5320) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~