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

2019-07-12 17:47发布

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!                小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  转载:http://bbs.512530.com/thread-529494-1-1.html           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

这里写图片描述