日期:2014-05-16  浏览次数:21152 次

cygwin上编译arm-linux gcc-3.4.4 glibc-2.3.5

接了个GM8182 DVR的案子,在原厂提供的SDK基础上做些AVI录像管理和RTSP流服务,还有跟以前开发的推送平台的整合。

智源提供了arm-linux-2.6.14 和 gcc-3.4.4-glibc-2.3.5, 都是在linux的。


以前一直用vmware跑ubuntu还蛮顺的。前一段时间装了一堆乱七八糟的开发环境,一开vmware爆卡无比。

觉得用cygwin会更方便点,花了点时间把环境迁移到cygwin上。


交叉编译gcc-3.4.4的资讯网路上是多得是在不能在多了,不过在cyginw上做还是有点差异的。遇到以下两个问题:

1、cygwin上binutils的版本过高,通过修稿configure的version check 解决

2、winxp上的文件系统是大小写无关的,编译glibc时会有问题,可以修改注册表使得cygwin下的文件大小写敏感

3、glibc-2.3.5/manual/Makefile 不被cygwin 的 gnumake支持, 修改之


a】下载代码包


下载binutils-2.16.tar.gz

http://ftp.gnu.org/gnu/binutils/binutils-2.16.tar.gz


下载glibc-2.3.5.tar.gz 和 glibc-linuxthreads-2.3.5.tar.gz

http://ftp.gnu.org/gnu/glibc/glibc-2.3.5.tar.gz

http://ftp.gnu.org/gnu/glibc/glibc-linuxthreads-2.3.5.tar.gz


下载gcc-3.4.4

http://ftp.gnu.org/gnu/gcc/gcc-3.4.4/gcc-3.4.4.tar.bz2


下载三个补丁

http://frank.harvard.edu/~coldwell/toolchain/ioperm.c.diff

http://frank.harvard.edu/~coldwell/toolchain/t-linux.diff

http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/flow.c.diff?cvsroot=gcc&only_with_tag=csl-arm-branch&r1=1.563.4.2&r2=1.563.4.3


b】目录说明:

1、以上下载的文件放置在  /home/eric/crosstools/gm818x/package 下

2、编译的工作目录在  /home/eric/crosstools/gm818x/BUILD  下

3、生成的目标目录在  /home/eric/crosstools/gm818x/3.4.4 下

4、代码文件解压到  /home/eric/crosstools/gm818x/ 下

5、干完这炮打扫战场


c】第一阶段:


编译binutils-2.16 

    #tar zxvf package/binutils-2.16.tar.gz

    #mkdir -p BUILD/binutils-2.16

    #pushd BUILD/binutils-2.16

    #../../binutils-2.16/configure --prefix=/home/eric/crosstools/gm818x/3.4.4 --target=arm-linux --with-sysroot=/home/eric/crosstools/gm818x/3.4.4/sysroot

    #make 

    #make install

    #export PATH=$PATH:/home/eric/crosstools/gm818x/3.4.4//bin

    #popd


拷贝linux kernel 头文件

    #mkdir -p /home/eric/crosstools/gm818x/3.4.4/usr/include

    在ubuntu中编译 arm-linux-2.6.14-fa

    拷贝如下目录到cygwin的 /home/eric/crosstools/gm818x/3.4.4/usr/include 目录下

        arm-linux-2.6.14-fa/include/linux

        arm-linux-2.6.14-fa/include/asm-arm

        arm-linux-2.6.14-fa/include/asm-generic

        arm-linux-2.6.14-fa/include/asm

    注意 asm 是 asm-arm的软链接,


编译glibc-2.3.5-headers

    #tar jxvf package/glibc-2.3.5.tar.bz2

    #patch -d glibc-2.3.5 -p1 < package/ioperm.c.diff

    #pushd glibc-2.3.5

    #tar zxvf ../package/glibc-linuxthreads-2.3.5.tar.gz

    #popd

    修改glibc-2.3.5/configure 

        Line 3920:   2.1[3-9]*)   -->   2.[1-2][1-9]*)

        Line 3981:   2.1[3-9]*)   -->   2.[1-2][1-9]*)

        ps:  cygwin的as和ld是2.22 之后第二阶段编译glibc时检查的是上一步编译的arm-linux-as 和arm-linux-ld(2.16)

   修改glibc-2.3.5/manual/Makefile

        LINE 236 : $(objpfx)stubs ../po/manual.pot $(objpfx)stamp%: 一行内三个目标拆分成三个目标分别$(make-target-directory)

    #mkdir -p BUILD/glibc-2.3.5-headers

    #pushd BUILD/glibc-2.3.5-headers

    #../../glibc-2.3.5/configure --prefix=/u