找回密码
 注册创意安天

【转】建立A1200编译环境

[复制链接]
发表于 2009-7-30 15:43 | 显示全部楼层 |阅读模式
路西瓜
普通会员

发贴: 10
积分: 0
来自:
注册日期: 2007-07-02
  发表时间: 2008-01-19 12:04:55  

--------------------------------------------------------------------------------
[php]
貌似每次聚会之后都会有些新鲜的想法。上次聚会之后就诞生了这台服务器,虽然比我当时的设想简陋了好多,好歹也变成了现实。这次聚会之后,我就抑制不住想充分利用A1200这个手机Linux平台的冲动。

刚拿到A1200的时候其实也玩过一阵子。但那时候一是没什么经验,对Linux、智能手机都还一知半解;二是当时使用的是没有刷机的原始版本,权限控制得跟鬼一样,实在是干不了什么事。自从聚会归来之后,不知道为什么脑袋突然开了窍:我需要的并不是开发手机应用软件,而是把手机当成一个简易Linux平台。

方向正确了,事情就好办了。A1200是一个2.4内核的arm体系的Linux。我需要做两件事:第一是可以全方位的操作这个Linux,而不仅仅只能运行这些手机软件,所以我需要一个Shell。还好,A1200正好有一个这样的程序:eKonsole,它是一个pkg程序,可以打开一个shell界面,在这个界面里我们可以输入shell命令。稍微试了一下,A1200上一些基本的命令,ls、cd、mkdir这些自不必说,awk、sed、grep、ifconfig也都有,还有tar、unzip、vi等一些工具,总体而言,编写一些shell脚本应该是没什么问题了。但是我们当然不能满足于它自带的这些东西。我们需要把一些自己需要的东西迁移过来。暂时来说,我当然不指望能在这个小小的平台上完成什么重要工作,所以我的目标目前来说仅限于一些命令行的工具。其实,我最想要的是Python……

无论想要什么,总得有个第一步。A1200上并没有gcc编译器,当然也不可能有make,我们想把软件搬到这个平台上直接编译,恐怕是很有难度的。所以,我们需要在PC上做一个交叉编译的toolchain。上网找了一些资料,的确有人整理了一些这样的toolchain,我最后选择了ezx-crosstool-0.5,因为这个比较简单容易理解。(BTW:现在这个工具所在的网站似乎访问不了了,如果有需要的同学就给我写信吧。)解压之后运行build.sh,它会去下载所需的组件并自动编译。不过wget的下载速度实在不敢恭维,所以还是自己去网站上事先下载好吧,一共有如下几个(注意都不是最新版的,但请老老实实的下载所指定的版本,因为它们还需要打一些patch):


from ftp://ftp.gnu.org/pub/gnu

binutils-2.15.tar.bz2

gcc-3.3.6.tar.bz2

glibc-2.3.2.tar.bz2

glibc-linuxthreads-2.3.2.tar.bz2



from http://www.kernel.org/pub/linux/kernel/v2.4/

linux-2.4.26.tar.bz2

下载完毕后放在ezx-crosstool-0.5的downloads目录下,然后再运行build.sh即可。

等阿等阿等阿等,终于……给了我一个错误信息。原来是lex没装。这个倒简单,在Ubuntu下
sudo apt-get install flex

就可以了。装完之后编译仍然出错,这次是glibc-2.3.2的一个头文件居然有语法错误。你需要解开glibc-2.3.2.tar.bz2,做如下更改:


echo "\"Compiled on a $$os $$version system" \

"on `date +%Y-%m-%d`.\\n\"" ;; \

更改为:

echo "\"Compiled on a $$os $$version system" \

"on `date +%Y-%m-%d`.\\\\n\"" ;; \

将:

echo "\"Available extensions:\\n\""; \

更改为:

echo "\"Available extensions:\\\\n\""; \

修改完毕后再打包成原来的名字,重新build.sh。等阿等阿等阿等,终于……又给我一个错误。这次仔细一瞧,原来是编译之后的测试程序出错。俺们相信你,测试错就错了吧,不管它了。
这时,你应该得到了一份可以用于交叉编译的编译环境。如果你没有修改过build.sh里的RESULT_TOP变量的话,它应该在ezx-crosstool-0.5/gcc-arm-iwmmxt目录下。当然你可以修改这个变量让它生成在任何你想生成的地方。比如我就把它生成在了~/mkezx/arm/gcc目录下。

有了这一份交叉编译环境,理论上来说我们就可以来编译手机上的程序了。先做个测试吧。
写一个经典程序:
#include <stdio.h>

int main()

{

printf("Hello, world!\n";

}

然后编译:


首先设置路径:

PATH=$PATH:~/mkezx/arm/gcc/gcc-3.3.6-glibc-2.3.2/arm-linux/bin

然后执行编译命令:

arm-linux-gcc -o test test.c


然后将生成的test复制到手机上,用eKonsole执行一下./test,果然输出了Hello,world!

这个小程序没有什么用,我们整点有用的。来编译个Python吧。
结果……折腾了两天,一直编译出错。万分沮丧的我不得不退而求其次,暂时放下Python,先试试编译个bash。反正默认的shell确实不好用,用telnet连上去之后连Backspace键都不能用,会被解释成^H,而且也没有命令历史的功能,弄个全功能的bash也不错。
ftp://ftp.gnu.org/pub/gnu下载一份bash的最新版本,解压,然后编译:
#设置路径不能忘记,以后就省略了,大家记得就是

PATH=$PATH:~/mkezx/arm/gcc/gcc-3.3.6-glibc-2.3.2/arm-linux/bin

./configure --host=arm-linux

make

make install --prefix=~/mkezx/build/bash

这次倒很顺利,一切正常的编译完成了。这样我们就有了一份可以用于A1200的bash了。不过这份bash有3M多,我们可以用strip减少一下它的size:
cd ~/mkezx/build/bash/bin

arm-linux-strip bash

缩减之后的bash只有600多k了。然后复制这份bash到手机上,打开eKonsole,执行./bash,再试试上下键,是不是有历史命令记录了?嗯,这样就爽多了。

不过折腾了两天,只成功的编译了bash一个工具。目前我希望得到的工具还有gcc、python和vim,不过知道原理,相信编译成功也是迟早的事情。
继续努力了。
[/php]
<---- 以上言论仅代表本人立场 ---->


   

esoul
普通会员

发贴: 64
积分: 0
来自:
注册日期: 2006-05-24
  发表时间: 2008-05-17 11:06:54  

--------------------------------------------------------------------------------
进展到哪一步了?期待中。。。
<---- 以上言论仅代表本人立场 ---->
您需要登录后才可以回帖 登录 | 注册创意安天

本版积分规则

Archiver|手机版|小黑屋|创意安天 ( 京ICP备09068574,ICP证100468号。 )

GMT+8, 2024-12-22 21:39

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表