版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
交叉工具链制作至尊宝典一些必须知道的基础知识Debian操作系统以及aptitude命令autoconfandautomake什么是交叉编译,configure的几个参数buildhosttargetbuild:编译代码的机器,的CPU指令集host:编译生成的东西,的CPU指令集(目标板上的CPU的指令集)target:编译生成的东西,他编译生成的的东西,的指令集(所以此选项一般不用,大多只有在做交叉工具链时使用)0、以Expertmode安装Debian不要升级,确保环境是一个纯净的环境1、声明环境变量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中安装的软件不全会出现问题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,所以很多问题不会出现1 -with-newlib,这个选项不会迫使我们必须使用newlib1libgcc.mvars:Nosuchfileordirectory1不能在GCC的源代码目录进行configure,必须在另外的目录进行configuremake等工作1 所以这里在代码所在目录下mkdirbuild并cdbuild再进行../configure等工作
1configure:error:Ccompilercannotcreateexecutables1如果使用make或makeall会出现这样的问题,因为我们还未编译出目标指令集的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会出现以上第一个错误7、配置内核生成必要的头文件个错误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 这里并没有将内核的头文件复制到交叉工具链的安装目录1 编译C库的时候,需要对应的CPU指令集的汇编代码所以做了链接处理编译内核在执行makeARCH=armCROSS_COMPILE=$IS_TARGET-时如果出错,是没有八关系的,这里只要生成了对应的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 这个错误会出现在编译以上两个文件的时候,这个宏的定义我grep了整个glibc的所有代码,没找到ARM相关的声明及定义,按照其他指令集的定义猜测着修改如下1 在以上两个C文件中增加相应的定义11#defineTLS_DTV_UNALLOCATED ((void*)-1l)1E_TOWARDZEROundeclared(firstuseinthisfunction)1E_INEXACTundeclared(firstuseinthisfunction)1 以上两个错误会出现在以下两个文件的的编译过程中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中增加配置参数libc_cv_forced_unwind=yes1error:thecompilermustsupportCcleanuphandlin1configure中增加配置参数libc_cv_c_cleanup=yes1--enable-add-ons为C库增加thread支持,目前默认使用的是nptl所以这里没有去下载glibc-threads相关的代码、1--with-headers指定内核头文件所在的目.录-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 这个问题我没具体的去跟踪了,从表面上看出来是一些路径上的问题,并且经过验证,这个问题是在configure时使用了--with-sysroot选项时产生的1 为了尝试不通过建立链接的方式去解决这个问题1在指明了--includedir--libdir--sysconfdir等等一系列参数后编译,依然会出现此问题1 所以不再跟踪,暂
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二四年度电子商务平台技术支持合同3篇
- 2024年度国际金融服务与保险合同3篇
- 二零二四年度设备维护和修理合同
- 外墙涂料承包合同(2024年度)
- 二零二四年度版权许可合同授权范围
- 2024年度铲车智能化改造合同
- 年试用期解除劳动合同协议书
- 2024年矿产资源勘探开发合同
- 2024电商企业知识产权保护合同
- 2024年版网站建设与维护合同3篇
- 北京市海淀区第二实验小学2022-2023学年度五年级上学期期末诊断数学试题
- 教科版五年级科学上册第三单元测试卷附答案
- 电梯高处施工方案
- 心理团体辅导的保密协议
- 高血压病教学查房教案
- 中国国防科学技术报告研制报告样本
- 东方绿洲军训日记500字(八篇)
- 原发性骨质疏松症诊疗指南(2022版)第二部分
- 医院护理培训课件:《根本原因分析-RCA-从错误中学习》
- 初中英语课外阅读Treasure+Island黑布林阅读
- 门静脉高压个案护理查房
评论
0/150
提交评论