交叉編譯器的制作_第1頁
交叉編譯器的制作_第2頁
交叉編譯器的制作_第3頁
交叉編譯器的制作_第4頁
交叉編譯器的制作_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

交叉工具鏈制作至尊寶典一些必須知道的基礎知識Debian操作系統(tǒng)以及aptitude命令autoconfandautomake什么是交叉編譯,configure的幾個參數(shù)buildhosttargetbuild:編譯代碼的機器,的CPU指令集host:編譯生成的東西,的CPU指令集(目標板上的CPU的指令集)target:編譯生成的東西,他編譯生成的的東西,的指令集(所以此選項一般不用,大多只有在做交叉工具鏈時使用)0、以Expertmode安裝Debian不要升級,確保環(huán)境是一個純凈的環(huán)境1、聲明環(huán)境變量1 export IS_TARGET=arm-linux1 export DIR_SRC=/root/cross_toolchains/src1 export PREFIX=/opt/cross_toolchains/arm1 export CONFIGURE_BASE="../configure--prefix=$PREFIX2、2、下載制作交叉工具鏈所必須的的代碼1 binutils1gcc1 /gnu/gmp/gmp-5.0.2.tar.gz1 /gnu/mpfr/mpfr-3.0.1.tar.gz1 /mpc/download/mpc-0.9.tar.gz1 /gnu/gcc/gcc-4.6.1/gcc-4.6.1.tar.gz1glibc1 /gnu/glibc/glibc-2.14.tar.gz1 /gnu/glibc/glibc-ports-2.13.tar.gz1linuxkernel6?2-6?2-X1 aptitudeinstallbuild-essentialautomakebisonflextexinfogawkg\+\+1aptituderemovejmawK4、解壓、歸檔軟件包1cd$DIR_SRC1 tar -xf binutils-2.21.tar.gz1 tar -xf gmp-5.0.2.tar.gz1 tar -xf mpc-0.9.tar.gz1 tar -xf mpfr-3.0.1.tar.gz1 tar -xf gcc-4.6.1.tar.bz21 tar -xf glibc-2.14.tar.gz1 tar -xf glibc-ports-2.13.tar.gz1 tar -xf linux-.tar.bz21 mv gmp-5.0.2gcc-4.6.1/gmp1 mv mpc-0.9gcc-4.6.1/mpc1 mv mpfr-3.0.1gcc-4.6.1/mpfr5、bc-2.14/ports、1_5、bc-2.14/ports編譯BINUTILS1 cd$DIR_SRC1 cdbinutils-2.211mkdirbuild1cdbuild1$CONFIGURE_BASE--target=$IS_TARGET--disable-nls--enable-shared--disable-multilib1makeconfigure-host1make1makeinstall1exportPATH=$PATH:$PREFIX/bin問題:編譯binutils—般不會遇到什么問題,但是,如果前面步驟3中安裝的軟件不全會出現(xiàn)問題6、建立用于編譯C庫的GCC1 cd$DIR_SRC1 cdgcc-4.6.11mkdirbuild1cdbuild1$CONFIGURE_BASE\1 --target=$IS_TARGET\1--disable-nls\1--disable-shared\1 --without-headers\1 --with-newlib\1--enable-languages=c\1--disable-threads\1 --disable-multilib\1--disable-decimal-float\1--disable-libgomp\1--disable-libmudflap\1--disable-libssp1makeall-gccall-target-libgcc1makeinstall-gccinstall-target-libgcc1值得注意的幾個configure選項1 --target1--disable-shared1 --without-headers1 --with-newlib1--enable-language-c1--disable-thread1 cd$PREFIX/lib/gcc/$IS_TARGET/4.6.11 ln-slibgcc.alibgcc_eh.a1有建議修改gcc/config/t-linux這個文件1增加-D__gthr_posix_h-Dinhibit_libc兩個宏,但我這里沒這樣做,是因為:1在configure后,編譯使用的命令并不是make或者是makeall而是makeall-gcc和makeall-target-libgcc,所以很多問題不會出現(xiàn)1 -with-newlib,這個選項不會迫使我們必須使用newlib1libgcc.mvars:Nosuchfileordirectory1不能在GCC的源代碼目錄進行configure,必須在另外的目錄進行configuremake等工作1 所以這里在代碼所在目錄下mkdirbuild并cdbuild再進行../configure等工作

1configure:error:Ccompilercannotcreateexecutables1如果使用make或makeall會出現(xiàn)這樣的問題,因為我們還未編譯出目標指令集的C庫1 所以只能先使用makeall-gccmakeall-target-libgcc1 ../../../../arm-linux/bin/ld:cannotfind-lgcc1 ../../../../arm-linux/bin/ld:cannotfind-lgcc_eh1 很多資料都只寫了makeall-gcc而沒有寫makeall-target-libgcc這樣只建立了gcc,沒有建立libgcc.a會出現(xiàn)以上第一個錯誤7、配置內(nèi)核生成必要的頭文件個錯誤7、1 cd$DIR_SRC1 cdlinux-1 makeARCH=arm CROSS_COMPILE=$IS_TARGET-menuconfig1 makeARCH=arm CROSS_COMPILE=$IS_TARGET-1mkdir-p$PREFIX/include1 cd $PREFIX/include1 ln -s $DIR_SRC/linux-/arch/arm/include/asm asm1 ln -s $DIR_SRC/linux-/include/linuxlinux1 ln -s $DIR_SRC/linux-/include/asm-generic asm-generic1 這里并沒有將內(nèi)核的頭文件復制到交叉工具鏈的安裝目錄1 編譯C庫的時候,需要對應的CPU指令集的匯編代碼所以做了鏈接處理編譯內(nèi)核在執(zhí)行makeARCH=armCROSS_COMPILE=$IS_TARGET-時如果出錯,是沒有八關(guān)系的,這里只要生成了對應的version.hautoconf.h就可以了8、編譯C庫

1 cd$DIR_SRC1 cdglibc-2.91mkdirbuild1cdbuild1 vi ../configure1 vi ../ports/sysdeps/unix/sysv/linux/arm/sigrestorer.S1 vi ../sysdeps/unix/syscall-template.S1 vi ../nptl/allocatestack.c1 vi ../elf/dl-tls.c1 vi ../sysdeps/ieee754/dbl-64/s_fma.c1 vi ../sysdeps/ieee754/dbl-64/s_fmaf.c11 具體的修改,我寫在下面(覺得還是要說清楚為什么修改,所以就沒用sed命令或是做一些patch文件了,請向下看)1CC=$IS_TARGET-gcc\1$CONFIGURE_BASE\1--host=$IS_TARGET\1-enable-add-ons\1 --with-binutils=$PREFIX/bin\1 --with-headers=$PREFIX/include\1libc_cv_forced_unwind=yes\1libc_cv_c_cleanup=yes1值得注意的幾個configure選項1 --host1 --with-headers1lib_cv_forced_unwind1lib_cv_c_cleanup1make1makeinstall這里編譯的時候并有選擇TARGET為EABI,所以在制作交叉工具鏈時會有很多問題需要修改***Thesecriticalprogramsaremissingortooold:asld***ChecktheINSTALLfileforrequiredversions.vi../configure查找"$AS--version"將2.1[3-9]修改為2.[1-2][0-9]查詢"$LD--version"將2.1[3-9]修改為2.[1-2][0-9]Error:previousCFIentrynotclosed(missing.cfi_endproc)vi../ports/sysdeps/unix/sysv/linux/arm/sigrestorer.SENTRY(__default_sa_restorer) 下增加END(__default_sa_restorer)ENTRY(__default_rt_sa_restorer) 下增加END(__default_rt_sa_restorer)syscall-template.S:82:Error:CFIinstructionusedwithoutprevious.cfi_startprocvi../sysdeps/unix/syscall-template.S這個問題的修改我也不是十分確定,我是這樣來思考的看到syscall-template.S中有#include〈sysdep.h〉去查看ports/sysdeps/unix/sysv/linux/arm/sysdep.h看到如下代碼#ifdef__ASSEMBLER__#undefPSEUDO#definePSEUDO(name,syscall_name,args)\.text;\ENTRY(name);\DO_CALL(syscall_name,args);cmnr0,$4096;11#definePSEUDO(name,syscall_name,args)\1 .text;\1 ENTRY(name);\1 DO_CALL(syscall_name,args);\1 cmnr0,$4096;11 這段代碼添加至../sysdeps/unix/syscall-template.S中1LS_DTV_UNALLOCATEDundeclared(firstuseinthisfunction)1 vi../nptl/allocatestack.c1 vi../elf/dl-tls.c1 這個錯誤會出現(xiàn)在編譯以上兩個文件的時候,這個宏的定義我grep了整個glibc的所有代碼,沒找到ARM相關(guān)的聲明及定義,按照其他指令集的定義猜測著修改如下1 在以上兩個C文件中增加相應的定義11#defineTLS_DTV_UNALLOCATED ((void*)-1l)1E_TOWARDZEROundeclared(firstuseinthisfunction)1E_INEXACTundeclared(firstuseinthisfunction)1 以上兩個錯誤會出現(xiàn)在以下兩個文件的的編譯過程中1 vi../sysdeps/ieee754/dbl-64/s_fma.c1 vi../sysdeps/ieee754/dbl-64/s_fmaf.c1參考ports/sysdeps/arm/eabi/bits/fenv.h中的定義1 在兩個文件中添加1 #defineFE_TOWARDZERO0xc000001 #defineFE_INEXACT161mawk:scripts/gen-sorted.awk:line19:regularexpressioncompilefailed1所以要aptitudeinstallgawk所以也順帶著aptituderemovemawk1configure:error:forcedunwindsupportisrequired1configure中增加配置參數(shù)libc_cv_forced_unwind=yes1error:thecompilermustsupportCcleanuphandlin1configure中增加配置參數(shù)libc_cv_c_cleanup=yes1--enable-add-ons為C庫增加thread支持,目前默認使用的是nptl所以這里沒有去下載glibc-threads相關(guān)的代碼、1--with-headers指定內(nèi)核頭文件所在的目.錄-9、編譯完整的gcc工具鏈1mkdir-p$PREFIX/usr1 cd$PREFIX/usr1 ln-s../includeinclude1cd$PREFIX1mkdir-popt/cross_toolchains1 cdopt/cross_toolchains/1 ln-s../../../armarm1 cd $DIR_SRC1 cd gcc-4.6.11 cd build1 makeclean1 makedistclean1 rm *-rf1$CONFIGURE_BASE\

1 --target=arm-linux\1--enable-languages=c,c++\1--enable-shared\1--disable-nls\1--enable-c99\1 --enable-long-long\1 --disable-multilib\1 --enable-__cxa_atexit1幾個值得注意的configure選項1 --target1--enable-shared1make1makeinstall1Thedirectorythatshouldcontainsystemheadersdoesnotexist:1 這個問題我沒具體的去跟蹤了,從表面上看出來是一些路徑上的問題,并且經(jīng)過驗證,這個問題是在configure時使用了--with-sysroot選項時產(chǎn)生的1 為了嘗試不通過建立鏈接的方式去解決這個問題1在指明了--includedir--libdir--sysconfdir等等一系列參數(shù)后編譯,依然會出現(xiàn)此問題1 所以不再跟蹤,暫

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論