分享
 
 
 

深度剖析E680G开发一.所谓的交叉编译环境

王朝other·作者佚名  2008-12-28
窄屏简体版  字體: |||超大  

一、前言

前面文章涵盖的内容对普通人来说应该都比较容易理解和运用,然而这仅仅只能说明你会刚会用罢了,从本文开始,我们需要更深入一步,去探讨E680G的操作系统的开发环境,自然内容也变专业了。

很遗憾目前网上有关的资料都不尽如人意,也许是水平太高了吧,反而写出来的文章让人看了一头雾水。为了能让更多人能跨过这个门槛,我会用较多的篇幅来介绍相关专业知识。另外最好有真实的Linux环境,文中操作皆使用虚拟机RedHatLinux9。

希望看完这篇文章得出的结论是:搭建E680交叉编译开发环境并不难!

相关部分附件下载http://play.younet.com/view.php?tid=18578

二、交叉编译理论准备

我们经常会说平台,平台出现的根源要从处理器(CPU)说起,不同的CPU采用不同的指令集。所谓指令集,则是CPU中用来计算和控制计算机系统的一套指令的集合,而每一种新型的CPU在设计时就规定了一系列与其他硬件电路相配合的指令系统。

E680手机系列采用的是Inter XScale处理器,基于ARM v5TE体系结构,扩展了ARM指令集的核心,本质还是ARM处理器。这和我们平时经常接触PC机的CPU是不同的,PC机大多采用Inter X86的指令集。

ARM处理器最大的特点就是:功耗低,应用方案灵活,可以方便为多媒体信号添加指令集等。目前来说几乎所有的手持操作系统包括智能手机都采用了ARM架构进行设计。

我们如果要在E680系列所采用的操作系统----MontaVista Linux下开发,就需要一个编译器能把C程序代码转换为兼容ARM指令集的机器语言。这种编译就称为交叉编译。

要深刻理解这个概念,我们再对比一下C,Java这两种语言。

Java号称Compile once,run everywhere。即编译一次到处运行。事实也确实如此,Java编译生成的是字节代码,然后由各个平台的Java虚拟机解释执行。实际上在E680G上,J2ME的JAR包是由/usr/SYSjava/kvm解释执行的。

Java是通过提供各类平台的虚拟机程序来实现平台无关性。这样也很大的牺牲了执行效率。

C语言则不一样,主要特点就是接近低层,可根据不同处理器生成高效的机器代码。适合做复杂的运算和实时的控制。所以针对C语言,会有很多不同平台的编译器负责将代码直接编译成高效的机器指令。

说到这里,我们显然明白了:普通Linux PC机上的GCC编译器编译的可执行程序复制到E680上是不能够被执行的。要在E680平台上进行开发,需要构造一个能兼容ARM的GCC了,这就是所谓的交叉编译环境。

三、构造E680交叉编译环境

这里我们使用很简单的一个构造方法。在http://lsb.blogdns.net/ezx-crosstool

下载ezx-crosstool-0.5.tar.bz2文件,这个工具是由个人整理的,去掉了与ARM无关的很多脚本,并且限定了需要编译的文件版本,使用起来比较简单。

本机新建了一个用户gcc,准备用于编译,root用户会提示禁止操作的。

这里使用的是在/home/gcc目录下用gcc用户解压:

bunzip2 ezx-crosstool-0.5.tar.bz2

tar xvf ezx-crosstool-0.5.tar

系统会自动生成/home/gcc/ezx-crosstool-0.5这个目录。

在ftp://ftp.gnu.org/pub/gnu下载如下四个文件,且必须是如下版本:

binutils-2.15.tar.bz2 一组开发工具,包括连接器、汇编器

和其他用于目标文件和档案的工具

gcc-3.3.6.tar.bz2 GCC编译器的源代码

glibc-2.3.2.tar.bz2 提供系统调用和基本函数库

glibc-linuxthreads-2.3.2.tar.bz2 用于支持POSIX线程的函数库

在http://www.kernel.org/pub/linux/kernel/v2.4/下载如下一个文件:

linux-2.4.26.tar.bz2 Linux核心源代码

全部下载后,放在/home/gcc/ezx-crosstool-0.5/downloads下,打开

/home/gcc/ezx-crosstool-0.5/build.sh文件,内容如下:

#!/bin/sh

set -ex

CROSSTOOL_DIR=`pwd`

TARBALLS_DIR=$CROSSTOOL_DIR/downloads

RESULT_TOP=$CROSSTOOL_DIR/gcc-arm-iwmmxt

export TARBALLS_DIR RESULT_TOP

GCC_LANGUAGES="c,c++"

export GCC_LANGUAGES

...

详细内容以后会解释,这里只注意RESULT_TOP=$CROSSTOOL_DIR/gcc-arm-iwmmxt

这句,这是说明编译后的路径,可以自定义修改。

如:

RESULT_TOP=/home/gcc/arm

到这里,准备工作就结束了。

cd /home/gcc/ezx-crosstool-0.5

./build.sh

我使用的笔记本(512M+PM1.7G)+虚拟机,大概不到两个小时。完成后在系统环境

PATH添加新路径内容。

export PATH=$PATH:/home/gcc/arm/gcc-3.3.6-glibc-2.3.2/arm-linux/bin

四、测试环境

hello.c

#include <stdio.h>

int main()

{

float myValueA=1.9;

float myValueB=2.8;

printf("Hello!My E680!\n");

printf("TestValue:%f\n",myValueA+myValueB);

return 0;

}

输入:arm-linux-gcc -o moto hello.c,生成可执行文件,这里在Linux下显

然是不能执行的,复制到你的手机上,设置好环境变量,或者使用以下Shell脚本,

#!/bin/bash

export QTDIR=/usr/lib/ezx

export LD_LIBRARY_PATH=$QTDIR/lib

export EZX_RES_F >

补充说明

草木瓜

20060917

一、说明

大概是编辑的缘故,上篇文章提交上去后,审批完居然文章未尾少了很多行。

令人诧异。现只好重发一遍未尾被遗漏的内容。

再者文章本身难免有疏漏,提交又不能随意更改,如有问题可查看:

完全系列文章地址:http://blog.csdn.net/liwei_cmg

文章相关的重要资源下载地址:http://play.younet.com/view.php?tid=18578

以上的网址倒能够及时更新。

二、末尾内容

hello.c

#include <stdio.h>

int main()

{

float myValueA=1.9;

float myValueB=2.8;

printf("Hello!My E680!\n");

printf("TestValue:%f\n",myValueA+myValueB);

return 0;

}

输入:arm-linux-gcc -o moto hello.c,生成可执行文件,这里在Linux下显

然是不能执行的,复制到你的手机上,在telnet下进入可执行文件所在目录,输入

命令:./moto,显示:

Hello!My E680!

TestValue:4.700000

可以看到正常显示,而且也没有所谓的浮点型Bug。这样没有使用图形化内容,所以也不需要设置环境变量,在后面的文章会有更具体的体现,现在交叉编译环境已成功搭建,终于迈开第一步了。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有