小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