构建嵌入式 Linux 开发环境.docx_第1页
构建嵌入式 Linux 开发环境.docx_第2页
构建嵌入式 Linux 开发环境.docx_第3页
构建嵌入式 Linux 开发环境.docx_第4页
构建嵌入式 Linux 开发环境.docx_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

构建嵌入式 Linux 开发环境 V0.1基于 linux-3.0.3、binutils-2.21.1、glibc-2.13、glibc-ports-2.13、gcc-4.6.1、gmp-5.0.2、mpfr-3.0.1、mpc-0.9 构建。1.创建宿主机编译环境# apt-get install build-essential libncurses5-dev创建setbuildenv.sh脚本setbuildenv.sh+-setbuildenv.sh-+#!/bin/shexport PRJROOT=/home/mini/armexport TARGET=arm-linuxexport PREFIX=$PRJROOT/toolsexport TARGET_PREFIX=$PREFIX/$TARGETexport PATH=$PREFIX/bin:$PATH+-+$ source setbuildenv.sh$ cd$ mkdir arm$ cd $PRJROOT$ mkdir build-tools tools kernel$ cd $PRJROOT/build-tools$ mkdir build-binutils build-boot-gcc build-gcc build-glibc build-glibc-headers$ cd $PRJROOT/tools$ mkdir arm-linux2.安装内核头文件$ cd $PRJROOT/kernel$ wget /pub/linux/kernel/v3.0/linux-3.0.3.tar.gz$ tar xvf linux-3.0.3.tar.gz$ cd linux-3.0.3$ cp arch/arm/configs/s3c2410_defconfig ./.config$ make ARCH=arm CROSS_COMPILE=arm-linux- menuconfig$ make ARCH=arm CROSS_COMPILE=arm-linux-$ mkdir -p $TARGET_PREFIX/include$ cp -r include/linux/ $TARGET_PREFIX/include$ cp -r include/asm-generic/ $TARGET_PREFIX/include$ cp -r arch/arm/include/asm/ $TARGET_PREFIX/include#$ make ARCH=arm CROSS_COMPILE=arm-linux-此步的目的是生成 include/linux/version.h 文件,而不是真正的编译,忽略所有错误。#3.编译 binutils$ cd $PRJROOT/build-tools$ wget /gnu/binutils/binutils-2.21.1.tar.gz$ tar xvf binutils-2.21.1.tar.gz$ cd build-binutils$ ./binutils-2.21.1/configure -target=$TARGET -prefix=$PREFIX$ make$ make install4.安装 glibc 头文件$ cd $PRJROOT/build-tools$ wget /pub/gnu/glibc/glibc-2.13.tar.gz$ wget /pub/gnu/glibc/glibc-ports-2.13.tar.gz$ tar xvf glibc-2.13.tar.gz$ tar xvf glibc-ports-2.13.tar.gz$ mv glibc-ports-2.13 ./glibc-2.13/ports$ cd build-glibc-headers$ ./glibc-2.13/configure -host=$TARGET -prefix=/usr -enable-add-ons -with-headers=$TARGET_PREFIX/include$ make cross-compiling=yes install_root=$TARGET_PREFIX prefix= install-headers#错误:+-+configure: error: GNU libc requires kernel header files from Linux 2.0.10 or later to be installed before configuring.+-+解决方法:在安装内核头文件的过程中,在设置好内核配置以后,没有使用相应的命令生成 include/linux/version.h 文件。$ cd $PRJROOT/kernel/linux-3.0.3/$ make ARCH=arm CROSS_COMPILE=arm-linux-$ cp -r include/linux/ $TARGET_PREFIX/include$ cp -r include/asm-generic/ $TARGET_PREFIX/include#错误:+-+/usr/bin/install: cannot stat /home/mini/arm/build-tools/build-glibc-headers/gnu/lib-names.h: No such file or directory+-+解决方法:方法一:$ su -# aptitude purge mawk# apt-get install gawk# exit$ cd $PRJROOT/build-tools/build-glibc-headers$ ./glibc-2.13/configure -host=$TARGET -prefix=/usr -enable-add-ons -with-headers=$TARGET_PREFIX/include$ make cross-compiling=yes install_root=$TARGET_PREFIX prefix= install-headers方法二:$ su -# apt-get install gawk# exit$ cd $PRJROOT/build-tools/build-glibc-headers$ vi config.make找到如下行:AWK = mawk将其修改为:AWK = gawk#5.安装 gcc 引导编译器$ cd $PRJROOT/build-tools$ wget /pub/gnu/gcc/gcc-4.6.1/gcc-4.6.1.tar.gz$ wget /gnu/gmp/gmp-5.0.2.tar.gz$ wget /mpfr-current/mpfr-3.0.1.tar.gz$ wget /mpc/download/mpc-0.9.tar.gz$ tar xvf gcc-4.6.1.tar.gz$ tar xvf gmp-5.0.2.tar.gz$ tar xvf mpfr-3.0.1.tar.gz$ tar xvf mpc-0.9.tar.gz$ mv gmp-5.0.2 ./gcc-4.6.1/gmp$ mv mpfr-3.0.1 ./gcc-4.6.1/mpfr$ mv mpc-0.9 ./gcc-4.6.1/mpc$ cd build-boot-gcc$ mkdir -p $TARGET_PREFIX/include/gnu$ touch $TARGET_PREFIX/include/gnu/stubs.h$ ./gcc-4.6.1/configure -target=$TARGET -prefix=$PREFIX -disable-shared -without-headers -with-newlib -enable-languages=c$ make all-gcc all-target-libgcc$ make install-gcc install-target-libgcc#错误:+-+./././gcc-4.6.1/libgcc/./gcc/gthr-posix.h:41:21: fatal error: pthread.h: No such file or directory+-+解决方法:如果没有安装 glibc 头文件,就开始安装 gcc 引导编译器,需要在 configure 后面加上 -disable-threads 选项。$ cd $PRJROOT/build-tools/build-boot-gcc$ ./gcc-4.6.1/configure -target=$TARGET -prefix=$PREFIX -disable-shared -disable-threads -without-headers -with-newlib -enable-languages=c#错误:+-+/home/mini/arm/tools/arm-linux/include/features.h:381:23: fatal error: gnu/stubs.h: No such file or directory+-+解决方法:$ mkdir -p $TARGET_PREFIX/include/gnu$ touch $TARGET_PREFIX/include/gnu/stubs.h#6.安装 glibc$ cd $PRJROOT/build-tools$ cd build-glibc$ CC=arm-linux-gcc ./glibc-2.13/configure -host=$TARGET -prefix=/usr -enable-add-ons -with-headers=$TARGET_PREFIX/include libc_cv_forced_unwind=yes libc_cv_c_cleanup=yes$ ln -s $PREFIX/lib/gcc/arm-linux/4.6.1/libgcc.a $PREFIX/lib/gcc/arm-linux/4.6.1/libgcc_eh.a$ make$ make install_root=$TARGET_PREFIX prefix= install#错误:+-+configure: error: forced unwind support is required+-+解决方法:在 configure 后面加上 libc_cv_forced_unwind=yes 选项。$ cd $PRJROOT/build-tools/build-glibc$ CC=arm-linux-gcc ./glibc-2.13/configure -host=$TARGET -prefix=/usr -enable-add-ons -with-headers=$TARGET_PREFIX/include libc_cv_forced_unwind=yes libc_cv_c_cleanup=yes#错误:+-+configure: error: the compiler must support C cleanup handling+-+解决方法:在 configure 后面加上 libc_cv_c_cleanup=yes 选项。$ cd $PRJROOT/build-tools/build-glibc$ CC=arm-linux-gcc ./glibc-2.13/configure -host=$TARGET -prefix=/usr -enable-add-ons -with-headers=$TARGET_PREFIX/include libc_cv_forced_unwind=yes libc_cv_c_cleanup=yes#错误:+-+./sysdeps/unix/sysv/linux/sys/syscall.h:25:24: fatal error: asm/unistd.h: No such file or directory+-+解决方法:$ cd $PRJROOT/kernel/linux-3.0.3$ cp -r arch/arm/include/asm/ $TARGET_PREFIX/include#错误:+-+./ports/sysdeps/unix/sysv/linux/arm/sigrestorer.S:30: Error: previous CFI entry not closed (missing .cfi_endproc)/tmp/cc9oYU9g.s: Error: open CFI at the end of file; missing .cfi_endproc directive+-+解决方法:$ cd $PRJROOT/build-tools/build-glibc$ vi ./glibc-2.13/ports/sysdeps/unix/sysv/linux/arm/sigrestorer.S找到如下行:ENTRY(_default_sa_restorer)在其下添加:END(_default_sa_restorer)找到如下行:ENTRY(_default_rt_sa_restorer)在其下添加:END(_default_rt_sa_restorer)#错误:+-+/bin/sh: cannot create /home/mini/arm/build-tools/build-glibc/posix/config-name.h.new: Directory nonexistent+-+解决方法:$ cd $PRJROOT/build-tools/build-glibc$ mkdir posix#错误:+-+./sysdeps/unix/syscall-template.S:82: Error: CFI instruction used without previous .cfi_startproc+-+解决方法:$ cd $PRJROOT/build-tools/build-glibc$ vi ./glibc-2.13/sysdeps/unix/syscall-template.S找到如下行:#define T_PSEUDO(SYMBOL, NAME, N) PSEUDO (SYMBOL, NAME, N)在其上添加:#define PSEUDO(name, syscall_name, args) .text; ENTRY (name); DO_CALL (syscall_name, args); cmn r0, $4096;方法来源:./glibc-2.13/ports/sysdeps/unix/sysv/linux/arm/sysdep.h#错误:+-+/home/mini/arm/tools/lib/gcc/arm-linux/4.6.1/././././arm-linux/bin/ld: cannot find -lgcc_eh+-+解决方法:$ ln -s $PREFIX/lib/gcc/arm-linux/4.6.1/libgcc.a $PREFIX/lib/gcc/arm-linux/4.6.1/libgcc_eh.a#错误:+-+./sysdeps/ieee754/dbl-64/s_fma.c:152:15: error: FE_TOWARDZERO undeclared (first use in this function)./sysdeps/ieee754/dbl-64/s_fma.c:152:15: note: each undeclared identifier is reported only once for each function it appears in./sysdeps/ieee754/dbl-64/s_fma.c:159:36: error: FE_INEXACT undeclared (first use in the function)+-+解决方法:$ cd $PRJROOT/build-tools/build-glibc$ vi ./glibc-2.13/sysdeps/ieee754/dbl-64/s_fma.c找到如下行:#include 在其下添加:#define FE_TOWARDZERO 0xc00000#define FE_INEXACT 16方法来源:./glibc-2.13/ports/sysdeps/arm/eabi/bits/fenv.h#错误:+-+./sysdeps/ieee754/dbl-64/s_fmaf.c:39:15: error: FE_TOWARDZERO undeclared (first use in this function)./sysdeps/ieee754/dbl-64/s_fmaf.c:39:15: note: each undeclared identifier is reported only once for each function it appears in./sysdeps/ieee754/dbl-64/s_fmaf.c:43:39: error: FE_INEXACT undeclared (first use in the function)+-+解决方法:$ cd $PRJROOT/build-tools/build-glibc$ vi ./glibc-2.13/sysdeps/ieee754/dbl-64/s_fmaf.c找到如下行:#include 在其下添加:#define FE_TOWARDZERO 0xc00000#define FE_INEXACT 16方法来源:./glibc-2.13/ports/sysdeps/arm/eabi/bits/fe

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论