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

      嵌入式基礎:ARM下GCC交叉編譯器的制作

      更新時間: 2009-06-28 02:12:29來源: 粵嵌教育瀏覽量:1360

        1.下載所需文件

              以下是我在Cygwin環境下制作arm-gcc(uclibc)交叉編譯器中所需要的文件:

              binutils-2.14.90.0.8

              uClibc-0.9.27

              gcc-3.4.2

              linux-libc-headers-2.4.29

              PS:一般來說這里還需要下一些patch,因為我對編譯器的理解還不夠,加上這個事情是工作內容,還有些其他的特殊需求,為了省麻煩,我用了一個很齷齪的方法。我將在linux環境下被buildroot打過補丁的源代碼復制出來。

              注:通常制作交叉編譯器的時候,源代碼的版本是非常重要的。

              2.準備工作

             ${PREFIX}為安裝目錄;

             ${TARGET}為目標的體系結構,例如arm-linux;

             將${PREFIX}/${TARGET}下的sys-include鏈接到../include目錄;

             將${PREFIX}/${TARGET}下的lib鏈接到../lib目錄;

             將內核頭文件中對應的asm(例如asm-arm)和linux目錄復制到${PREFIX}/include下;

             修改內核頭文件,比如在制作i386-arm交叉編譯器時,需要在asm目錄下的建立arch,proc對應的目錄;

              修改環境變量

             export PATH=${PREFIX}/bin:${PATH}

             這個一定要記得,因為制作gcc交叉編譯器時,需要用到此bin目錄下的交叉二進制工具;

             接下來這步,是為uclibc庫所做的,創建${PREFIX}/usr目錄,將目錄中的lib鏈接到../lib,將目錄中的include鏈接到../include;

             接下來就準備開始制作交叉編譯器了,制作交叉編譯器一般分四步:

             制作交叉的二進制工具

             制作不帶庫的gcc交叉編譯器

             用制作好的gcc交叉編譯器將所需要的庫編譯

             重新編譯帶庫的gcc交叉編譯器

             以下是制作交叉編譯器的步驟,因為我用的源代碼是給buildroot打過補丁的,所以制作的參數會和通常的交叉編譯器制作的參數有些不同。

             3.制作binutils

             制作交叉環境的二進制工具:

             ../binutils-2.14.90.0.8/configure --prefix=/staging_dir --target=arm-linux-uclibc --disable-nls --enable-multilib --disable-werror

             make

             make install

             4.制作gcc交叉編譯器

             ../gcc-3.4.2/configure --prefix=/staging_dir --target=arm-linux-uclibc --enable-languages=c --disable-shared --with-sysroot=/sour-uc/uClibc_dev/ --disable-__cxa_atexit --enable-target-optspace --with-gnu-ld --disable-nls --enable-multilib

      make

      make install

              注:如果是通常的制作,這里一般需要--without-headers --disable-shared --disable-threads,如果不是使用glibc庫,還需要 --with-newlib。

             5.編譯uclibc庫

             make menuconfig

             make CROSS=arm-linux-uclibc-

             make PREFIX="/staging_dir" install

             注:在menuconfig配置中,Library Installation Options的參數設置如下:

             (/lib) Shared library loader path

             (/) uClibc runtime library directory

             (/usr/) uClibc development environment directory

             在/staging_dir/usr目錄下會生成include和lib兩個目錄,這兩個目錄會生成下一步制作gcc所需要的文件,已經被我們鏈接到相應的目錄里去了。如果之前沒有把目錄鏈接到安裝目錄下的lib和include中,則下步編譯gcc會出現許多錯誤,比如找不到crt?.o等等。

             6.重新制作gcc交叉編譯器

       

      ../gcc-3.4.2/configure
                  --prefix=/staging_dir
                  --target=arm-linux-uclibc
                  --enable-languages=c
                  --enable-shared
                  --disable-__cxa_atexit
                  --enable-target-optspace
                  --with-gnu-ld --disable-nls
                  --enable-multilib
                  make
                  make install

       

      ../gcc-3.4.2/configure
      --prefix=/staging_dir
      --target=arm-linux-uclibc
      --enable-languages=c
      --enable-shared
      --disable-__cxa_atexit
      --enable-target-optspace
      --with-gnu-ld --disable-nls
      --enable-multilib
      make
      make install
       

              如果不出現編譯錯誤,那么恭喜你,你距離成功就僅有一小步了。為什么這么說,因為你的gcc的specs文件可能還需要做一點簡單的修改,因為編譯的時候可能會遇到一些錯誤。比如我制作完成后,在編譯so文件時,specs里的規則就會導致我無法編譯。

      免費預約試聽課

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

      
      

      1. 日精品一区二区三区 | 亚洲性爱免费观看视频 | 日韩精品一区二区在线 | 亚洲精品国产91 | 亚洲伦乱子亲农村在线视频 | 亚州另类欧美综合一区 |