日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Crosstool-ng制作交叉编译工具链

發布時間:2023/12/9 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Crosstool-ng制作交叉编译工具链 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Crosstool-ng制作交叉編譯工具鏈

交叉編譯器可以用現成的,比如CodeSourcery制作的交叉編譯器,也可以自己制作,一般是用kernel+gcc+glibc+binutils的源碼包來編譯安裝,后來由于這個太麻煩于是就有類似crosstool這樣的自動化配置工具。

現在之所以用crosstool-ng是因為crosstool-ng是新的用來建立交叉工具鏈的工具,它是crosstool的替換者。crosstool的gcc版本只能到4.1.1,無法編譯版本高于2.6.29的linux內核。而crosstool-ng一直保持著更新,現在最新能夠建立 gcc 4.3.2版本,可用來編譯最新內核。

編譯的系統環境是:ubuntu 10.10 + crosstool-ng 1.11.1目標平臺:ARMv4t, arm9tdmi,s3c2440

目錄

[隱藏]
  • 1?配置ubuntu編譯環境
  • 2?安裝crosstool-ng
  • 3?配置自己的交叉編譯器
  • 4?自動下載和編譯
  • 5?安裝交叉編譯器和測試
    • 5.1?安裝交叉編譯器
    • 5.2?標準化安裝交叉編譯器
  • 6?更多的配置和提醒
  • 7?外部鏈接

[編輯]配置ubuntu編譯環境

安裝編譯所需的包

sudo apt-get install sed bash cut dpkg-dev bison flex patch texinfo automake m4 libtool stat cvs websvn tar gzip bzip2 lzma readlink libncurses5-dev bison flex texinfo automake libtool patch gcj cvs cvsd gawk -y

安裝結束以后就可以用了。

如果后面出現編譯錯誤,再增加相應的包即可

[編輯]安裝crosstool-ng

1. 首先從官方網站上下載crosstool-ng的源碼包?http://ymorin.is-a-geek.org/download/crosstool-ng/crosstool-ng-1.11.1.tar.bz2** 記得在到http://ymorin.is-a-geek.org/download/crosstool-ng/01-fixes/ 看看有沒有相應的補丁,有得話一起下載下來。(#patch -p1 < 補丁文件????? //如果有補丁,打補丁)2. 將此源碼包解壓縮并編譯安裝 tar jxvf crosstool-ng-1.11.1.tar.bz2cd crosstool-ng--1.11.1./configuremakesudo make install 3. 如果一切正常,則ct-ng命令就可以用了

注:編譯的時候如果出現錯誤,可以利用apt-get的方式安裝相應的包即可

[編輯]配置自己的交叉編譯器

crosstool-ng可以配置各種平臺的交叉編譯器,也可以構建符合自己實用條件的個性編譯器。下面以ARM平臺為例,制作具有一定通用性的交叉編譯器。這里我們從一個現成的編譯器配置開始,用例子里的arm-unknown-linux-gnueabi作為配置的基礎,然后來做一個交叉編譯器。

將crosstool-ng源碼包中samples/arm-unknown-linux-gnueabi/下的crosstool.config拷貝到源碼包主目錄下,在源碼包主目錄下執行cp samples/arm-unknown-linux-gnueabi/crosstool.config .config 然后執行:ct-ng menuconfig 進入配置菜單,與linux內核很類似
在這里,我對以下各選項稍作修改
Paths and misc options ---> ......(${HOME}/src) Local tarballs directory # 指定制作編譯器所需要的源碼包的下載存放,可以修改成任意位置,請注意權限?,F在指定到~/src下。......(/opt/${CT_TARGET}) Prefix directory # 制作好的編譯器所放置的目錄 Target options --->Target Architecture (arm) ---> # 注意看這項是不是ARM平臺......Floating point: (software) ---> # 對于很多ARM架構CPU來說是不支持硬浮點運算的,所以選擇軟件方式有更好的兼容性......[*] Use EABI # 是否實用EABI方式,對某些指令采用異常的方式來處理(如除法指令),建議選中 Toolchain options --->..... (tonghuix) Tuple's vendor string # 這里可以修改成你自己的個性化名稱,最后會生成形如arm-yourname-linux-gnueabi這樣的編譯器前綴 修改好以后就可以開始編譯了。

[編輯]自動下載和編譯

下面就可以開始編譯了,默認情況下,源碼包會從網絡下載,會占用比較大的帶寬,下載后總大小在200MB左右,下載好會放到 ~/src下。

開始編譯

ct-ng build

經過大概3個小時的下載(2M ADSL小水管)和90分鐘的編譯過程,在/opt/下生成了arm-tonghuix-linux-gnueabi目錄

注:也可以提前下載好,放到~/src下,但請注意下載的文件名必須一致,否則會重新下載,下面是利用arm-unkown-linux-gnueabi模板生成交叉編譯器所需要的源碼文件列表binutils-2.19.1.tar.bz2 dmalloc-5.5.2.tgz duma_2_5_15.tar.gz ecj-latest.jar expat-2.0.1.tar.gz gcc-4.3.2.tar.bz2 gdb-6.8.tar.bz2 glibc-2.9.tar.bz2 glibc-ports-2.9.tar.bz2 gmp-4.3.2.tar.bz2 libelf-0.8.13.tar.gz linux-2.6.33.12.tar.bz2 ltrace_0.5.3.orig.tar.gz mpfr-2.4.2.tar.bz2 ncurses-5.7.tar.gz strace-4.5.19.tar.bz2

[編輯]安裝交叉編譯器和測試

[編輯]安裝交叉編譯器

剛制作好的交叉編譯器其實就可以用了,但是還有些許不方便之處,我們可以進入到生成好的交叉編譯器的目錄

cd /opt/arm-tonghuix-linux-gnueabi/bin

下面執行

./arm-tonghuix-linux-gnueabi-gcc -v

應該可以看到如下這樣的輸出信息

Target: arm-tonghuix-linux-gnueabi Configured with: /home/tonghuix/crosstool-ng-1.11.1/.build/src/gcc-4.3.2/configure --build=i686-build_pc-linux-gnu --host=i686-build_pcinux-gnu --target=arm-tonghuix-linux-gnueabi --prefix=/opt/arm-tonghuix-linux-gnueabi --with-sysroot=/opt/arm-tonghuix-linux-gnueabi-arm-tonghuix-linux-gnueabi/sysroot --enable-languages=c,c++,fortran,java --disable-multilib --with-float=soft --with-pkgversion=crosstool- NG-1.11.1 --disable-sjlj-exceptions --enable-__cxa_atexit --disable-libmudflap --disable-libgomp --disable-libssp --with-gmp=/home/tonghuix/crosstool-ng-1.11.1/.build/arm-tonghuix-linux-gnueabi/build/static --with-mpfr=/home/tonghuix/crosstool-ng-1.11.1/.build/arm-tonghuix-linux-gnueabi/build/static --enable-threads=posix --enable-target-optspace --with-local-prefix=/opt/arm-tonghuix-linux-gnueabi-arm-tonghuix-linux-gnueabi/sysroot --disable-nls --enable-symvers=gnu --enable-c99 --enable-long-long Thread model: posix gcc version 4.3.2 (crosstool-NG-1.11.1)

這樣就表明我們的交叉編譯器,制作成功了。

下面把交叉編譯器所在的目錄添加到系統PATH變量中,修改~/.bashrc文件,在其中添加:

export PATH=$PATH:/opt/arm-tonghuix-linux-gnueabi/bin

為了使得這個PATH生效,我們可以執行一下~/.bashrc文件

source ~/.bashrc

這樣我們就可以在命令行下直接使用arm-tonghuix-linux-gnueabi-gcc這樣的命令了!

[編輯]標準化安裝交叉編譯器

我們在使用交叉編譯器的時候一般是采用arm-tonghuix-linux-gnueabi這樣的命令的,但是很多標準Makefile需要實用標準的交叉編譯器的名稱,一般這個名稱是arm-linux-gcc這樣的。

cd /opt/arm-tonghuix-linux-gnueabi/bin/

那么我們在生成交叉編譯器的目錄下寫一個link.sh腳本,新建一些軟鏈接。

>link.sh

#!/bin/sh PREFIX=arm-tonghuix-linux-gnueabi- AFTFIX=arm-linux- ln -s ${PREFIX}gcc ${AFTFIX}gcc ln -s ${PREFIX}addr2line ${AFTFIX}addr2line ln -s ${PREFIX}gdbtui ${AFTFIX}gdbtui ln -s ${PREFIX}ar ${AFTFIX}ar ln -s ${PREFIX}as ${AFTFIX}as ln -s ${PREFIX}c++ ${AFTFIX}c++ ln -s ${PREFIX}c++filt ${AFTFIX}c++filt ln -s ${PREFIX}cpp ${AFTFIX}cpp ln -s ${PREFIX}g++ ${AFTFIX}g++ ln -s ${PREFIX}gccbug ${AFTFIX}gccbug ln -s ${PREFIX}gcj ${AFTFIX}gcj ln -s ${PREFIX}gcov ${AFTFIX}gcov ln -s ${PREFIX}gdb ${AFTFIX}gdb ln -s ${PREFIX}gfortran ${AFTFIX}gfortran ln -s ${PREFIX}gprof ${AFTFIX}gprof ln -s ${PREFIX}jcf-dump ${AFTFIX}jcf-dump ln -s ${PREFIX}ld ${AFTFIX}ld ln -s ${PREFIX}ldd ${AFTFIX}ldd ln -s ${PREFIX}nm ${AFTFIX}nm ln -s ${PREFIX}objcopy ${AFTFIX}objcopy ln -s ${PREFIX}objdump ${AFTFIX}objdump ln -s ${PREFIX}populate ${AFTFIX}populate ln -s ${PREFIX}ranlib ${AFTFIX}ranlib ln -s ${PREFIX}readelf ${AFTFIX}readelf ln -s ${PREFIX}run ${AFTFIX}run ln -s ${PREFIX}size ${AFTFIX}size ln -s ${PREFIX}strings ${AFTFIX}strings ln -s ${PREFIX}strip ${AFTFIX}strip

寫完這個link.sh文件以后,我們可以執行一下

sh link.sh

這樣我們就得到了整個使用標準名稱的交叉編譯工具鏈,可以在makefile中使用類似arm-linux-gcc這樣的名稱了。

[編輯]更多的配置和提醒

用ct-ng menuconfig進入配置菜單,可以將某些選項修改成自己的配置,不過注意以下幾個地方:

  • 注意其中各個Path的配置必須準確,如果找不到就很麻煩
  • 可以指定不同的下載鏡像,但是要確定這個鏡像可用并且安全可靠
  • 可以不設置操作系統,也就是可以將Target OS改成bare-metal,這樣的交叉編譯器適合于面對硬件的裸機程序,如果不改也可以用于裸機編程。
  • Kernel的版本、庫的版本、gcc的版本都不建議修改,除非能夠確定一套比較完善的編譯源碼包的版本組合
  • 配置結束后,建議存一個自己的配置文件,以防萬一和錯誤。
  • 轉載于:https://www.cnblogs.com/Charles-Zhang-Blog/p/3319377.html

    總結

    以上是生活随笔為你收集整理的Crosstool-ng制作交叉编译工具链的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。