编译安装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 环境中已经安装以下程序或库 :texinfo gawk( 不能为 mawk ,在编译 glibc 时出错 ) bison flex libgmp3-dev libmpfr-dev autoconf libncurses5-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_BASE CONFIG_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

glibc configure 做补丁

$ 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 .S C 程序或汇编程序

arm-linux-g++

gcc

编译 c++ 程序

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值