织梦CMS - 轻松建站从此开始!

罗索

建立针对WinCE的GCC-ARM交叉编译环境

jackyhwei 发布于 2010-07-19 10:42 点击:次 
很多时候我们需要在项目中使用开源代码,但是将GCC的工程移植到Win32 NT还可以使用MinGW,如果要移植到WinCE下却比较麻烦,不仅是基础库的差异,GCC的内联汇编使用AT&T的汇编格式,一般程序员都很陌生,要改成ARMASM使用的汇编格式无疑是件生不如死的差事。
TAG:

开源社区提供了大量价值极高的代码,这些代码大部分是基于GNU C Compiler编译器的,学好GCC对我们学习使用开源代码有重要的作用。GCC是跨平台的优秀编译器,代码效率也比比较高。很多时候我们需要在项目中使用开源代码,但是将GCC的工程移植到Win32 NT还可以使用MinGW,如果要移植到WinCE下却比较麻烦,不仅是基础库的差异,GCC的内联汇编使用AT&T的汇编格式,一般程序员都很陌生,要改成ARMASM使用的汇编格式无疑是件生不如死的差事。如果能直接用GCC编译生成Wince可用的文件,或者是GCC与EVC或VS2005混合编译程序,将难以移植的部分交给GCC编译,来实现开源项目的移植,世界该有多美好^_^。GCC是跨平台且可定制的,对付WinCE当然不在话下。
首先确定你的系统上安装有必须的开发工具:binutils, gcc, make, bison, byacc, flex, perl,如果你用的是Cygwin还需要w32api,我就是用的Cygwin,所以一下所说是我在Cygwin的配置经过。安装完开发工具后我们要去下载几个新一些的程序包:binutils,gcc,推荐http://ftp.gnu.org/gnu/gcc/ftp://sources.redhat.com/pub/binutils/snapshots/

交叉编译环境主要包括以下几个部分:
针对目标系统的编译器gcc,我下载的是gcc-core-3.4.4.tar.bz2和gcc-g++-3.4.4.tar.bz2,这两个代码包包含了GCC的核心一个C编译器和一个C++编译器。
针对目标系统的二进制工具binutils,我下载的是binutils-2.17.tar.gz,这个压缩包包含有ld,ar,as等一些产生或者处理二进制文件的工具,主要包括汇编编译器和连接器,还包括其他一些二进制代码工具。

将代码包解压到 /usr/src下
$tar -xzvf binutils-2.17.tar.gz
$tar -xjvf gcc-core-3.4.4.tar.bz2
$tar -xjvf gcc-g++-3.4.4.tar.bz2
下面进行最重要的一步 patch 代码包
需要修改/usr/src/gcc-3.4.4/gcc/config/arm/目录下的pe.h和wince-pe.h文件,我们可以直接修改代码,或者使用patch命令来更新。
在/usr/src下建立一个文本文件gcc-3.4.3.wince.diff输入一下内容并保存:
diff -urN orig-gcc-3.4.4/gcc/config/arm/pe.h gcc-3.4.4/gcc/config/arm/pe.h

--- orig-gcc-3.4.4/gcc/config/arm/pe.h 2004-02-24 15:25:22.000000000 +0100
+++ gcc-3.4.4/gcc/config/arm/pe.h 2005-04-05 12:40:43.171875000 +0200
@@ -84,11 +84,12 @@
 #define WCHAR_TYPE_SIZE 16

 /* r11 is fixed.  */
+/*
 #undef  SUBTARGET_CONDITIONAL_REGISTER_USAGE
 #define SUBTARGET_CONDITIONAL_REGISTER_USAGE \
   fixed_regs [11] = 1; \
   call_used_regs [11] = 1;
-
+*/

 /* Define this macro if in some cases global symbols from one translation
    unit may not be bound to undefined symbols in another translation unit
diff -urN orig-gcc-3.4.4/gcc/config/arm/wince-pe.h gcc-3.4.4/gcc/config/arm/wince-pe.h
--- orig-gcc-3.4.4/gcc/config/arm/wince-pe.h 2004-02-24 15:25:22.000000000 +0100
+++ gcc-3.4.4/gcc/config/arm/wince-pe.h 2005-04-05 12:41:07.281250000 +0200
@@ -22,7 +22,7 @@
 /* Override arm/pe.h's default apcs26 support.  */
 
 #undef  TARGET_DEFAULT
-#define TARGET_DEFAULT (ARM_FLAG_APCS_32 | ARM_FLAG_SOFT_FLOAT | TARGET_FLAG_NOP_FUN | ARM_FLAG_MMU_TRAPS)
+#define TARGET_DEFAULT (ARM_FLAG_VFP | ARM_FLAG_APCS_32 | ARM_FLAG_SOFT_FLOAT | TARGET_FLAG_NOP_FUN | ARM_FLAG_MMU_TRAPS)
 
 #undef  MULTILIB_DEFAULTS
 #define MULTILIB_DEFAULTS \


执行cat gcc-3.4.4.wince.diff | patch -p0
接下来就是编译binutils和gcc了,方法很简单

$export PREFIX=/usr/arm-wince
$export TARGET=arm-wince-pe
$mkdir build-binutils-wince build-gcc-wince

$cd /usr/src/build-binutils-wince
$../binutils-x.xx/configure --target=$TARGET --prefix=$PREFIX --disable-nls
$make all install

$cd /usr/src/build-gcc-wince
$export PATH=$PATH:$PREFIX/bin
$../gcc-x.x.x/configure --target=$TARGET --prefix=$PREFIX --disable-nls \
    --enable-languages=c,c++ --without-headers --with-newlib
$make all-gcc install-gcc
最后你还需要吧c:\cygwin\bin 和c:\cygwin\usr\arm-wince\bin加入到系统的path里面,如果要和MS VS或EVC配合起来,需要把这个路径加入IDE的执行文件搜索目录,OK基于WinCE的Gcc编译器就建立好了。
但是这只是一个简单的WinCE编译连接器,还缺少必要的库文件和WinCE的SDK, 如何配置一个完善的基于GCC的Wince开发环境我还在摸索中,且听下回分解吧!

(只是可惜原创作者并没有继续写下去!!!)

转自: http://blog.csdn.net/navi_dx/archive/2007/01/31/1499430.aspx

(navi_dx)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201007/9842.html]
本文出处:CSDN博客 作者:navi_dx
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容