Cygwin下面安装交叉编译环境421457749
这两天就忙这一件事情了,本来想在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、建立脚本文件
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!! (好像是这个!)我也不知道到底事件干得怎么样了,没管!
数据正在载入中..
