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

来源:互联网 发布:linux shell和终端 编辑:程序博客网 时间:2024/05/22 08:13
小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
原创粉丝点击