1. gzyueqian
      13352868059
      首頁 > 新聞中心 > > 正文

      制作mipsel-linux交叉編譯工具

      更新時間: 2008-04-02 09:31:25來源: 粵嵌教育瀏覽量:762

      1 前言
        在嵌入式開發中,MIPs處理器是常見的幾中處理器類型之一。另一方面,Linux是開源軟件,應用范圍很廣, 因其對包括MIPS在內的多種嵌入式處理器架構的良好支持. 因此在嵌入式應用也.也大量采用Linux。在嵌入式開發過程中,很容易獲得運行于x86架構PC上的Linux,并可使用其上的豐富的工具。gcc是Linux中一個很的C編譯器,在編譯Linux核心時,就要用到gcc。在PC機的Linux系統中用自身的gcc重新編譯Linux核心和其它應用是容易。而嵌入式應用是要求在MIPs架構的平臺上布署Linux系統和其上的應用,但在開發的過程中.獲得運行于MIPS架構的Linux系統的開發環境幾乎是不可能的。
       因此,就提出了交叉編譯(cross-compile)的概念.也就是說要在運行于x86架構PC的Linux系統中編譯出能在MIPS架構的平臺上運行的Linux核心和其上的應用。這樣,就可以用PC較強的運算能力,和其Linux系統中的工具完成軟件的編寫、編譯甚至是調試。在下面的章節中.將介紹交叉編譯工具鏈的一般制作過程和mipsel-linux的具體制作步驟。

      2 構造系統介紹
        這是一臺運行Linux的PC,因整個過程要完成大量的編譯工作,因此推薦使用有較高運算能力的x86兼容PC.如Intel的P4系統。同時,編譯過程會需要1G左右的硬盤空間。
        在這個系統上裝好RedHat Linux和gcc,以下是實驗所用的構造系統的版本信息.供參考:
      $uname -a
      Linux www.biforee 2.4.20-8 #1 Thu Mar 13 17:54:28 EST
      2003 i686 i686 i386 GNU/Lnux
      $gcc -v
      Reading specs from /usr/lib/gcc -lib/i386 -redhat -linux/3.2.2/
      specs
      Configured with: ../configure --prefix=/usr --mandir=/usr/share/
      man --infodir=/usr/share/info --enable -shared --enable -threads=
      posix --disable -checking --with -system -zlib --enable -_cxa_a-
      texit --host=i386-redhat-linux
      Thread model:posix
      gcc version 3.2.2 20030222 (Red Hat Linux 3.2.2-5)
       可以看出,所用的RedHat Linux版本是2.4.20,gcc的版本是3.2.2。

      3 構造中會用到的源代碼準備
        在構造過程中,需要準備以下源碼供使用:
        (1)binutils-2.13:下載地址是ftp://ftp.gnu.org/gnu/binutils/binutils-2.13.tar.gz
        (2)gcc-3-2:下載地址是ftp://ftp.gnu.org/gnu/gcc/gcc-3.2.tar.gz
        (3)glibc-2.2.5:下載地址是ftp://ftp.gnu.org/gnu/glibc/glibc-2.2.5.tar.gz
        (4)glibc-linuxthreads-2.2.5:這是個glibc的補丁下載地址是
      ftp://ftp.gnu.org/gnu/glibc/glibc-linuxthreads-2.2.5.tar.gz
        (5)glibc-2.2.5-mips-build-gmon.diff:這是另一個glibc的補丁
      下載地址是http://www.ltc.com/~brad/mips/glibc-2.2.5-mips-build-gmon.diff
       (6)linux-2.4.tar.gz:linux核的源碼包.可從網站http://www.linux.org/上下載。用root用戶登到Linux系統中.建立工作目錄/home/crosstool/tmp.并將上述文件放到這個目錄中備用。

      4 Linux頭文件準備
        這些頭文件在編譯gcc時要用到,正確構造這些文件,很重要。
        a)將HOST的Linux的/usr/include拷貝過來
      cp -r /usr/include /home/crosstool/tmp/
        b)去除其中的兩個目錄
      rm -r -f /home/crosstool/tmp/include/asm
      rm -r -f /home/crosstool/tmp/include/linux
        c)解開linux源碼包
      cd/home/crosstool/tmp
      tar xvfz ../linux2.4.tar.gz
        d)按Target要求完成核心配置.主要是選擇正確的CPU類型和內核部件.使這個內核的配置涵蓋目標系統的要求。
      cd/home/crosstool/tmp/linux
      make clean
      make menuconfig
      ……
        . 參照有關Linux核心配置的說明完成正確的配置過程。
      make dep
        e)將配置好的核心的兩個目錄取出
      cp -dR include/linux/home/crosstool/tmp/include/
      cp -dR include/asm-mips /home/crosstool/tmp/include/asm
      至此,頭文件已準備好了,可用以下命令查看:
      ls /home/crosstool/tmp/include

      5 編譯binutils
        這里生成一些binary格式的處理工具,如mipsel-linux-ld、mipsel-linux-objdump等。
        (a)解壓縮,得到源代碼
      cd /home/crosstool/tmp
      tar xvfz ../binutils-2.13.tar.gz
        (b)完成配置和編譯。configure會在/home/crosstool/tmp/binutils-2.13/mipsel-linux/目錄下生成正確的Makefile;--prefix指出安裝binutils的目錄前綴,也是這些工具工作時的工作路徑前綴;--target指出這些工具服務的目標系統。
      cd /home/crosstool/tmp/binutils-2.1 3
      mkdir mipsel-linux
      cd mipsel-linux
      ../configure
      --prefix=/usr/locallcross-gcc/mipsel-linux
      --target=mipsel-linux
      make
      make install
       完成安裝后,在/usr/local/cross-gcc/mipsel-linux/bin目錄下得到一組工具.其中就有mipsel-linux-ld,執行/usr/local/cross-gcc/mipsel-linux/bin/mipsel-linux-ld -verbose,從輸出信息中可看到lib的位置指定SEARCH_DIR ("/usr/local/cross-gcc/mipsel-linux/mipsel-linux/lib");glibc產生的庫要放到這里。
       (c)輸出工作路徑,使得后繼的操作會找到該步驟建立的工具.命令如下:
      PATH =/usr/local/cross -gcc/mipsel -linux/bin: $PATH;export
      PATH

      6 編譯靜態gcc
        因為這時還沒有MIPS的glibc庫可以使用,只能編譯一個簡單的gcc,用這個gcc編譯出glibc后就可以再編譯一個完整的gcc了。glibc是個共享庫,而這時的gcc不能支持glibc,因此,這個gcc也叫“靜態gcc”,從另一個角度看,這時的gcc是個簡單的gcc,是為了生成后繼的完成的gcc而做的。因此,也被稱為“自舉gcc”。
      如果只是為了編譯Linux核心代碼,完成這個步驟就可以了。
        (a)解壓縮,得到源代碼。
      cd /home/crosstool/tmp
      tar xvfz ../gcc-3.2.tar.gz
        (b)完成配置和編譯。這時,建立目錄mipsel-linux-static來進行工作。而在下面的工作中,會在同一位置建立另一個目錄,用于完整版gcc的編譯;--prefix使用和上面步驟一樣的設置,可使工具成套安裝協同工作;--disable-shared表示不能使用glibc;--with -headers是重要的,它指出編譯時,要使用在之前準備好的頭文件
      cd gcc-3.2
      mkdir mipsel-linux-tatic
      cd mipsel-linux-static
      ../configure --target=mipsel-linux --enable-languages=c
      --prefix=/usr/local/cross-gcc/mipsel-linux
      --disable-shared
      --with-headers=/home/crosstool/tmp/include
        在configure過程中,可以看到輸出這樣的一條信息:
      Copying /home/crosstool/tmp/include to /usr/local/cross--gcc/mipsel-linux/mipsel-linux/sys-include
      表明.已將指定的頭文件/home/crosstool/tmp/include
        復制到目標位置/usr/local/cross-gcc/mipsel-linux/mipsel-linux/sys-include使用。這點是重要的,在后面的步驟中還要用到這個目錄。
      make
      make install

      7 編譯glibc
        現在,用前面生成的gcc和binutils來生成能工作于目標平臺MIPS的glibc庫。
       (a)解壓縮,得到源代碼
      cd /home/crosstool/tmp
      tar xvfz ../glibc-2-2.5.tar.gz
        (b)完成配置和編譯
      cd glibc-2.2.5
      patch-i ../../gibc-2.2.5-mips-build-gmon.diff
      如果報告有文件找不到,只要回答一下正確的文件名,幫其找到。
      tar -xzf ../../glibc-linuxthreads-2.2.5.tar.gz
      mkdir mipsel-glibc
      cd mipsel-glibc
      CFLAGS="-O2 -g -finline-limit=10000"
      ../configure --build=i686-linux
      --host=mipsel-linux
      --enable-add-ons
      --prefix=/usr/local/cross-gcc/mipsel-linux
      --build表示在i686-linux上編譯glibc;--host表示glibc是用mipsel-linux格式的;--prefix的和前面的步驟有一樣的含義。
      make
      make install install root=/home/crosstool/tmp/glibc-2.2.5-inst
      先安裝在一個臨時的位置。再將文件傳過去。
        (c)將生成的lib傳送到指定位置
      將lib傳到/usr/local/cross-gcc/mipsel-linux/mipsel-linux/lib
      cp -r/home/crosstool/tmp/glibc-2.2.5-inst/usr/local/cross-gcc/mipsel-linux/lib/
      /usr/local/cross-gcc/mipsel-linux/mipsel-linux/
      這個位置就是前面談到的mipsel-linux-ld會搜索的目錄。
        (d)修改libc.so中的路徑
      vi /usr/local/cross-gcc/mipsel-linux/mipsel-linux/lib/libe.so 校正其中兩個文件的路徑
      /*GNU ld script
      Use the shared library,but some functions are only in
      tIle static library.so try that secondarily.*/
      GROUP (/usr/local/cross-gcc/mipsel -linux/mipsel -linux/lib/libc.so.6
      /usr/local/cross -gcc/mipsel -linux/mipsel -linux/lib/libc_non-shared.a)
        (e)將生成的include傳送到正確位置
      將/usr/local/cross-gcc/mipsel-linux/mipsel-linux/mipsel-linux/sys-include改名為include
      cd /usr/local/cross-gcc/mipsel-linux/mipsel-linux/
      mv sys-include include
      將include文件傳到/usr/local/cross-gcc/mipsel-linux/mipsel-linux/include
      cp -r-f /home/crosstool/tmp/glibc-2.2.5-inst/usr/local/cross-
      gcc/mipsel-linux/include//usr/local/cross-gcc/mipsel-linux/mipsel-linux/

      8 編譯動態gcc
        現在,所有的準備工作都完成了,可以用前面做出來的binutils、靜態gcc、glibc來生成完整的。支持共享庫的gcc了。
        a)直接使用前用解壓縮過的代碼。
      cd /home/crosstool/tmp/gcc-3.2
        b)完成配置和編譯
      mkdir mipsel-linux-share
      cd mipsel-linux-share
      ../configure
      --target=mipsel-linux
      --prefix=/usr/local/cross-gcc/mipsel-linux
      --with-cpu=mips32
      --disable-nls
      --enable-threads=posix
      --enable-symvers=gnu
      --enable-_cxa_atexit
      --enable-languages=c,c++
      --enable-shared
      --enable-c99
      --enable-long-long
        注意,這里使用了--enable-shared選項,表示這個gcc編譯是支持共享庫的。
      make
      make install

      9 使用生成的交叉編譯工具鏈
        生成的交叉工具鏈的所有工作文件在/usr/local/cross-gcc/mipsel-linux目錄下,可以用它們來編譯Linux的核心和應用了。現以編譯Linux核心為例說明。在/home/crosstool/tmp/linux目錄下就有一個剛配置好的Linux核心,修改/home/crosstool/tmp/linux/Makefile, 使TOOLROOT和CROSS_COMPILE設置正確:
      TOOLROOT =/usr/local/cross-gcc/mipsel-linux/
      CROSS_COMPILE =:$(TOOLROOT)/bin/mipsel-linux-
      修改/home/crosstool/tmp/linux/arch/mips/Makefile,使tool-prefix設置正確:
      tool-prefix= /usr/local/cross-gcc/mipsel-linux/bin/mipsel-linux-
      回到/home/crosstool/tmp/linux
      cd/home/crosstool/tmp/linux
      make
      成功完成編譯后,生成的Linux核心就在/home/crosstool/tmp/
      linux/vmlinux文件。

      免費預約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 欧美日韩中文字幕久久久不卡 | 思思九九热在线视频免费精品 | 亚洲日本va中文字幕在线直播 | 性深夜福利免费网站 | 欧美亚洲中文高清一 | 夜色欧美一区二区三区 |