免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 11410 | 回复: 7

[开发环境] 构建嵌入式 Linux 开发环境 V0.1(原) [复制链接]

论坛徽章:
4
CU大牛徽章
日期:2013-03-13 15:29:07CU大牛徽章
日期:2013-03-13 15:29:49CU大牛徽章
日期:2013-03-13 15:30:192015年迎新春徽章
日期:2015-03-04 09:57:09
发表于 2011-08-31 17:23 |显示全部楼层
本帖最后由 dooros 于 2011-08-31 17:25 编辑

基于 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 构建。

转载请注明出处:http://hi.baidu.com/busybox/
PS:我写的,哈哈!

1.创建宿主机编译环境
# apt-get install build-essential libncurses5-dev
创建setbuildenv.sh脚本
setbuildenv.sh
+--------------setbuildenv.sh-----------------+
  1. #!/bin/sh
  2. export PRJROOT=/home/mini/arm
  3. export TARGET=arm-linux
  4. export PREFIX=${PRJROOT}/tools
  5. export TARGET_PREFIX=${PREFIX}/${TARGET}
  6. export 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-linux

2.安装内核头文件
$ cd ${PRJROOT}/kernel
$ wget http://www.kernel.org/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 http://ftp.gnu.org/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 install

4.安装 glibc 头文件
$ cd ${PRJROOT}/build-tools
$ wget http://ftp.gnu.org/pub/gnu/glibc/glibc-2.13.tar.gz
$ wget http://ftp.gnu.org/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 http://ftp.gnu.org/pub/gnu/gcc/gcc-4.6.1/gcc-4.6.1.tar.gz
$ wget http://ftp.gnu.org/gnu/gmp/gmp-5.0.2.tar.gz
$ wget http://www.mpfr.org/mpfr-current/mpfr-3.0.1.tar.gz
$ wget http://www.multiprecision.org/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 <ieee754.h>
在其下添加:
#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 <ieee754.h>
在其下添加:
#define FE_TOWARDZERO 0xc00000
#define FE_INEXACT 16
方法来源:
../glibc-2.13/ports/sysdeps/arm/eabi/bits/fenv.h
################################################################################

7.安装 gcc 编译器
cd ${PRJROOT}/build-tools/build-gcc
../gcc-4.6.1/configure --target=${TARGET} --prefix=${PREFIX} --enable-shared --enable-languages=c,c++
make all
make install
################################################################################
错误:
+--------------------------------------------------+
/lib/libc.so.6: file not recognized: File format not recognized
+--------------------------------------------------+
解决方法:
$ cd ${TARGET_PREFIX}/lib
$ cp ./libc.so ./libc.so.bak
修改 libc.so 文件,除掉它列举的链接库的绝对路径。基本上,将需要除掉所有链接库文件名中的 /lib/ 字样。
$ vi libc.so
找到如下行:
GROUP ( /lib/libc.so.6 /lib/libc_nonshared.a AS_NEEDED ( /lib/ld-linux.so.2 ) )
将其修改为:
GROUP ( libc.so.6 libc_nonshared.a AS_NEEDED ( ld-linux.so.2 ) )
################################################################################
错误:
+--------------------------------------------------+
configure: error: Pthreads are required to build libgomp
+--------------------------------------------------+
解决方法:
$ cd ${TARGET_PREFIX}/lib
$ cp ./libpthread.so ./libpthread.so.bak
修改 libpthread.so 文件,除掉它列举的链接库的绝对路径。基本上,将需要除掉所有链接库文件名中的 /lib/ 字样。
$ vi libpthread.so
找到如下行:
GROUP ( /lib/libpthread.so.0 /lib/libpthread_nonshared.a )
将其修改为:
GROUP ( libpthread.so.0 libpthread_nonshared.a )
################################################################################

论坛徽章:
0
发表于 2011-10-17 14:30 |显示全部楼层
你好,我按照你的方法编译交叉工具,在安装GCC引导编译器中make all-gcc all-target-libgcc 结果是这样的
checking for suffix of object files... configure: error: in `/home/scj/arm-cross/build-tools/build-boot-gcc/arm-linux/libgcc':
configure: error: cannot compute suffix of object files: cannot compile,网上有说将GMP和MMPFR库文件位置加入bash_profile就可以,但我的gmp和mpfr中png根本就没有LIB的文件夹,这要怎么解决?谢谢

论坛徽章:
0
发表于 2011-10-29 14:04 |显示全部楼层
玩LFS?

论坛徽章:
49
15-16赛季CBA联赛之福建
日期:2016-06-22 16:22:002015年亚洲杯之中国
日期:2015-01-23 16:25:12丑牛
日期:2015-01-20 09:39:23未羊
日期:2015-01-14 23:55:57巳蛇
日期:2015-01-06 18:21:36双鱼座
日期:2015-01-02 22:04:33午马
日期:2014-11-25 09:58:35辰龙
日期:2014-11-18 10:40:07寅虎
日期:2014-11-13 22:47:15申猴
日期:2014-10-22 15:29:50摩羯座
日期:2014-08-27 10:49:43辰龙
日期:2014-08-21 10:47:58
发表于 2012-06-01 11:19 |显示全部楼层
dooros 发表于 2011-08-31 17:23
基于 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、m ...


非常好的文章,嘿嘿,可以找版主申请精华啊

论坛徽章:
49
15-16赛季CBA联赛之福建
日期:2016-06-22 16:22:002015年亚洲杯之中国
日期:2015-01-23 16:25:12丑牛
日期:2015-01-20 09:39:23未羊
日期:2015-01-14 23:55:57巳蛇
日期:2015-01-06 18:21:36双鱼座
日期:2015-01-02 22:04:33午马
日期:2014-11-25 09:58:35辰龙
日期:2014-11-18 10:40:07寅虎
日期:2014-11-13 22:47:15申猴
日期:2014-10-22 15:29:50摩羯座
日期:2014-08-27 10:49:43辰龙
日期:2014-08-21 10:47:58
发表于 2012-06-01 11:19 |显示全部楼层
dooros 发表于 2011-08-31 17:23
基于 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、m ...


还有,兄弟的博客可以考虑搬到CU来嘛

论坛徽章:
13
15-16赛季CBA联赛之同曦
日期:2016-01-28 19:52:032015亚冠之北京国安
日期:2015-10-07 14:28:19NBA常规赛纪念章
日期:2015-05-04 22:32:03处女座
日期:2015-01-15 19:45:44卯兔
日期:2014-10-28 16:17:14白羊座
日期:2014-05-24 15:10:46寅虎
日期:2014-05-10 09:50:35白羊座
日期:2014-03-12 20:52:17午马
日期:2014-03-01 08:37:27射手座
日期:2014-02-19 19:26:54子鼠
日期:2013-11-30 09:03:56狮子座
日期:2013-09-08 08:37:52
发表于 2012-06-02 20:57 |显示全部楼层
很好,支持!

论坛徽章:
4
CU大牛徽章
日期:2013-03-13 15:29:07CU大牛徽章
日期:2013-03-13 15:29:49CU大牛徽章
日期:2013-03-13 15:30:192015年迎新春徽章
日期:2015-03-04 09:57:09
发表于 2012-06-03 23:13 |显示全部楼层
版主在没?我申精啊!!

论坛徽章:
0
发表于 2012-06-05 21:36 |显示全部楼层
现在正是学习的时候!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP