2007年已经到了尾声,公司今年的项目也已经完成。来年的项目还在策划中,刚好可以趁这个空闲的间隙尽可能多提高一些。想来想去,还是在ARM和嵌入式开发方面继续精进深造。
在公司搞ARM开发用的是ADS+Code Warrior,为了更好的利用和整合现有的资源,打算用linux或者cygwin做开发环境(我非常迷恋vim+shell的环境!甚至来到完全不需要*NIX的这个公司领到电脑后最先的几件事情之一就是先装一个cygwin!!),有一套很好的创造交叉编译环境工具crosstools。准备好相关的源码包,把他的工具包crosstool-0.43.tar.gz 下载下来解开,稍微修改一下里面的脚本,运行之就可以自动编译一个完整的ARM交叉开发环境了。目前在我的ubuntu和cygwin环境都正常编译安装成功。
运行之前首先需要准备一些源码包,如下,一共100多M:
gcc-3.3.6.tar.bz2 glibc-2.3.2.tar.bz2 linux-libc-headers-2.6.12.0.tar.bz2
gcc-4.1.0.tar.gz glibc-linuxthreads-2.3.2.tar.gz
如果没有或者版本号不对的话,crosstools会根据脚本配置调用wget到去下载,推荐用迅雷事先把所有的包都下下来。能找到很多镜像站点同时下载的迅雷确实是个能以最大速度下载开源软件的好工具,难怪google垂青,可惜没有linux版……
决定所需源码包及其版本的脚本在demo-arm.sh和gcc-x.x.x-glibc-x.x.x-tls.dat中配置。
demo-arm.sh文件就是我们要运行整个自动过程的目标文件。也可以用demo-arm9tdmi.sh,后者是for ARM9的。
编辑那个demo-arm.sh,里面有两个环境变量,TARBALLS_DIR是源文件的目录,默认是home主目录下的downloads文件夹,上面提到的那些源码包就放在这里。RESULT_TO是安装目录,默认在/opt/crosstools。
下面最主要的是使用eval工具的那句命令,注意glibc和gcc的版本,如果TARBALLS_DIR没有的话就会调用wget到去下载源码包,所以需要确保下载的包版本号和它一致。不一样的话,3条路:重新下个和它的版本号匹配的包,或者改脚本适应自己的包的版本号,或者让它自动到到gnu慢得咿咿呀呀的ftp站点去一点点的吸数据。
gcc-x.x.x-glibc-x.x.x-tls.dat两个文件是所需gcc和glibc版本里面的其它软件包及其版本的配置。确保里面的对应的源码包都已经在downloads目录下。
所需对应版本的软件包下好了后,把它们都放在环境变量TARBALLS_DIR指定的目录里,然后运行sh demo-arm9tdmi.sh,剩下的就是机器自动去完成了。
crosstools工具首先把所有的包解开到build目录,然后创建各种自动化工程文件开始漫长的编译过程,视配置可能需要2~3个小时,cygwin环境要比纯linux环境要花更多的时间。
实际执行的过程中会碰上一些问题导致脚本终止,我用最笨也还算有效的方法更正问题,就是在出错终止的时候看提示错在哪里,然后修改,然后再重新运行demo-arm.sh,这个瓜脚本会重头全部重新编译,这样反反复复花了几天时间才终于把整个开发环境搭完……这几天来出错终止的原因有:
1、缺少几个工具,包括flex、bison、patch、i686-host_pc-linux-ar等,前面几个工具装上去就行了,后面那个i686-host_pc-linux-ar找了半天就是不知道是cygwin的哪个包,干脆把ar cp成i686-host_pc-linux-ar,居然蒙混过去了;
2、ubuntu编译glibc时下自己生成的一个version-info.h里面居然有"不匹配的语法错误导致编译终止。几次不过之后痛定思痛在它生成这个.h文件时眼明手快按下ctrl-z然后去改正那个.h,改好了再fg之,这是个痛苦的过程,首先到生成.h那一步的时候时间已经流逝了半个多小时,然后生成这个.h的时候离出错也不远了,如果这时不快点ctrl-z的话就会终止而导致重头来过,我犯的错误包括了错过了时机还有手忙脚乱的按错了ctrl+c等,反复折腾了将近一天,最终全部编译完成。
3、在cygwin下会碰到几个.s文件重复定义了宏,一个个把它们注释掉,也最终通过。这让我在办公室花了2天时间:每次解压就花了十几分钟,第一次不过是缺少必要的工具如bison等,安装后重来,然后是某个.s重复定义了宏,重来,解压后注释掉,几个小时过去了之后再次停止,又是另外一个.s也是重复定义了宏导致,继续重来等解压后注释掉……
最后把生成可执行文件的bin目录加到自己的PATH变量里面,写到.bashrc里,就可以用了。
阅读(2662) | 评论(4) | 转发(0) |