Cygwin下面安装交叉编译环境

这两天就忙这一件事情了,本来想在LINUX下面做这件事情,还是不太习惯切换系统的时候要重启机器.。于是就决定试试cygwin。

所有的过程都是在网上学的,但是也发现不少人在编译过程中出现问题。所以我就特别小心。采取了几个网页上面比较成功的方案。

1、安装cygwin

我选择先下载再安装的办法。下载的过程也是特别艰难的,我这里网速特别慢,第一次下到13%的时候就不动了,后来我也采用别人用过的办法,ping一下所有的服务器,选择一下回显延时比较短的下。

下载的时候Devel和Base两项选Install,其余的Default。

第二次下到85%又不动了。郁闷啊!!但是我没有重新全部下载,我找到最后一个下载的文件,然后第三次下载的时候从它开始下载,整个过程终于在一下午的时间里面完成了。我把两次下的东西拷一起,然后开始从本地文件夹Setup。除了时间慢点,没什么说的。安装完后试了一下常用的命令,没有问题。

2、下载需要的源码包:

我按照这些版本下载交叉编译需要的包:

安装包
下载地址
crosstool-0.42.tar.gz
http://kegel.com/crosstool
linux-2.6.10.tar.gz
ftp.kernel.org
binutils-2.15.tar.bz2
ftp.gnu.org
gcc-3.3.6.tar.gz
glibc-2.3.2.tar.gz
glibc-linuxthreads-2.3.2.tar.gz
linux-libc-headers-2.6.12.0.tar.bz2

linux-libc-headers-2.6.12.0.tar.bz2下载的地址:(当时我在ftp.gnu.org找了很久。)
以上这些包用迅雷下载速度极快,能达到1M/S的速度。
 
下面假定Windows用户名为mike. cygwin 会找/home/mike作为用户登录时的路径。
 
3、将这些工具包文件放在新建的/home/mike/downloads目录下,最后在/home/mike目录下 解压crosstool-0.42.tar.gz,命令如下:
# cd /home/mike
# tar –xvzf crosstool-0.42.tar.gz
4、建立脚本文件
接着需要建立自己的编译脚本,起名为arm.sh,为了简化编写arm.sh,寻找一个最接近的脚本文件demo-arm.sh作为模板,然后将该脚本的内容复制到arm.sh,修改arm.sh脚本,具体操作如下:
# cd crosstool-0.42
# cp demo-arm.sh arm.sh
# vi arm.sh
修改后的arm.sh脚本内容如下:
#!/bin/sh
set -ex
TARBALLS_DIR=/home/mike/downloads # 定义工具链源码所存放位置。
RESULT_TOP=/opt/crosstool             # 定义工具链的安装目录
export TARBALLS_DIR RESULT_TOP
GCC_LANGUAGES="c,c++"                 # 定义支持C, C++语言
export GCC_LANGUAGES
# 创建/opt/crosstool目录
mkdir -p $RESULT_TOP
# 编译工具链,该过程需要数小时完成
eval ''cat arm.dat gcc-3.3.6-glibc-2.3.2.dat'' sh all.sh --notest
echo Done.
5、建立配置文件
在arm.sh脚本文件中需要注 意arm.dat和gcc-3.3.6-glibc-2.3.2.dat两个文件,这两个文件是作为Crosstool的编译的配置文件。其中:
arm.dat文件内容如下,主要用于定义配置文件、定义生成编译工具链的名称以及定义编译选项等。
 
KERNELCONFIG=''pwd''/arm.config # 内核的配置
TARGET=arm-linux-                 # 编译生成的工具链名称
TARGET_CFLAGS="-O"                 # 编译选项
 
 
  gcc-3.3.6-glibc-2.3.2.dat文件内容如下,该文件主要定义编译过程中所需要的库以及它定义的版本,如果在编译过程中发现有些库不存在时,Crosstool会自动在相关网站上下载,该工具在这点上相对比较智能,也非常有用。
 
BINUTILS_DIR=binutils-2.15
GCC_DIR=gcc-3.3.6
GLIBC_DIR=glibc-2.3.2
GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2
LINUX_DIR=linux-2.6.10
LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.12.0
 
 
6、执行脚本:
将Crosstool的脚本文件和配置文件准备好之后,开始执行arm.sh脚本来编译交叉编译工具。具体执行命令如下:
# cd crosstool-0.42
# ./arm.sh
 
从上午九时开始,中午吃饭的时候还没编译完,下午两点半再去看,终于编完了。
 
我试了一下
#arm-linux-gcc
结果是未知的命令。原来没有配置PATH。
找到可执行文件路径:/opt/crosstool/gcc-3.3.6-glibc-2.3.2/arm-linux/bin 里面是些.exe文件,一大堆:
arm-linux-addr2line arm-linux-g++         arm-linux-ld          arm-linux-size
arm-linux-ar        arm-linux-gcc       arm-linux-nm          arm-linux-strings
arm-linux-as        arm-linux-gcc-3.3.6 arm-linux-objcopy arm-linux-strip
arm-linux-c++       arm-linux-gccbug arm-linux-objdump fix-embedded-paths
arm-linux-c++filt arm-linux-gcov      arm-linux-ranlib
arm-linux-cpp       arm-linux-gprof     arm-linux-readelf
 
这些EXE文件可以在CMD下面运行,但是必须将cygwin1.dll置于windows系统PATH下,我直接把cygwin1.dll拷到:/opt/crosstool/gcc-3.3.6-glibc-2.3.2/arm-linux/bin下面了。在命令行模式下能运行这些工具。
当然在cygwin环境下面直接用这些工具也需要设置PATH,我找到/home/mike/下面的配置文件:.bash_profile 在最后添加一行:
PATH=/opt/crosstool/gcc-3.3.6-glibc-2.3.2/arm-linux/bin:$PATH
重新启动cygwin的shell。
命令都没有问题。
 
当然编译过程中我也看到#error:glibc can''t be compiled without optimiezed!! (好像是这个!)我也不知道到底事件干得怎么样了,没管!
 
 

投 票

觉得本文不错,投一票   

评 论

  • 嵌入式在线网友  2008-7-4 15:48:32
  • 嵌入式在线网友
    我按你的步骤做了,但还是出错,是什么原因:
    --15:44:53-- ftp://gcc.gnu.org/pub/glibc/releases/glibc-2.3.2.tar.gz
    `home/mike/downloads/glibc-2.3.2.tar.gz
    Resolving gcc.gnu.org... failed: Host not found.
    + test -f home/mike/downloads/glibc-2.3.2.tar.gz
    + abort file glibc-2.3.2.tar.gz not found
    + echo file glibc-2.3.2.tar.gz not found
    file glibc-2.3.2.tar.gz not found
    + exec false
    我的glibc-2.3.2.tar.gz 文件也是放在home/mike/downloads下的啊,怎么会找不到


验证码: 看不清?换一张