• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 交叉編譯場景分析(arm-linux)(一)

    交叉編譯場景分析(arm-linux)(一)

    ——
    作者: 時間:2007-04-17 來源: 收藏
    1.         基本知識

    在linux下,絕大部分的軟件包都是用autoconf配置的。除此之外,比較有名的就是X11的imake配置方式,imake實際上有點過時了,用起來很不方便,所以xfree86已經計劃向autoconf移植了。還有極少的直接使用Makefile編譯,通過環境變量或者不同的Makefile配置,當然這只適用于簡單的軟件包。

     

    Autoconf是一個非常有用的配置工具,原理有點復雜,全面了解它要花不少時間,但使用很方便。這里簡單介紹一下autoconf交叉編譯的基本知識。

     

    下載軟件包無非兩種方式,一種是直接從cvs里取最新版本,另一種是取發布的穩定版本。除非你想測試最新版本,否則后者是比較安全的方式。但有的軟件包不提供發布的版本,這時就只能退而求其次了-使用cvs版本了。

     

    編譯cvs版本有一點不同,cvs版本通常不帶configure腳本的,自己要重新產生configure腳本。當然這并不困難,多數開發人員都會在自己的軟件包里,放上一個autogen.sh或者bootstartup之類的腳本。利用這個腳本可以自動產生configure腳本。下面是一個autogen.sh腳本示例,若軟件包里沒有提供這樣的文件,可以仿照寫一個:

     

    #!/bin/sh

    # $Id: autogen.sh,v 1.3 2005/02/26 01:47:22 kergoth Exp $

     

    autoreconf -f -i -I `pwd`/m4

    exit $?

     

    echo -n "Libtoolize..."

    libtoolize --force --copy

    echo "Done."

    echo -n "Aclocal..."

    aclocal

    echo "Done."

    echo -n "Autoheader..."

    autoheader

    echo "Done."

    echo -n "Automake..."

    automake --add-missing --copy

    echo "Done."

    echo -n "Autoconf..."

    autoconf

    echo "Done."

    #./configure $*

    echo "Now you can do ./configure, make, make install."

     

    正式發布的軟件包里,已經有做好的configure腳本了。接下來我們要做的就是利用configure進行配置。對于交叉編譯來說,最重要的配置選項有以下幾個:

     

    --host:指定目標機的平臺類型。一般格式為CPU類型-操作系統名稱。比如,目標機的CPU為arm,操作系統為linux,可以這樣寫--host=arm-linux。

    --prefix:這是安裝路徑的前綴,即編譯結果放置的位置。默認值是/usr或者/usr/local,交叉編譯時不能使用默認值,否則它會覆蓋你本機的文件,所以要指定一個路徑。比如,可以指定為--prefix=/work/cross/rootfs/usr。

     

    配置完成后,運行make編譯,運行make install安裝。

     

    (pkg-config也是一個非常重要的工具,關于pkg-config的使用,可以參考筆者另外一篇文章,這里不再多說。)

     

    2.         文檔慣例及隱含前提:

     

    交叉名稱:arm-linux-gcc

    交叉版本:3.4.3

    目標操作系統版本:2.6.9

    默認依賴關系:依賴glibc

     

    隱含環境變量:

    WORK_DIR:工作目錄,設置為/work/cross

    ROOTFS_DIR:編譯結果根目錄,設置為$WORK_DIR/rootfs

    ARCH:目標平臺的體系架構,設置為arm

     

    建立一個腳本用于設置變量和建立必要的目錄,在編譯前,先運行. corss.env。 其內容如下:

     

    cross.env

    export WORK_DIR=/work/cross

    export ROOTFS_DIR=$WORK_DIR/rootfs

    export ARCH=arm

    export PKG_CONFIG_PATH=$ROOTFS_DIR/usr/local/lib/pkgconfig:$ROOTFS_DIR/usr/lib/pkgconfig:$ROOTFS_DIR/usr/X11R6/lib/pkgconfig

     

    if [ ! -e "$ROOTFS_DIR/usr/local/include" ]; then mkdir -p $ROOTFS_DIR/usr/local/include;fi;

    if [ ! -e "$ROOTFS_DIR/usr/local/lib" ]; then mkdir -p $ROOTFS_DIR/usr/local/lib; fi;

    if [ ! -e "$ROOTFS_DIR/usr/local/etc" ]; then mkdir -p $ROOTFS_DIR/usr/local/etc; fi;

    if [ ! -e "$ROOTFS_DIR/usr/local/bin" ]; then mkdir -p $ROOTFS_DIR/usr/local/bin; fi;

    if [ ! -e "$ROOTFS_DIR/usr/local/share" ]; then mkdir -p $ROOTFS_DIR/usr/local/share; fi;

    if [ ! -e "$ROOTFS_DIR/usr/local/man" ]; then mkdir -p $ROOTFS_DIR/usr/local/man; fi;

     

    if [ ! -e "$ROOTFS_DIR/usr/include" ]; then mkdir -p $ROOTFS_DIR/usr/include; fi;

    if [ ! -e "$ROOTFS_DIR/usr/lib" ]; then mkdir -p $ROOTFS_DIR/usr/lib; fi;

    if [ ! -e "$ROOTFS_DIR/usr/etc" ]; then mkdir -p $ROOTFS_DIR/usr/etc; fi;

    if [ ! -e "$ROOTFS_DIR/usr/bin" ]; then mkdir -p $ROOTFS_DIR/usr/bin; fi;

    if [ ! -e "$ROOTFS_DIR/usr/share" ]; then mkdir -p $ROOTFS_DIR/usr/share; fi;

    if [ ! -e "$ROOTFS_DIR/usr/man" ]; then mkdir -p $ROOTFS_DIR/usr/man; fi;

     

    顏色字體含義

    顏色字體 表示錯誤信息。

    顏色字體 表示命令行腳本。

    顏色字體 表示文件內容。

     

    文檔格局: 

     
    基本信息:
    軟件名稱,功能簡述,下載地址,軟件版本,依賴關系,前置條件 

    2 過程分析

    構建過程中遇到的問題分析。

    3 構建處方

    通常是一個可用的Makefile,用它可以編譯這個模塊?;蛘咭恍﹑atch文件。



    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 大英县| 平舆县| 宝清县| 房产| 古交市| 临沧市| 嘉荫县| 山阳县| 金寨县| 阿克陶县| 成武县| 常州市| 庐江县| 建宁县| 马公市| 固原市| 东莞市| 镇康县| 龙里县| 泸水县| 卢氏县| 周宁县| 伊吾县| 黎城县| 江孜县| 鄯善县| 安徽省| 余姚市| 长葛市| 大埔县| 合水县| 白朗县| 桐柏县| 郯城县| 西丰县| 陵水| 南城县| 平凉市| 渭南市| 鄂托克旗| 得荣县|