<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 創(chuàng)建ARM Linux交叉編譯環(huán)境實(shí)踐

          創(chuàng)建ARM Linux交叉編譯環(huán)境實(shí)踐

          作者: 時(shí)間:2016-11-09 來源:網(wǎng)絡(luò) 收藏
          一、準(zhǔn)備工作
          首先需要一臺(tái)運(yùn)行Linux操作系統(tǒng)的PC以完成我們的編譯工作。
          其次要準(zhǔn)備如下一些源文件。
          1、源文件準(zhǔn)備
          binutils-2.14.tar.gz
          ftp://ftp.gnu.org/gnu/binutils/binutils-2.14.tar.gz
          gcc-core-2.95.3.tar.gz
          ftp://ftp.gnu.org/gnu/gcc/gcc-2.95.3/gcc-core-2.95.3.tar.gz
          gcc-g++2.95.3.tar.gz
          ftp://ftp.gnu.org/gnu/gcc/gcc-2.95.3/gcc-g++-2.95.3.tar.gz
          glibc-2.2.4.tar.gz
          ftp://ftp.gnu.org/gnu/glibc/glibc-2.2.4.tar.gz
          glibc-linuxthreads-2.2.4.tar.gz
          ftp://ftp.gnu.org/gnu/glibc/glibc-linuxthreads-2.2.4.tar.gz
          linux-2.4.21.tar.gz
          ftp://ftp.kernle.org/pub/linux/kernel/v2.4/linux-2.4.21.tar.gz
          patch-2.4.21-rmk1.gz # linux kernel patch for arm
          ftp://ftp.arm.linux.org.uk/pub/linux/arm/kernel/v2.4/patch-2.4.21-rmk1.gz
          binutils-2.14.tar.gz這個(gè)壓縮包包含有l(wèi)d,ar,as等一些產(chǎn)生或者處理二進(jìn)制文件的工具。
          gcc-core-2.95.3.tar.gz這個(gè)壓縮包是GCC的主體部分,GCC是GNU Compiler Collection的簡稱,顧名思義,它能夠編譯很多種高級語言,例如C、C++,Java等,而這個(gè)壓縮包中含有C編譯器,及公共部分,而對其他語言的支持,采用另外的壓縮包單獨(dú)發(fā)布。
          gcc-g++2.95.3.tar.gz,這個(gè)壓縮包就是為使GCC能夠編譯C++程序而單獨(dú)發(fā)布的。
          glibc-2.2.4.tar.gz,libc是很多用戶層應(yīng)用都要用到的庫,kernel和bootloader不需要這個(gè)庫的支持,這個(gè)庫主體部分封裝在這個(gè)壓縮包內(nèi)。
          glibc-linuxthreads-2.2.4.tar.gz,這是Libc用于支持Posix線程而單獨(dú)發(fā)布的一個(gè)壓縮包。
          linux-2.4.21.tar.gz,這個(gè)壓縮包就是Linux的內(nèi)核。
          patch-2.4.21-rmk1.gz,這個(gè)壓縮包是用來給Linux內(nèi)核打補(bǔ)丁,以使其可以支持ARM的硬件平臺(tái)。
          2、工作目錄搭建
          我們創(chuàng)建如下的目錄樹結(jié)構(gòu)
          mkdir arm
          mkdir tool-chain
          mkdir build-dir
          mkdir src-dir
          mkdir setup-dir
          mkdir kernel
          arm這個(gè)目錄是我們的最頂層工作目錄,我們所有的編譯工作都在這里完成。
          tool-chain這個(gè)目錄是我們交叉編譯工具的安裝位置,它下面的bin子目錄存放我們創(chuàng)建好的編譯器,匯編器,連接器,以及編譯好的C庫也會(huì)安裝到這個(gè)目錄之下。
          setup-dir這個(gè)目錄用來存放我們下載的壓縮包。
          src-dir這個(gè)目錄用于存放binutils,gcc,glibc解壓之后的源文件。
          kernel這個(gè)目錄用來存放內(nèi)核文件,對內(nèi)核的配置、編譯工作將在這個(gè)目錄中完成。
          build-dir用來編譯src-dir中的源文件,具體就是binutils,gcc,glibc的編譯工作將在這個(gè)目錄下完成。這種源文件目錄和編譯目錄分離的編譯方式是GNU所推薦的。
          cd ./src-dir
          tar –xvzf ../setup-dir/binutils-2.14.tar.gz
          tar –xvzf ../setup-dir/ gcc-core-2.95.3.tar.gz
          tar –xvzf ../setup-dir/ glibc-2.2.4.tar.gz
          tar –xvzf ../setup-dir/ glibc-linuxthreads-2.2.4.tar.gz –directory=./glibc-2.2.4
          這樣我們在src-dir目錄下就形成了3個(gè)源文件目錄binutils-2.14,gcc-core-2.95,3,glibc-2.2.4,其中分別存放著binutils tools,gcc,glibc的源代碼。接下來我們到build-dir中創(chuàng)建3個(gè)與這三個(gè)源文件目錄對應(yīng)的編譯目錄。
          cd ../build-dir
          mkdir ../build-dir/build-binutils
          mkdir ../build-dir/build-gcc
          mkdir ../build-dir/build-glibc
          我們將在這三個(gè)目錄中完成對binutils tools, gcc, glibc的配置和編譯工作。下面還要把內(nèi)核文件解壓到kernel目錄下,并打補(bǔ)丁。
          cd ../kernel
          tar –xvzf ../setup-dir/linux-2.4.21.tar.gz
          cd ./linux-2.4.21
          patch –p1 < ../../setup-dir/ patch-2.4.21-rmk1
          二、開始創(chuàng)建
          1、確定幾個(gè)系統(tǒng)變量
          cd ../../
          export TARGET=arm-linux
          export PREFIX=../arm/tool-chain
          export TARGET_PREFIX=$PREFIX/$TARGET
          export KERNEL_SOURCE_LOCATION=../arm/kernel/linux-2.4.21
          export PATH=$PREFIX/bin:$PATH
          幾個(gè)系統(tǒng)變量經(jīng)常要用到,TARGET定義了目標(biāo)機(jī),PREFIX是工具鏈的安裝目錄,KERNEL_SOURCE_LOCATION是內(nèi)核文件位置。
          2、創(chuàng)建binutils
          運(yùn)行如下命令來創(chuàng)建binutils
          cd ./build-dir/build-binutils
          configure ../../src-dir/binutils-2.14/configure –target=$TARGET –prefix=$PREFIX
          make
          make install
          這時(shí)$PREFIX/bin下創(chuàng)建了一些文件,包括arm-linux-ld,arm-linux-as等。
          3、編譯內(nèi)核
          cd ../../kernel/linux-2.4.21
          改Makefile文件使
          ARCH = arm
          CROSS_COMPILE=arm-linux-
          make menuconfig
          在System Types中選擇正確的硬件類型
          make dep
          之后執(zhí)行如下操作
          mkdir $TARGET_PREFIX/include
          cp dR $KERNEL_SOURCE_LOCATION/include/arm-asm
          RGET_PREFIX/include/asm
          cp dR $KERNEL_SOURCE_LOCATION/include/linux
          RGET_PREFIX/include/linux
          4、創(chuàng)建boot-trap gcc,這個(gè)GCC沒有g(shù)libc庫的支持,所以只能用于編譯內(nèi)核,bootloader等,后面創(chuàng)建C庫也要用到這個(gè)編譯器,所以創(chuàng)建它主要是為創(chuàng)建C庫做準(zhǔn)備,如果只想編譯內(nèi)核和bootloader那么,就可以到此結(jié)束。
          cd ../../build-dir/build-gcc
          ../../src-dir/gcc-2.95.3/configure –target=$TARGET –prefix=$PREFIX
          --with-headers=$ERNEL_SOURCE_LOCATION/include –enable-language=c
          --disable-threads
          然后修改src-dir/gcc-2.95.3/gcc/config/arm/t-linux文件,在
          TARGET_LIBGCC2_CFLAGS中添加如下兩個(gè)定義
          -Dinhibit-libc –D__gthr_posix_h
          make
          make install
          這時(shí)$PREFIX/bin下創(chuàng)建了一些文件,主要?jiǎng)?chuàng)建了arm-linux-gcc。
          5、創(chuàng)建gblic
          cd ../build-glibc
          export CC=arm-linux-gcc
          ../../src-dir/glibc-2.2.4/configure –host=$TARGET –prefix=$TARGET_PREFIX
          --enable-add-ons
          make
          make install
          6、創(chuàng)建功能健全的GCC,并創(chuàng)建G++
          在成功創(chuàng)建了libc之后,我們就可以創(chuàng)建功能豐富的GCC編譯器了,并且可以創(chuàng)建支持編譯C++程序的G++。
          cd ../../src-dir
          tar –xvzf ../setup-dir/gcc-g++2.95.3.tar.gz
          cd ../build-dir/build-gcc
          export CC=gcc
          ../../src-dir/gcc-2.95.3/configure –target=$TARGET –prefix=$PREFIX
          –enable-language=c,c++
          然后修改src-dir/gcc-2.95.3/gcc/config/arm/t-linux文件,在
          TARGET_LIBGCC2_CFLAGS中去除如下兩個(gè)定義
          -Dinhibit-libc –D__gthr_posix_h
          make
          make install
          7,至此我們成功的創(chuàng)建了ARM Linux的交叉編譯工具


          關(guān)鍵詞: ARMLinux交叉編譯環(huán)

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();