您的位置:首页 > 运维架构 > Linux

Windows+cygwin下构造arm-linux交叉编译环境最简单的方法

2013-06-27 22:53 603 查看
小I入手刚三天, 还在门口探索, 以下内容还请高手指正

根据网上的资源介绍, 成功的telnet登录到了小I内部, 但是发现shell只有一个ash, 用起来非常的不爽,于是想自己弄个bash用,先是参考了OopsWare大虾的文章:http://club.ccmove.com/nclub/top
... &TopicID=397292, 整个编译的过程很顺利, 编译好以后用生成的arm-softfloat-linux-gnu-gcc编译了一个简单的hello,world程序,传到小I上运行, 一切正常!于是开始编译bash 3.1, 编译成功后把生成的bash传到小I, 可是运行的时候问题出来了,运行的时候显示:

# ./bash

Illegal instruction

搞了一下午始终没有找到原因.

后来在电驴上发现了一个编译好的包:arm-linux-toolchain-cygwin-3.4.3.tar.gz,有86.4M

(该文件可以在eMule里面搜索/下载)

经测试可以正常交叉编译arm-linux程序,编译好的程序在小I上也可以正常运行.

安装的步骤如下

假设cygwin安装在c:/cygwin,下载的包放在c:/tmp)

1. 在 c:/tmp 下运行:

tar xvfz arm-linux-toolchain-cygwin-3.4.3.tar.gz

然后在tmp下会生成一个目录usr,下面有如下子目录:

arm-linux/ bin/ include/ info/ lib/ libexec/ man/ share/

2.把c:/tmp/usr/bin下的所有文件拷贝(或移动)到c:/cygwin/bin;

把c:/tmp/usr/lib下的所有文件拷贝(或移动)到c:/cygwin/lib;

把arm-linux/ include/ info/ libexec/ man/ share/

几个目录拷贝(或移动)到c:/cygwin/usr目录下,拷贝过程中如果询问是否覆盖选择全是.

3.这时候运行arm-linux-gcc就可以编译arm-linux的执行文件了,该包还带了一个arm的模拟器

armv5l-linux-run,但是我没有运行成功.

4.以bash 3.1为例介绍一下arm-linux软件的编译过程:

1)在ftp://ftp.gnu.org/pub/gnu/bash下载bash-3.1.tar.gz.

2)执行下列命令:

tar xvfz bash-3.1.tar.gz

cd bash-3.1

./configure --host=arm-linux (configure要简单处理一下:删除行9983到行10042间的内容)

make

3)编译完成后会生成arm-linux的执行文件bash,运行命令:

file bash

显示

bash: ELF 32-bit LSB executable, ARM, version 1 (ARM), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped

证明编译成功

4)运行arm-linux-strip bash, 去除不必要的符号信息,可以使编译好的bash文件大小从3M多减少到600多k.

5)把编译好的bash上传到小I上就可以运行了.

进一步的想法:能否用busybox(http://www.busybox.net/)来代替小I

/bin /usr/bin /sbin /usr/sbin目录中的命令文件,这样可以节省出几M的空间?

--------------------------------------------------------------------------------

从电驴上下那个arm-linux-toolchain-cygwin-3.4.3.tar.gz用了几天以后发现还是有问题,

虽然能够正常编译,编译出来也能正常运行,但是只要一涉及浮点数有关的处理, 出来的结果

完全是错误的,比如我用busybox替换了系统的df,运行的时候结果如下:

~#df -h

Filesystem Size Used Available Use% Mounted on

/dev/tffsa 64424509455.4M 64424509455.4M 0 100% /usr/language

/dev/roflash2 1786706395552.0k 1786706395552.0k 0 100% /usr/setup

/dev/mtdblock2 21474836485.2M 4294967297.8M 12884901891.4M 34% /ezxlocal

/dev/mmca1 4088808866744.7M 996432412904.4M 3092376453840.3M 24% /mmc/mmca1

/dev/tffsb1 201863462959.9M 12884901891.8M 188978561068.1M 8% /diska

/dev/loop0 223338299444.3M 223338299444.3M 0 100% /ezxlocal/opie

估计是这个包在编译的时候没有加进软件模拟浮点处理器支持, 而小I本身没有硬件的浮点处理器.

没办法, 还是只得自己动手编译了, 后来又查了些资料,做了些实验, 发现自己动手编译建立toolchain最简单的方法如下:

第1步.准备工作,下载如下软件包:
http://lsb.blogdns.net/ezx-crosstool下载ezx-crosstool-0.5.tar.bz2 ftp://ftp.gnu.org/pub/gnu 下载如下包

binutils-2.15.tar.bz2 glibc-2.3.2.tar.bz2

gcc-3.3.6.tar.bz2 glibc-linuxthreads-2.3.2.tar.bz2
http://www.kernel.org/pub/linux/kernel/v2.4/ 下载

linux-2.4.26.tar.bz2

以上几个包只有第一个是必须的, 后面几个编译的时候如果没有会自动下载,如果你网速够快的话

就可以先不用下载

第2步.把下载来的ezx-crosstool-0.5.tar.bz2解包:

tar xvfj ezx-crosstool-0.5.tar.bz2

会生成一个ezx-crosstool-0.5目录, 然后把预先下载的:

binutils-2.15.tar.bz2 glibc-2.3.2.tar.bz2 linux-2.4.26.tar.bz2

gcc-3.3.6.tar.bz2 glibc-linuxthreads-2.3.2.tar.bz2

拷贝到ezx-crosstool-0.5目录的子目录下(没有预先下载则跳过此步).

第3步.编辑ezx-crosstool-0.5目录下的build.sh文件,把第5行:

RESULT_TOP=$CROSSTOOL_DIR/gcc-arm-iwmmxt

改成你想要的安装位置,比如要安装在/usr/arm就改成:

RESULT_TOP=/usr/arm

第4步.最后一步,也是最费时间的一步:

在ezx-crosstool-0.5目录下运行:

./build.sh

然后就慢慢等吧...

整个过程在我的机器上大概用了两个来小时.我的机配是XP2600+ , 1G ram
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: