Chinaunix首页 | 论坛 | 博客
  • 博客访问: 59233
  • 博文数量: 12
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 100
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-19 16:31
文章存档

2014年(7)

2007年(5)

我的朋友

分类: 嵌入式

2014-04-19 11:00:50

 

主机环境:

[html] view plaincopy

  1. ubuntu 12.04.1 64bit  
  2. gcc version 4.6.3  


1.
下载最新源码包

[html] view plaincopy

  1. binutils-2.22.tar.gz  
  2.   
  3. gcc-4.7.2.tar.bz2  
  4. gmp-5.0.5.tar.xz  
  5. mpfr-3.1.1.tar.xz  
  6. mpc-1.0.1.tar.gz  
  7.   
  8. glibc-2.16.0.tar.xz  
  9. glibc-linuxthreads-2.5.tar.bz2  
  10. glibc-ports-2.16.0.tar.xz  
  11.   
  12. linux-3.5.4.tar.bz2  

   将以上源码包放入~/src目录中

1.
配置编译环境

[html] view plaincopy

  1. vim /etc/profile 
  2. 将以下内容写入profile文件中保存退出  
  3. TARGET=arm-linux-gnueabi  
  4. PREFIX=/opt/cross/gcc-4.7.2/$TARGET  
  5. PATH=$PREFIX/bin:$PATH  
  6.   
  7. export TARGET PREFIX PATH  
  8.   
  9. 配置编译环境  
  10.  重启使配置环境失效


2.
编译binutils

[html] view plaincopy

  1. tar -xzf binutils-2.22.tar.gz  
  2. mkdir binutils-build  
  3. cd binutils-build  
  4. ../binutils-2.22/configure --target=$TARGET --prefix=$PREFIX  
  5. make -j2  
  6. sudo make install  
  7. cd ..  

3. 第一次编译gcc

[html] view plaincopy

  1. tar -xjf gcc-4.7.2.tar.bz2  
  2. mkdir gcc-bootstrap-build  
  3. tar -xf gmp-5.0.5.tar.xz  
  4. tar -xf mpfr-3.1.1.tar.xz  
  5. tar -xf mpc-1.0.1.tar.gz  
  6. cd gcc-4.7.2  
  7. mv -v gmp-5.0.5 gmp  
  8. mv -v mpfr-3.1.1 mpfr  
  9. mv -v mpc-1.0.1 mpc  
  10. cd ../gcc-bootstrap-build  
  11. 修改 gcc/gengtype.c 文件如下:
write_field_root (outf_p f, pair_p v, type_p type, const char *name,
                  int has_length, struct fileloc *line, const char *if_marked,
                  bool emit_pch, type_p field_type, const char *field_name)
 {
+  struct pair newv;
   /* If the field reference is relative to V, rather than to some
      subcomponent of V, we can mark any subarrays with a single stride.
      We're effectively treating the field as a global variable in its
      own right.  */
   if (v && type == v->type)
     {
-      struct pair newv;
 
       newv = *v;
       newv.type = field_type;
  1.   
  2. ../gcc-4.7.2/configure \  
  3.   --target=$TARGET --host=x86_64-linux-gnu --build=x86_64-linux-gnu \  
  4.   --enable-targets=all --prefix=$PREFIX \  
  5.   --enable-languages=c --with-newlib --without-headers --disable-nls \  
  6.   --disable-threads --disable-shared --disable-libmudflap --disable-libssp \  
  7.   --disable-libgomp --disable-decimal-float --enable-checking=release \  
  8.   --disable-bootstrap --disable-libquadmath \  
  9.   --with-mpfr-include=$(pwd)/../gcc-4.7.2/mpfr/src \  
  10.   --with-mpfr-lib=$(pwd)/mpfr/src/.libs  
  11. make -j2 all-gcc   
  12. make -j2 all-target-libgcc  
  13. sudo make install-gcc  
  14. sudo make install-target-libgcc  
  15. sudo cp -v libiberty/libiberty.a $PREFIX/lib  
  16. 以下添加libgcc_eh.a,libgcc_s.alibgcc.a的软链接,防止编译C库时出错  
  17. sudo ln -vs libgcc.a `arm-linux-gnueabi-gcc -print-libgcc-file-name | sed 's/libgcc/&_eh/'`  
  18. sudo ln -vs libgcc.a `arm-linux-gnueabi-gcc -print-libgcc-file-name | sed 's/libgcc/&_s/'`  
  19. cd ..  

4. 安装内核头文件

[html] view plaincopy

  1. tar -xjf linux-3.5.4.tar.bz2  
  2. cd linux-3.5.4  
  3. make ARCH=arm headers_check  
  4. make ARCH=arm INSTALL_HDR_PATH=dest headers_install  
  5. sudo cp -rv dest/include/* $PREFIX/$TARGET/include  
  6. 注意:内核头文件的安装位置是$PREFIX/$TARGET/include,而不是$PREFIX  
  7. cd ..  


5.
编译C

[html] view plaincopy

  1. tar -xf glibc-2.16.0.tar.xz  
  2. tar -xjf glibc-linuxthreads-2.5.tar.bz2 -C glibc-2.16.0  
  3. tar -xf glibc-ports-2.16.0.tar.xz  
  4. mv glibc-ports-2.16.0 glibc-2.16.0/ports  
  5. mkdir glibc-build  
  6. cd glibc-build  
  7.   
  8. CC=$TARGET-gcc \  
  9. AR=$TARGET-ar \  
  10. RANLIB=$TARGET-ranlib \  
  11. ../glibc-2.16.0/configure \  
  12.   --host=$TARGET \  
  13.   --prefix=$PREFIX/$TARGET \  
  14.   --with-tls --disable-profile \  
  15.   --enable-add-ons --with-headers=$PREFIX/$TARGET/include \  
  16.   libc_cv_forced_unwind=yes libc_cv_c_cleanup=yes libc_cv_arm_tls=yes  
  17. 注意:C库的安装位置是$PREFIX/$TARGET,编译完整的gcc时链接使用  
  18. sudo make -j2  
  19. sudo -s  
  20. make install  
  21. exit  
  22. cd ..  


6.
编译完整的gcc

[html] view plaincopy

  1.   
  2. ../gcc-4.7.2/configure --target=$TARGET \  
  3.   --host=x86_64-linux-gnu --build=x86_64-linux-gnu \  
  4.   --prefix=$PREFIX \  
  5.   --enable-languages=c,c++ --enable-shared  
  6. make -j2  
  7. sudo make install  
  8. cd ..  

阅读(546) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~