编译安装arm-linux交叉编译工具链

编译环境:Ubuntu 8.10

编译用到的文件:binutils-2.19.1.tar.bz2  linux-2.6.28.8.tar.bz2 gcc-core-4.3.2.tar.bz2 mpfr-2.3.2.tar.bz2 gmp-4.2.4.tar.bz2 gcc-g++-4.3.2.tar.bz2 glibc-2.7.tar.bz2

 

第一步:配置编译环境

首先确认Ubuntu 8.10环境中已经安装以下程序或库:texinfogawk(不能为mawk,在编译glibc时出错)bisonflexlibgmp3-devlibmpfr-devautoconflibncurses5-dev

  $ sudo  apt-get  remove  mawk

$ sodu  apt-get  install  texinfo  gawk  bison  flex  libgmp3-dev  libmpfr-dev  autoconf  libncurses5-dev

$ sudo passwd root

  root用户增加密码

工具链选择安装于:/usr/local/cross-arm

~/.bashrc中加入环境变量

export PATH=/usr/local/cross-arm/bin:/usr/local/cross-arm/arm-linux:$PATH

保存并退出~/.bashrc

使~/.bashrc立即生效:

$ source ~/.bashrc

 

第二步:编译binutils

$ tar  -xvjf  binutils-2.19.1.tar.bz2

$ cd  binutils-2.19.1

$ mkdir  build

$ cd  build

$ ../configure  --target=arm-linux  --prefix=/usr/local/cross-arm

$ make all

此时可能会编译出错:

../../gas/config/tc-arm.c:  在函数’s_arm_unwind_save_mmxwr’中:

../../gas/config/tc-arm.c:  3459:错误: 格式字符串不是一个字面字符串而且没有待格式化的实参

../../gas/config/tc-arm.c:  3473:错误: 格式字符串不是一个字面字符串而且没有待格式化的实参

../../gas/config/tc-arm.c:  在函数’s_arm_unwind_save_mmxwcg’中:

../../gas/config/tc-arm.c:  3591:错误: 格式字符串不是一个字面字符串而且没有待格式化的实参

../../gas/config/tc-arm.c:  3606:错误: 格式字符串不是一个字面字符串而且没有待格式化的实参

../../gas/config/tc-arm.c:  在函数’s_arm_unwind_save_movsp’中:

../../gas/config/tc-arm.c:  3712:错误: 格式字符串不是一个字面字符串而且没有待格式化的实参

打开并修改tc-arm.c

@@3459@@

原:as_bad(_(reg_expected_msgs[REG_TYPE_MMXWR]));

改为:as_bad(“%s”,_(reg_expected_msgs[REG_TYPE_MMXWR]));

@@3473@@

原:as_bad(_(reg_expected_msgs[REG_TYPE_MMXWR]));

改为:as_bad(“%s”,_(reg_expected_msgs[REG_TYPE_MMXWR]));

@@3591@@

原:as_bad(_(reg_expected_msgs[REG_TYPE_MMXWCG]));

改为:as_bad(“%s”,_(reg_expected_msgs[REG_TYPE_ MMXWCG]));

@@3606@@

原:as_bad(_(reg_expected_msgs[REG_TYPE_MMXWCG]));

改为:as_bad(“%s”,_(reg_expected_msgs[REG_TYPE_ MMXWCG]));

@@3712@@

原:as_bad(_(reg_expected_msgs[REG_TYPE_RN]));

改为:as_bad(“%s”,_(reg_expected_msgs[REG_TYPE_ RN]));

保存。

$ make all

$ sudo make all install

 

第三步:basic GCC

$ tar -jxvf  gcc-core-4.3.2.tar.bz2

$ tar -jxvf  mpfr-2.3.2.tar.bz2

$ tar -jxvf  gmp-4.2.4.tar.bz2

$ mv mpfr-2.3.2  gcc-4.3.2/mpfr

$ mv gmp-4.2.4  gcc-4.3.2/gmp

$ cp  gcc-4.3.2/gcc/config/arm/t-linux  gcc-4.3.2/gcc/config/arm/t-linux.orig

$ vim  gcc-4.3.2/gcc/config/arm/t-linux

TARGET_LIBGCC2_CFLAGS = 增加操作参数 -Dinhibit_libc -D__gthr_posix_h

 保存退出。

$ cd  gcc-4.3.2

$ mkdir  build

$ cd  bulid

$../configure --target=arm-linux --prefix=/usr/local/cross-arm --disable-threads --disable-shared  --enable-languages=c  --disable-libmudflap  --disable-libssp

$ make  all

 忽略编译中的错误,继续往下进行

$ sudo make install

 

第四步: 创建头文件,主要是kernel的头文件

$ tar -jxvf  linux-2.6.28.8tar.bz2

$ cd  linux-2.6.28.8

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

$ make  ARCH=arm  CROSS_COMPILE=arm-linux-  s3c2410_defconfig

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

$ make  ARCH=arm  CROSS_COMPILE=arm-linux-  menuconfig

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

$ make  ARCH=arm  CROSS_COMPILE=arm-linux-

$ vi  arch/arm/include/asm/memory.h

  修改__deprecated__attribute__((deprecated))

修改为

增加宏CONFIG_DRAM_BASECONFIG_DRAM_SIZE的定义(随便定义即可)

保存后退出

$ sudo  cp  -a  include/linux  /usr/local/arm/4.3.2/include/linux

$ sudo  cp  -a  include/asm-arm  /usr/local/arm/4.3.2/include/asm

$ sudo  cp  -a  include/asm-generic  /usr/local/arm/4.3.2/include/asm-generic

$ sudo  cp  -a  arch/arm/include/asm  /usr/local/arm/4.3.2/include

$ sudo  cp  -a  arch/arm/mach-s3c2410/include/mach  /usr/local/arm/4.3.2/include/asm

 

第五步:glibc

$ tar  -jxvf  glibc-2.7.tar.bz2

$ tar  -jxvf  glibc-ports-2.7.tar.bz2

$ mv  -v  glibc-ports-2.7  glibc-2.7/ports

$ cd  glibc-2.7

打补丁:

$ patch  -Np1  -I  ../glibc-2.7-alpha_ioperm_fix-1.patch

$ patch  -Np1  -i  ../glibc-2.7-alpha_PTR_MANGLE_fix-1.patch

$ patch  -Np1  -I  ../glibc-2.7-branch_update-1.patch

$ patch  -Np1  -I  ../glibc-2.7-branch_update-1A.patch

$ patch  -Np1  -I  ../glibc-2.7-libgcc_eh-1.patch

$ patch  -Np1  -I  ../glibc-2.7-localedef_segfault-1.patch

glibcconfigure做补丁

$ sed  -I  -e  "/ccheaders=/s@\`\(\$CC.*include\)\`@\"& -isystem \`\1-fixed\`\"@"            configure

$ sed -i ''s/# define UNDOCARGS_5\tUNDOCARGS_4/&\n\n# define DOCARGS_6\tDOCARGS_5\n# define UNDOCARGS_6\tUNDOCARGS_5/'' ports/sysdeps/unix/sysv/linux/arm/nptl/sysdep-cancel.h

$ vi  ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h

增加头文件#include

$ cd  /usr/local/cross-arm/include/asm

$ ln  -s  arch-s3c2410  arch

$ cd –

$ vi /usr/local/cross-arm/include/asm/unistd.h

311行加入:

#define __ARM_NR_set_tls (__ARM_NR_BASE+5)

285行加入:

#define __NR_set_tid_address        (__NR_SYSCALL_BASE+256)

$ mkdir  build

$ cd  build

$ CC=arm-linux-gcc AR=arm-linux-ar RANLIB=arm-linux-ranlib ../configure --host=arm-linux --prefix=/usr/local/cross-arm/arm-linux --enable-add-ons --with-headers=/usr/local/cross-arm/include libc_cv_forced_unwind=yes libc_cv_c_cleanup=yes

$ make

$ sudo  make  install

 

第六步:full GCC

$ tar -jxvf  gcc-core-4.3.2.tar.bz2

$ tar -jxvf  mpfr-2.3.2.tar.bz2

$ tar -jxvf  gmp-4.2.4.tar.bz2

$ mv mpfr-2.3.2  gcc-4.3.2/mpfr

$ mv gmp-4.2.4  gcc-4.3.2/gmp

$ tar -xvjf  gcc-g++-4.3.2.tar.bz2

$ cd  gcc-4.3.2

$ mkdir  build

$ cd  bulid

$../configure --target=arm-linux --prefix=/usr/local/cross-arm --enable-languages=c,c++ --enable-threads=posix  --enable-shared --enable-__cxa_atexit --with-local-prefix=/usr/local/cross-arm/arm-linux

$ make  all

$ sudo make install

名称

归属

作用

arm-linux-as

binutils

编译ARM汇编程序

arm-linux-ar

binutils

把多个.o合并成一个.o或静状库(.a)

arm-linux-ranlib

binutils

为库文件建立索引,相当于: arm-linux-ar  –s

arm-linux-ld

binutils

连接器(Linker),把多个.o或库文件连接成一个可执行文件

arm-linux-objdump

binutils

查看目标文件(.o)和库(.a)的信息

arm-linux-objcopy

binutils

转换可执行文件的格式

arm-linux-strip

binutils

去掉elf可执行文件的信息,使可执行文件变小

arm-linux-readelf

binutils

elf可执行文件的信息

arm-linux-gcc

gcc

编译.c.SC程序或汇编程序

arm-linux-g++

gcc

编译c++程序


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值