软件包准备(请到
ftp.gnu.org
下载)
binutils-2.15.tar.gz
gcc-core-3.4.2.tar.bz2
gcc-g++3.4.2.tar.bz2
glibc-2.3.5.tar.gz
glibc-linuxthreads-2.3.5.tar.bz2
linux-2.6.9.tar.gz
我们的工作路径是(用 root 用户登录):
~/tars/SourceDir
~/tars/BuildDir
/armtools
# cd ~
# mkdir –p tars/SourceDir
# mkdir tars/BuildDir
# mkdir /armtools
tars --------------- 在这里放我们的下载来的所有源文件
SourceDir ------ 这个临时目录放我们解压缩后的源文件
BuildDir --------- 我们在这里编译
armtools -------- 把 arm-linux 交叉编译环境的安装在这里
1. 编译 binutils
# cd ~/tars/SourceDir
# tar -zxf ../binutils-2.15.tar.gz
# cd ~/tars/BuildDir
# mkdir binutils
# cd binutils
# ../../SourceDir/binutils-2.15/configure --target=arm-linux /
--prefix=/armtools
# make ; make install
# export PATH=/armtools/bin:$PATH
( 安装成功。 )
2. 解压缩,配置,拷贝头文件
# cd ~/tars/SourceDir
# tar -zxf ../linux-2.6.9.tar.gz
# cd linux-2.6.9
# vi Makefile
把里面的 SUBARCH 那行 注释掉
# SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ /
-e s/arm.*/arm/ -e s/sa110/arm/ /
-e s/s390x/s390/ -e s/parisc64/parisc/ )
然后新加一行 SUBARCH := arm
# CROSS_COMPILE ?= (注释掉)
然后新加一行 CROSS_COMPILE = arm-linux-
# make menuconfig 选中 s3c2410
# make include/linux/version.h 就创建了一个在源码目录下 include/linux/version.h 的文件
# mkdir -p /armtools/arm-linux/include
# cp -dR include/asm-arm /armtools/arm-linux/include/asm
# cp -dR include/linux /armtools/arm-linux/include/linux
( 完成 )
3 .编译 gcc-3.4.2
# cd ~/tars/SourceDir
# tar -jxf ../gcc-core-3.4.2.tar.bz2
给 gcc 打一个补丁,在目录 gcc-3.4.2/gcc/ 下编辑一个文件 flow.c.diff , patch flow.c –p1 < flow.c.diff 内容如下
=============================================================
RCS file: /cvs/gcc/gcc/gcc/flow.c,v
retrieving revision 1.593
retrieving revision 1.594
diff -u -r1.593 -r1.594
--- gcc/gcc/flow.c 2004/07/09 03:29:32 1.593
+++ gcc/gcc/flow.c 2004/08/02 13:19:39 1.594
@@ -1865,19 +1865,22 @@
rtx set_src = SET_SRC (pc_set (BB_END (bb)));
rtx cond_true = XEXP (set_src, 0);
rtx reg = XEXP (cond_true, 0);
+ enum rtx_code inv_cond;
if (GET_CODE (reg) == SUBREG)
reg = SUBREG_REG (reg);
/* We can only track conditional lifetimes if the condition is
- in the form of a comparison of a register against zero.
- If the condition is more complex than that, then it is safe
- not to record any information. */
- if (REG_P (reg)
+ in the form of a reversible comparison of a register against
+ zero. If the condition is more complex than that, then it is
+ safe not to record any information. */
+ inv_cond = reversed_comparison_code (cond_true, BB_END (bb));
+ if (inv_cond != UNKNOWN
+ && REG_P (reg)
&& XEXP (cond_true, 1) == const0_rtx)
{
rtx cond_false
- = gen_rtx_fmt_ee (reverse_condition (GET_CODE (cond_true)),
+ = gen_rtx_fmt_ee (inv_cond,
GET_MODE (cond_true), XEXP (cond_true, 0),
XEXP (cond_true, 1));
if (GET_CODE (XEXP (set_src, 1)) == PC)
=============================================================
用此文件给 flow.c 打补丁,或者依此文件直接修改 flow.c (修改前请备份这两个文件)
# cd ~/tars/BuildDir
# mkdir gcc-core
# cd gcc-core
# ../../SourceDir/gcc-3.4.2/configure --target=arm-linux --prefix=/armtools --enable-
languages=c --disable-shared --disable-threads --without-headers --with-newlib
# make ; make install
4. 编译安装 glibc
# cd ~/tars/SourceDir
# tar -zxf ../glibc-2.3.5.tar.gz
# cd glibc-2.3.5
# tar -jxf ../../glibc-linuxthreads-2.3.5.tar.gz
# cd ~/tars/BuildDir
# mkdir glibc
# cd glibc
# export CC=arm-linux-gcc
#cp -dR ~/tars/SourceDir/linux-2.6.9/include/asm-generic /armtools/arm-linux/include/
# vi ~/tars/SourceDir/glibc-2.3.5/sysdeps/unix/sysv/linux/arm/ioperm.c
将里面的 BUS_ISA 改为 CTL_BUS_ISA
# vi ~/tars/SourceDir/glibc-2.3.5/Makeconfig, 把里面的 -lgcc_eh 都删掉
# ~/tars/SourceDir/glibc-2.3.5/configure --prefix=/armtools/arm-linux /
--host=arm-linux /
--build=i686-pc-linux-gnu /
--with-headers=/armtools/arm-linux/include /
--enable-add-ons=linuxthreads
# make ;make install
5. 编译安装 gcc 的 c, c++ 编译器。
# cd ~/tars/SourceDir/
# tar -jxf ../gcc-g++-3.4.2.tar.bz2
# cd ~/tars/BuildDir/
# mkdir gcc
# cd gcc
# unset CC
# ../../SourceDir/gcc-3.4.2/configure --prefix=/usr/arm_tools/
--target=arm-linux /
--enable-languages=c,c++ /
--without-headers /
--disable-shared
# make ;make install
编辑一个 helloworld.c 编译一下,没有问题
binutils-2.15.tar.gz
gcc-core-3.4.2.tar.bz2
gcc-g++3.4.2.tar.bz2
glibc-2.3.5.tar.gz
glibc-linuxthreads-2.3.5.tar.bz2
linux-2.6.9.tar.gz
我们的工作路径是(用 root 用户登录):
~/tars/SourceDir
~/tars/BuildDir
/armtools
# cd ~
# mkdir –p tars/SourceDir
# mkdir tars/BuildDir
# mkdir /armtools
tars --------------- 在这里放我们的下载来的所有源文件
SourceDir ------ 这个临时目录放我们解压缩后的源文件
BuildDir --------- 我们在这里编译
armtools -------- 把 arm-linux 交叉编译环境的安装在这里
1. 编译 binutils
# cd ~/tars/SourceDir
# tar -zxf ../binutils-2.15.tar.gz
# cd ~/tars/BuildDir
# mkdir binutils
# cd binutils
# ../../SourceDir/binutils-2.15/configure --target=arm-linux /
--prefix=/armtools
# make ; make install
# export PATH=/armtools/bin:$PATH
( 安装成功。 )
2. 解压缩,配置,拷贝头文件
# cd ~/tars/SourceDir
# tar -zxf ../linux-2.6.9.tar.gz
# cd linux-2.6.9
# vi Makefile
把里面的 SUBARCH 那行 注释掉
# SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ /
-e s/arm.*/arm/ -e s/sa110/arm/ /
-e s/s390x/s390/ -e s/parisc64/parisc/ )
然后新加一行 SUBARCH := arm
# CROSS_COMPILE ?= (注释掉)
然后新加一行 CROSS_COMPILE = arm-linux-
# make menuconfig 选中 s3c2410
# make include/linux/version.h 就创建了一个在源码目录下 include/linux/version.h 的文件
# mkdir -p /armtools/arm-linux/include
# cp -dR include/asm-arm /armtools/arm-linux/include/asm
# cp -dR include/linux /armtools/arm-linux/include/linux
( 完成 )
3 .编译 gcc-3.4.2
# cd ~/tars/SourceDir
# tar -jxf ../gcc-core-3.4.2.tar.bz2
给 gcc 打一个补丁,在目录 gcc-3.4.2/gcc/ 下编辑一个文件 flow.c.diff , patch flow.c –p1 < flow.c.diff 内容如下
=============================================================
RCS file: /cvs/gcc/gcc/gcc/flow.c,v
retrieving revision 1.593
retrieving revision 1.594
diff -u -r1.593 -r1.594
--- gcc/gcc/flow.c 2004/07/09 03:29:32 1.593
+++ gcc/gcc/flow.c 2004/08/02 13:19:39 1.594
@@ -1865,19 +1865,22 @@
rtx set_src = SET_SRC (pc_set (BB_END (bb)));
rtx cond_true = XEXP (set_src, 0);
rtx reg = XEXP (cond_true, 0);
+ enum rtx_code inv_cond;
if (GET_CODE (reg) == SUBREG)
reg = SUBREG_REG (reg);
/* We can only track conditional lifetimes if the condition is
- in the form of a comparison of a register against zero.
- If the condition is more complex than that, then it is safe
- not to record any information. */
- if (REG_P (reg)
+ in the form of a reversible comparison of a register against
+ zero. If the condition is more complex than that, then it is
+ safe not to record any information. */
+ inv_cond = reversed_comparison_code (cond_true, BB_END (bb));
+ if (inv_cond != UNKNOWN
+ && REG_P (reg)
&& XEXP (cond_true, 1) == const0_rtx)
{
rtx cond_false
- = gen_rtx_fmt_ee (reverse_condition (GET_CODE (cond_true)),
+ = gen_rtx_fmt_ee (inv_cond,
GET_MODE (cond_true), XEXP (cond_true, 0),
XEXP (cond_true, 1));
if (GET_CODE (XEXP (set_src, 1)) == PC)
=============================================================
用此文件给 flow.c 打补丁,或者依此文件直接修改 flow.c (修改前请备份这两个文件)
# cd ~/tars/BuildDir
# mkdir gcc-core
# cd gcc-core
# ../../SourceDir/gcc-3.4.2/configure --target=arm-linux --prefix=/armtools --enable-
languages=c --disable-shared --disable-threads --without-headers --with-newlib
# make ; make install
4. 编译安装 glibc
# cd ~/tars/SourceDir
# tar -zxf ../glibc-2.3.5.tar.gz
# cd glibc-2.3.5
# tar -jxf ../../glibc-linuxthreads-2.3.5.tar.gz
# cd ~/tars/BuildDir
# mkdir glibc
# cd glibc
# export CC=arm-linux-gcc
#cp -dR ~/tars/SourceDir/linux-2.6.9/include/asm-generic /armtools/arm-linux/include/
# vi ~/tars/SourceDir/glibc-2.3.5/sysdeps/unix/sysv/linux/arm/ioperm.c
将里面的 BUS_ISA 改为 CTL_BUS_ISA
# vi ~/tars/SourceDir/glibc-2.3.5/Makeconfig, 把里面的 -lgcc_eh 都删掉
# ~/tars/SourceDir/glibc-2.3.5/configure --prefix=/armtools/arm-linux /
--host=arm-linux /
--build=i686-pc-linux-gnu /
--with-headers=/armtools/arm-linux/include /
--enable-add-ons=linuxthreads
# make ;make install
5. 编译安装 gcc 的 c, c++ 编译器。
# cd ~/tars/SourceDir/
# tar -jxf ../gcc-g++-3.4.2.tar.bz2
# cd ~/tars/BuildDir/
# mkdir gcc
# cd gcc
# unset CC
# ../../SourceDir/gcc-3.4.2/configure --prefix=/usr/arm_tools/
--target=arm-linux /
--enable-languages=c,c++ /
--without-headers /
--disable-shared
# make ;make install
编辑一个 helloworld.c 编译一下,没有问题
OK
,
Congratulations!
最后打包压缩一下
# cd ~
# tar -cf armtools.tar /armtools (大小 198021120 )
# bzip2 -z armtools.tar (大小 51055772 )
最后打包压缩一下
# cd ~
# tar -cf armtools.tar /armtools (大小 198021120 )
# bzip2 -z armtools.tar (大小 51055772 )
Linux kerel 2.4
在 Host 机上建立 arm-linux-gcc 交叉编译环境:
我们采用的源代码版本和下载路径如下:
binutils-2.14.tar.gz
ftp://ftp.gnu.org/gnu/binutils/binutils-2.14.tar.gz
gcc-core-2.95.3.tar.gz
ftp://ftp.gnu.org/gnu/gcc/gcc-2.95.3/gcc-core-2.95.3.tar.gz
gcc-g++2.95.3.tar.gz
ftp://ftp.gnu.org/gnu/gcc/gcc-2.95.3/gcc-g++-2.95.3.tar.gz
glibc-2.2.4.tar.gz
ftp://ftp.gnu.org/gnu/glibc/glibc-2.2.4.tar.gz
glibc-linuxthreads-2.2.4.tar.gz
ftp://ftp.gnu.org/gnu/glibc/glibc-linuxthreads-2.2.4.tar.gz
linux-2.4.21.tar.gz
ftp://ftp.kernle.org/pub/....../v2.4/linux-2.4.21.tar.gz
patch-2.4.21-rmk1.gz
ftp://ftp.arm.linux.org.u......v2.4/patch-2.4.21-rmk1.gz
我们在 bash 下工作,先设定一些变量:
# export VBINUTILS=2.14
# export VGCC=2.95.3
# export VGLIBC=2.2.4
# export VLINUX=2.4.21
# export VLINUX_PATCH=rmk1
# export PREFIX=/armtools
# export TARGET=arm-linux
我们的工作路径是(用 root 用户登录):
~/tars/SourceDir
~/tars/BuildDir
/armtools
# cd ~
# mkdir –p tars/SourceDir
# mkdir tars/BuildDir
# mkdir /armtools
tars --------------- 在这里放我们的下载来的 .tar.gz 文件
SourceDir ------ 这个临时目录放我们解压缩后的源文件
BuildDir --------- 我们在这里编译
armtools -------- 把 arm-linux 交叉编译环境的安装在这里
1. 1 安装 linux 的头文件当你为不同类型的 ARM 编译 gcc ,或编译不同版本的 kernel ,或交叉编译 gcc 时都需要一套不同的 linux 头文件。
(1) 解压缩,打补丁
# cd ~/tars/SourceDir
# tar -zxf ../linux-$VLINUX.tar.gz
# mv linux-2.4.21 linux
# cd linux
# zcat ../../patch-$VLINUX-$VLINUX_PATCH.gz | patch -p1
(2) 清理一下 $ make mrproper
(3) 修改 Makefile 将 Makefile 中 ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/) 这一行注释掉,并加一行 ARCH=arm 。修改后象这样:
ARCH=arm
# ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/)
然后运行
# make menuconfig 进行适当配置
此版本内核中,在 System type 里面根据板子设置 ( )ARM system type
(4) 建立连接
# cd ~/tars/SourceDir/linux/include/asm
如果里面没有 proc 和 arch 两个链接文件的话,运行下面两个命令。如果有,就跳过下两个命令。
# ln –s proc-armv proc
# ln –s arch-*(* 代表板子名称 ) arch
(5) 拷贝头文件
# mkdir -p $PREFIX/$TARGET/include
# cd ~/tars/SourceDir/linux/
# cp -dR include/linux $PREFIX/$TARGET/include
# cp -dR include/asm-arm $PREFIX/$TARGET/include/asm
(6) 为 gcc 建立一个 linux kernel 头文件的连接。
# cd $PREFIX/$TARGET
# ln -s include sys-include
1.2 编译安装 binutils 这里用不到前面准备的 linux 头文件
# cd ~/tars/SourceDir
# tar -zxf ../binutils-$VBINUTILS.tar.gz
# cd ~/tars/BuildDir
# mkdir binutils
# cd binutils
#../../SourceDir/binutils-$VBINUTILS/configure --target=$TARGET --prefix=$PREFIX
# make all install
(3) export PATH=$PREFIX/bin:$PATH
1.3 编译安装 gcc 的 c 编译器
(1) 解压缩
# cd ~/tars/SourceDir
# tar -zxf ../gcc-core-$VGCC.tar.gz
(2) 修改 gcc 的 t-linux 文件
# cd gcc-$VGCC/gcc/config/arm
# mv t-linux t-linux-orig
# sed 's/TARGET_LIBGCC2_CFLAGS = /TARGET_LIBGCC2_CFLAGS = -D__gthr_posix_h -Dinhibit_libc/' < t-linux-orig > t-linux-core
# cp ./t-linux-core ./t-linux
(3) 编译
# cd ~/tars/BuildDir
#mkdir gcc-core
# cd gcc-core
# ../../SourceDir/gcc-$VGCC/configure --target=$TARGET --prefix=$PREFIX --enable-languages=c --disable-shared --disable-threads
# make all install
1.4 编译安装 glibc
(1) 解压缩
# cd ~/tars/SourceDir
# tar -zxf ../glibc-$VGLIBC.tar.gz
# cd glibc-$VGLIBC
# tar -zxf ../../glibc-linuxthreads-$VGLIBC.tar.gz
(2) 编译
# cd ~/tars/BuildDir
# mkdir glibc
# cd glibc
# CC=$TARGET-gcc AR=$TARGET-ar RANLIB=$TARGET-ranlib /
../../SourceDir/glibc-$VGLIBC/configure /
--host=$TARGET --prefix=$PREFIX/$TARGET --enable-add-ons
# make all install (这步花了很长时间)
1.5. 编译安装 gcc 的 c, c++ 编译器
(1) 恢复 t-linux 文件
# cd ~/tars/SourceDir/gcc-$VGCC/gcc/config/arm/
# cp t-linux-orig t-linux
(2) 解压缩 c++ 编译器
# cd ~/tars/SourceDir/
# tar -zxf ../gcc-g++-$VGCC.tar.gz
# cd ~/tars/BuildDir
# mkdir gcc
# cd gcc
(3) 编译
# ../../SourceDir/gcc-$VGCC/configure --target=$TARGET --prefix=$PREFIX --enable-languages=c,c++ --with-included-gettext
# make all install
注:如果你下载的是 filename.tar.bz2 ,你可以用如下命令之一解压缩,第三种方式在任何系统中都好使。
第一种方式: # tar -jxf filename.tar.bz2
第二种方式: # tar -Ixf filename.tar.bz2
第三种方式: # bzip2 -dc filename.tar.bz2 | tar xf –
如果你是第一次制作 arm-linux 交叉编译环境,强烈建议你用本文所使用的各个程序的版本。如果用其它版本,按照本文的方法可能会在编译的时候出问题。
生成的 toolchain 大于 150 兆,用如下方法压缩:
# cd ~
# tar -cf armtools.tar /armtools (大小 157399040 )
# bzip2 -z armtools.tar (大小 32688701 )
压缩后生成的 armtools.tar.bz2 大概有 30 几兆。
我们在 bash 下工作,先设定一些变量:
# export VBINUTILS=2.14
# export VGCC=2.95.3
# export VGLIBC=2.2.4
# export VLINUX=2.4.21
# export VLINUX_PATCH=rmk1
# export PREFIX=/armtools
# export TARGET=arm-linux
我们的工作路径是(用 root 用户登录):
~/tars/SourceDir
~/tars/BuildDir
/armtools
# cd ~
# mkdir –p tars/SourceDir
# mkdir tars/BuildDir
# mkdir /armtools
tars --------------- 在这里放我们的下载来的 .tar.gz 文件
SourceDir ------ 这个临时目录放我们解压缩后的源文件
BuildDir --------- 我们在这里编译
armtools -------- 把 arm-linux 交叉编译环境的安装在这里
1. 1 安装 linux 的头文件当你为不同类型的 ARM 编译 gcc ,或编译不同版本的 kernel ,或交叉编译 gcc 时都需要一套不同的 linux 头文件。
(1) 解压缩,打补丁
# cd ~/tars/SourceDir
# tar -zxf ../linux-$VLINUX.tar.gz
# mv linux-2.4.21 linux
# cd linux
# zcat ../../patch-$VLINUX-$VLINUX_PATCH.gz | patch -p1
(2) 清理一下 $ make mrproper
(3) 修改 Makefile 将 Makefile 中 ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/) 这一行注释掉,并加一行 ARCH=arm 。修改后象这样:
ARCH=arm
# ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/)
然后运行
# make menuconfig 进行适当配置
此版本内核中,在 System type 里面根据板子设置 ( )ARM system type
(4) 建立连接
# cd ~/tars/SourceDir/linux/include/asm
如果里面没有 proc 和 arch 两个链接文件的话,运行下面两个命令。如果有,就跳过下两个命令。
# ln –s proc-armv proc
# ln –s arch-*(* 代表板子名称 ) arch
(5) 拷贝头文件
# mkdir -p $PREFIX/$TARGET/include
# cd ~/tars/SourceDir/linux/
# cp -dR include/linux $PREFIX/$TARGET/include
# cp -dR include/asm-arm $PREFIX/$TARGET/include/asm
(6) 为 gcc 建立一个 linux kernel 头文件的连接。
# cd $PREFIX/$TARGET
# ln -s include sys-include
1.2 编译安装 binutils 这里用不到前面准备的 linux 头文件
# cd ~/tars/SourceDir
# tar -zxf ../binutils-$VBINUTILS.tar.gz
# cd ~/tars/BuildDir
# mkdir binutils
# cd binutils
#../../SourceDir/binutils-$VBINUTILS/configure --target=$TARGET --prefix=$PREFIX
# make all install
(3) export PATH=$PREFIX/bin:$PATH
1.3 编译安装 gcc 的 c 编译器
(1) 解压缩
# cd ~/tars/SourceDir
# tar -zxf ../gcc-core-$VGCC.tar.gz
(2) 修改 gcc 的 t-linux 文件
# cd gcc-$VGCC/gcc/config/arm
# mv t-linux t-linux-orig
# sed 's/TARGET_LIBGCC2_CFLAGS = /TARGET_LIBGCC2_CFLAGS = -D__gthr_posix_h -Dinhibit_libc/' < t-linux-orig > t-linux-core
# cp ./t-linux-core ./t-linux
(3) 编译
# cd ~/tars/BuildDir
#mkdir gcc-core
# cd gcc-core
# ../../SourceDir/gcc-$VGCC/configure --target=$TARGET --prefix=$PREFIX --enable-languages=c --disable-shared --disable-threads
# make all install
1.4 编译安装 glibc
(1) 解压缩
# cd ~/tars/SourceDir
# tar -zxf ../glibc-$VGLIBC.tar.gz
# cd glibc-$VGLIBC
# tar -zxf ../../glibc-linuxthreads-$VGLIBC.tar.gz
(2) 编译
# cd ~/tars/BuildDir
# mkdir glibc
# cd glibc
# CC=$TARGET-gcc AR=$TARGET-ar RANLIB=$TARGET-ranlib /
../../SourceDir/glibc-$VGLIBC/configure /
--host=$TARGET --prefix=$PREFIX/$TARGET --enable-add-ons
# make all install (这步花了很长时间)
1.5. 编译安装 gcc 的 c, c++ 编译器
(1) 恢复 t-linux 文件
# cd ~/tars/SourceDir/gcc-$VGCC/gcc/config/arm/
# cp t-linux-orig t-linux
(2) 解压缩 c++ 编译器
# cd ~/tars/SourceDir/
# tar -zxf ../gcc-g++-$VGCC.tar.gz
# cd ~/tars/BuildDir
# mkdir gcc
# cd gcc
(3) 编译
# ../../SourceDir/gcc-$VGCC/configure --target=$TARGET --prefix=$PREFIX --enable-languages=c,c++ --with-included-gettext
# make all install
注:如果你下载的是 filename.tar.bz2 ,你可以用如下命令之一解压缩,第三种方式在任何系统中都好使。
第一种方式: # tar -jxf filename.tar.bz2
第二种方式: # tar -Ixf filename.tar.bz2
第三种方式: # bzip2 -dc filename.tar.bz2 | tar xf –
如果你是第一次制作 arm-linux 交叉编译环境,强烈建议你用本文所使用的各个程序的版本。如果用其它版本,按照本文的方法可能会在编译的时候出问题。
生成的 toolchain 大于 150 兆,用如下方法压缩:
# cd ~
# tar -cf armtools.tar /armtools (大小 157399040 )
# bzip2 -z armtools.tar (大小 32688701 )
压缩后生成的 armtools.tar.bz2 大概有 30 几兆。