免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1229 | 回复: 0
打印 上一主题 下一主题

GNU交叉工具链:arm-linux-gcc (上) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-09-04 11:41 |只看该作者 |倒序浏览
GNU交叉工具链(arm-linux-gcc 3.4.4)
Modified by litroncn
(
[color="#0000ff"]litroncn@163.com
)

Based on sunhe
(msunhe@gmail.com)



1
Linux
下工作用户及环境
1.1软件环境
Linux ubuntu 6.06
LTS
Kernel version 2.6.15-23-686
gcc version 4.0.3 (Ubuntu
4.0.3-1ubuntu5)
GNU Make
3.81
msgfmt (GNU gettext-tools)
0.14.5
makeinfo (GNU texinfo)
4.8
GNU M4 1.4.4
flex 2.5.31
GNU Awk
3.1.5
perl, v5.8.7
GNU sed version
4.1.4
gettext (GNU
gettext-runtime) 0.14.5
autoconf (GNU Autoconf)
2.59
automake (GNU automake)
1.4-p6
1.2
编译相关配置
1. 添加工作用户(在root用户下)
root@ubuntu:~# useradd -G
root -g root -d/home/arm arm
root@ubuntu:~# mkdir -p
/home/arm
root@ubuntu:~# chown -R arm
/home/arm
root@ubuntu:~# chmod -R 775
/home/arm
2. 建立工作目录(用arm用户登陆)
arm@ubuntu:~$ mkdir
dev_home
arm@ubuntu:~$ cd
dev_home
arm@ubuntu:~/dev_home$
mkdir btools kernel
3. 登陆时启动环境变量(用root用户登陆)
root@ubuntu:~# vi
~/.bashrc
在.bashrc最后加上
export
PATH=/usr/local/arm/3.4.4/bin:$PATH
arm@ubuntu:~/dev_home$

重新登陆arm用户,环境变量生效
arm@ubuntu:~$ su
arm


2.
设置环境变量,准备源码及相关补丁

2.1
设置环境变量
arm@ubuntu:~$ vi
~/.bashrc
export
PREFIX=/usr/local/arm/3.4.4
export
TARGET=arm-linux
export
SYSROOT=${PREFIX}/sysroot
export
ARCH=arm
export
CROSS_COMPILE=${TARGET}-
export
PATH=${PREFIX}/bin:$PATH
export
SRC=/home/arm/dev_home/btools/tchain3.4.4
注意: 如果你已经安装过arm-linux-gcc,并且已经加入了环境变量中,将其从环境中去掉保证root用户和arm用户环境中没有arm-linux-gcc


2.2
准备源码包

2.2.1 binutils
名称:binutils-2.16.tar.gz
tar.gz
下载地址:
[color="#0000ff"]http://ftp.gnu.org/gnu/binutils/binutils-2.16.tar.gz

2.2.2 gcc
名称: gcc-3.4.4.tar.bz2
下载地址:
[color="#0000ff"]http://ftp.gnu.org/gnu/gcc/gcc-3.4.4/gcc-3.4.4.tar.bz2

2.2.3 glibc
名称:   glibc-2.3.5.tar.gz
           
glibc-linuxthreads-2.3.5.tar.gz
下载地址:  
[color="#0000ff"]http://ftp.gnu.org/gnu/glibc/glibc-2.3.5.tar.gz
                 

[color="#0000ff"]http://ftp.gnu.org/gnu/glibc/glibc-linuxthreads-2.3.5.tar.gz

2.2.4 linux kernel
名称:   linux-2.6.14.1.tar.bz2
下载地址:
[color="#0000ff"]http://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.14.1.tar.bz2

2.2.5 gdb
名称: gdb-6.4.tar.gz
下载地址:
http://ftp.gnu.org/pub/gnu/gdb/gdb-6.4.tar.gz


2.3
准备补丁
2.3.1 ioperm.c.diff
作用: 打修正ioperm()函数
下载地址:
[color="#0000ff"]http://frank.harvard.edu/~coldwell/toolchain/ioperm.c.diff
2.3.2 flow.c.diff
作用: 修改gcc一处bug
下载地址:
[color="#0000ff"]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


2.3.3 t-linux.diff
作用: 该补丁用于产生crti.o和crtn.o文件.
下载地址:
[color="#0000ff"]http://frank.harvard.edu/~coldwell/toolchain/t-linux.diff

2.4
编译GNU binutils

重新以arm用户登陆,让新设置得环境变量起作用
arm@ubuntu:~/dev_home/btools/tchain3.4.4$ tree -L 1
.
|--
BUILD
|--
binutils-2.16
|--
binutils-2.16.tar.gz
|--
flow.c.diff
|-- gcc-3.4.4
|-- gcc-3.4.4.tar.bz2
|--
gdb-6.4.tar.gz
|-- glibc-2.3.5
|-- glibc-2.3.5.tar.gz
|--
glibc-linuxthreads-2.3.5.tar.gz
|--
ioperm.c.diff
|-- linux-2.6.14.1.tar.bz2
`--
t-linux.diff
arm@ubuntu:~$ su
arm
arm@ubuntu:~$ cd
${SRC}
arm@ubuntu:~/dev_home/btools/tchain3.4.4$ tar zxvf
binutils-2.16.tar.gz
arm@ubuntu:~/dev_home/btools/tchain3.4.4$ mkdir -p
BUILD/binutils-2.16
arm@ubuntu:~/dev_home/btools/tchain3.4.4$ cd
BUILD/binutils-2.16
arm@ubuntu:~/dev_home/btools/tchain3.4.4/BUILD/binutils-2.16$
../../binutils-2.16/configure --prefix=${PREFIX} --target=${TARGET}
--with-sysroot=${SYSROOT}
arm@ubuntu:~/dev_home/btools/tchain3.4.4/BUILD/binutils-2.16$
make
arm@ubuntu:~/dev_home/btools/tchain3.4.4/BUILD/binutils-2.16$ su
root
root@ubuntu:/home/arm/dev_home/btools/tchain3.4.4/BUILD/binutils-2.16#make
install
root@ubuntu:/home/arm/dev_home/btools/tchain3.4.4/BUILD/binutils-2.16#
exit
arm@ubuntu:~/dev_home/btools/tchain3.4.4/BUILD/binutils-2.16$


2.5
准备内核头文件
2.5.1 使用当前平台的gcc编译内核头文件
arm@ubuntu:~/dev_home/btools/tchain3.4.4/BUILD/binutils-2.16$ cd
${KERNEL}
arm@ubuntu:~/dev_home/kernel$
arm@ubuntu:~/dev_home/kernel$ tar jxvf
../btools/tchain3.4.4/linux-2.6.14.1.tar.bz2
arm@ubuntu:~/dev_home/kernel$ cd linux-2.6.14.1/
arm@ubuntu:~/dev_home/kernel/linux-2.6.14.1$ cp arch/arm/configs/smdk2410_defconfig
.config
本人是用的CPU是S3C2410,选择了一个配置文件smdk2410_defconfig,你可以根据你的需要选择
arm@ubuntu:~/dev_home/kernel/linux-2.6.14.1$ make ARCH=arm
menuconfig
   System
Type  --->  

        
    ARM system type (Samsung S3C2410)  
--->                              
                         S3C24XX Implementations  
--->   
                                   [ ]
Simtec Electronics ANUBIS                                         
                                   [
] Simtec Electronics BAST (EB2410ITX)                              
                                   [
] IPAQ H1940                                                        
                                   [
] Acer N30                                             
            
                                   

  • SMDK2410/A9M2410                                                  
                                       [
    ] SMDK2440                                                         
                                       [
    ] Thorcom VR1000                                                   
                                       [
    ] HP iPAQ rx3715                                                   
                                       [
    ] NexVision OTOM Board                                       
          
                                       [
    ] NexVision NEXCODER 2440 Light Board  
                                        
                             --- S3C2410
    Boot                                                         
                             --- S3C2410
    Setup                                                        
                             [ ] S3C2410 DMA
    support                                                  
                             (0) S3C2410 UART to use for low-level
    messages                           
                             --- Processor
    Type                                                      
                             --- Processor
    Features                                                   
                            
  • Support Thumb
    user binaries  
                                           
                             [ ] Disable
    I-Cache                                                      
                             [ ] Disable
    D-Cache                                                      
                     
            [ ]   Force write through
    D-cache                                       
    退出时            
    Do you wish to save your
    new kernel configuration?        
                                     No  >      
    选择Yes
    arm@ubuntu:~/dev_home/kernel/linux-2.6.14.1$ make


    2.5.2 复制内核头文件
    arm@ubuntu:~/dev_home/kernel/linux-2.6.14.1$ su root
    root@ubuntu:/home/arm/dev_home/kernel/linux-2.6.14.1# mkdir -p ${SYSROOT}/usr/include
    root@ubuntu:/home/arm/dev_home/kernel/linux-2.6.14.1# cp -a include/linux
    ${SYSROOT}/usr/include/linux
    root@ubuntu:/home/arm/dev_home/kernel/linux-2.6.14.1# cp -a include/asm-arm
    ${SYSROOT}/usr/include/asm
    root@ubuntu:/home/arm/dev_home/kernel/linux-2.6.14.1# cp -a include/asm-generic
    ${SYSROOT}/usr/include/asm-generic
    root@ubuntu:/home/arm/dev_home/kernel/linux-2.6.14.1# exit
    arm@ubuntu:~/dev_home/kernel/linux-2.6.14.1$


    2.6
    编译glibc头文件
    arm@ubuntu:~/dev_home/kernel/linux-2.6.14.1$ cd ${SRC}
    arm@ubuntu:~/dev_home/btools/tchain3.4.4$ tar zxvf
    glibc-2.3.5.tar.gz
    arm@ubuntu:~/dev_home/btools/tchain3.4.4$ patch -d glibc-2.3.5 -p1
    arm@ubuntu:~/dev_home/btools/tchain3.4.4$ cd
    glibc-2.3.5
    arm@ubuntu:~/dev_home/btools/tchain3.4.4/glibc-2.3.5$ tar zxvf
    ../glibc-linuxthreads-2.3.5.tar.gz
    arm@ubuntu:~/dev_home/btools/tchain3.4.4/glibc-2.3.5$ cd
    ..
    arm@ubuntu:~/dev_home/btools/tchain3.4.4$ mkdir -p
    BUILD/glibc-2.3.5-headers
    arm@ubuntu:~/dev_home/btools/tchain3.4.4$ cd
    BUILD/glibc-2.3.5-headers/
    arm@ubuntu:~/dev_home/btools/tchain3.4.4/BUILD/glibc-2.3.5-headers$
    ../../glibc-2.3.5/configure --prefix=/usr --host=${TARGET}
    --enable-add-ons=linuxthreads
    --with-headers=${SYSROOT}/usr/include
    arm@ubuntu:~/dev_home/btools/tchain3.4.4/BUILD/glibc-2.3.5-headers$ su
    root
    root@ubuntu:/home/arm/dev_home/btools/tchain3.4.4/BUILD/glibc-2.3.5-headers# make
    cross-compiling=yes install_root=${SYSROOT}
    install-headers
    root@ubuntu:/home/arm/dev_home/btools/tchain3.4.4/BUILD/glibc-2.3.5-headers# touch
    ${SYSROOT}/usr/include/gnu/stubs.h
    root@ubuntu:/home/arm/dev_home/btools/tchain3.4.4/BUILD/glibc-2.3.5-headers#
    touch
    ${SYSROOT}/usr/include/bits/stdio_lim.h
    root@ubuntu:/home/arm/dev_home/btools/tchain3.4.4/BUILD/glibc-2.3.5-headers#
    exit
    arm@ubuntu:~/dev_home/btools/tchain3.4.4/BUILD/glibc-2.3.5-headers$


    2.7
    编译gcc 第一阶段
    arm@ubuntu:~/dev_home/btools/tchain3.4.4/BUILD/glibc-2.3.5-headers$ cd
    ${SRC}
    arm@ubuntu:~/dev_home/btools/tchain3.4.4$ tar jxvf
    gcc-3.4.4.tar.bz2
    arm@ubuntu:~/dev_home/btools/tchain3.4.4$ patch -d gcc-3.4.4 -p1
    arm@ubuntu:~/dev_home/btools/tchain3.4.4$ patch -d gcc-3.4.4 -p1
    arm@ubuntu:~/dev_home/btools/tchain3.4.4$ mkdir -p
    BUILD/gcc-3.4.4-stage1
    arm@ubuntu:~/dev_home/btools/tchain3.4.4$ cd
    BUILD/gcc-3.4.4-stage1/
    arm@ubuntu:~/dev_home/btools/tchain3.4.4/BUILD/gcc-3.4.4-stage1$
    ../../gcc-3.4.4/configure --prefix=${PREFIX} --target=${TARGET}
    --enable-languages=c --with-sysroot=${SYSROOT}
    注意:   不能加上--disable-shared
    arm@ubuntu:~/dev_home/btools/tchain3.4.4/BUILD/gcc-3.4.4-stage1$ make
    all-gcc
    arm@ubuntu:~/dev_home/btools/tchain3.4.4/BUILD/gcc-3.4.4-stage1$ su
    root
    root@ubuntu:/home/arm/dev_home/btools/tchain3.4.4/BUILD/gcc-3.4.4-stage1# make
    install-gcc
    root@ubuntu:/home/arm/dev_home/btools/tchain3.4.4/BUILD/gcc-3.4.4-stage1#
    exit
    arm@ubuntu:~/dev_home/btools/tchain3.4.4/BUILD/gcc-3.4.4-stage1$




    本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/27691/showart_373891.html
  • 您需要登录后才可以回帖 登录 | 注册

    本版积分规则 发表回复

      

    北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
    未成年举报专区
    中国互联网协会会员  联系我们:huangweiwei@itpub.net
    感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

    清除 Cookies - ChinaUnix - Archiver - WAP - TOP