设为首页 友情链接
在线留言 发表文章
加入收藏 广告联系

刺猬首页

| 专案技术 | 网络技术 | 图形图象 | 网络编程 | 网页设计 | 操作系统 | 服务器 | 技术白皮书 | 在线实验室 | 刺猬论坛 |
小说专版  | 数据库 | 设计赏析 | 存储频道 | 网络安全 | 私服架设 |  Solaris | 网站评估 | PC维护技巧 | 下载中心 | 博 客 |
专   题: | Linux | java | cisco | 防病毒 | 刀片 | SOA | iscsi | ASP.NET | SQL | Oracle |
您现在的位置: 刺猬宫 >> Linux专题 >> 开源空间 >> 教程正文 用户登录 新用户注册
专 题 栏 目
最 新 热 门
最 新 推 荐
相 关 文 章
一步一步安装服务器监视…
一步一步跟我来汉化你的…
一步一步安装Turbo Linu…
一步一步教你装linux:g…
一步一步安装Turbo Linu…
一步一步如何在Linux下刻…
  一步步制作 Arm-Linux交叉编译环境           
一步步制作 Arm-Linux交叉编译环境
 

们使用以下版本的文件为例子建立 arm-linux 交叉编译环境:

编译环境 redhat 7.2 或 8.0

binutils-2.14.tar.gz ftp://ftp.gnu.org/gnu/binutils/binutils-2.14.tar.gz

gcc-core-2.95.3.tar.gz ftp://ftp.gnu.org/gnu/gcc/gcc-2.95.3/gcc-core-2.95.3.tar.gz

gcc-g++2.95.3.tar.gz ftp://ftp.gnu.org/gnu/gcc/gcc-2.95.3/gcc-g++-2.95.3.tar.gz

glibc-2.2.4.tar.gz ftp://ftp.gnu.org/gnu/glibc/glibc-2.2.4.tar.gz

glibc-linuxthreads-2.2.4.tar.gz ftp://ftp.gnu.org/gnu/glibc/glibc-linuxthreads-2.2.4.tar.gz

linux-2.4.21.tar.gz ftp://ftp.kernle.org/pub/linux/kernel/v2.4/linux-2.4.21.tar.gz

patch-2.4.21-rmk1.gz # linux kernel patch for arm ftp://ftp.arm.linux.org.uk/pub/linux/arm/kernel/v2.4/patch-2.4.21-rmk1.gz

我们在 bash 下工作,先设定一些变量:

$ export VBINUTILS=2.14

$ export VGCC=2.95.3

$ export VGLIBC=2.2.4

$ export VLINUX=2.4.21

$ export VLINUX_PATCH=rmk1

$

$ export PREFIX=/armtools

$ export TARGET=arm-linux

你可以把它们加到 .bashrc 中。如果你这么做了,你需要 logout 再 login 才能生效。

否则在 bash 的命令行上输入它们并立即生效,但你 logout 再 login 时它就无效了。

我们的工作路径是:

...../ ----- ~ -- tars -------- SourceDir

............|................|---- BuildDir

............|--- armtools

$ cd ~

$ mkdir -p tars/SourceDir

$ mkdir tars/BuildDir

$ mkdir arm_tools

$ su

# mv arm_tools $PREFIX

# exit

$

tars --------------- 在这里放我们的下载来的 .tar.gz 文件

SourceDir ------ 这个临时目录放我们解压缩后的源文件

BuildDir --------- 我们在这里编译

armtools -------- 把arm-linux 交叉编译环境的安装在这里

1.安装linux 的头文件

当你为不同类型的ARM编译gcc,或编译不同版本的kernel,或交叉编译gcc 时都需要一套不同的linux头文件。

1.1解压缩,打补丁

$ cd ~/tars/SourceDir

$ tar -zxf ../linux-$VLINUX.tar.gz

$ cd linux

$ zcat ../../patch- $VLINUX-$VLINUX_PATCH.gz | patch -p1

1.2清理一下

$ make mrproper

1.3修改 Makefile

将Makefile中ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/) 这一行注释掉,并加一行 ARCH=arm。修改后象这样:

ARCH=arm

# ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/)

如果你的系统里的 sed 程序支持用 '\' 续行(通常都支持),你可以用这个 script 去修改 Makefile

#!/bin/sh

mv Makefile Makefile.orig

sed 's/ARCH := $(shell uname -m/ARCH=arm\

# ARCH := $(shell uname -m/' < Makefile.orig > Makefile

#end of script

注意:

这个 script 里的 # ARCH := 是上一行的续行,不是 shell 里的注释,它也是要输入的。

如果你从浏览器(IE, netscape, etc)上 copy-paste 这个 script 到你的 bash console,它很有可能不工作;

但你在 bash console 里手工输入就可以工作。

因为有时 copy 过来后,是 'ARCH=arm\r\n',而能工作的是 'ARCH=arm\n'。

1.4建立连接

1.4.1如果是LART板子

$ make lart_config

$ yes "" | make oldconfig

$ make include/linux/version.h

或:

$ make lart_config

$ make menuconfig 选择

网上有的文章用的是:

$ make symlinks include/linux/version.h

那是不完全的。make symlinks 的作用相当于:

$ cd include/asm-arm

$ rm -f arch proc

$ ln -s arch-sa1100 arch

$ ln -s proc-armv proc

$ cd ../../

它并没有产生一个很重要的文件 include/linux/autoconf.h。

而 yes "" | make oldconfig 不仅是 make symlinks,

还产生了 include/linux/autoconf.h。但它也没有产生

include/linux/version.h。

1.4.2如果是clps711x的CPU

连接应该为:

$ cd include/asm-arm

$ rm -f arch proc

$ ln -s arch-clps711x arch

$ ln -s proc-armv proc

$ cd ../../

为你自己的系统定制:

$ make menuconfig

在这里你只需要选你使用的 CPU 或选则有你使用的 CPU 的板子即可,

当然进行更详细的配置更好。

注:

include/asm-arm/proc-armo 是26位ARM

include/asm-arm/proc-armv 是32位ARM

注:背景知识

在ARM1中实现26位地址空间,但没有被商用。

在ARM2,2a 中还有26位地址空间,现在已经废弃。

在ARM3中扩展到32位地址空间,但是还反向兼容26位。

在ARM4中是32位地址空间,停止兼容26位地址空间。在 T 系列中加入 Thumb 指令。

在ARM5中是32位地址空间,在所有系列中均支持 16 位的 Thumb 指令。

1.5拷贝头文件

$ mkdir -p $PREFIX/$TARGET/include

$ cp -dR include/linux $PREFIX/$TARGET/include

$ cp -dR include/asm-arm $PREFIX/$TARGET/include/asm

1.6为 gcc 建立一个 linux kernel 头文件的连接

编译gcc时,它需要 linux kernel 的头文件,你可以用 --with-headers=$PREFIX/$TARGET/include 来指定头文件的位置,gcc 把它拷贝到 $PREFIX/$TARGET/sys-include。我们可以建立个 sys-include 连接,就不用 --with-headers 了。

$ cd $PREFIX/$TARGET

$ ln -s include sys-include

2编译安装binutils

这里用不到前面准备的 linux 头文件

2.1解压缩

$ cd ~/tars/SourceDir

$ tar -zxf ../binutils-$VBINUTILS.tar.gz

2.2编译

$ cd ~/tars/BuildDir

$ mkdir binutils

$ cd binutils

$ ../../SourceDir/binutils-$VBINUTILS/configure \

--target=$TARGET \

--prefix=$PREFIX

$ make all install

2.3输出 binutils 的路径到环境变量中

你可以把它加到 .bashrc 中。如果你这么做了,你需要 logout 再 login 才能生效。

否则在 bash 的命令行上输入它并立即生效,但你 logout 再 login 时它就无效了。

export PATH=$PREFIX/bin:$PATH

3.编译安装gcc 的c 编译器

3.1解压缩

$ cd ~/tars/SourceDir

$ tar -zxf ../gcc-core-$VGCC.tar.gz

注意:为什么不用 all-in-one 的 gcc-$VGCC.tar.gz 呢?

all-in-one 的 gcc 包里面有 chill, fortran, java 等语言的编译器,虽然在下面 configure 时指定 -enable-languages=c,但编译时还是把所有的都编译一便,这不是我们需要的,而且它也总会有错误。因此我们只编译 C 语言的编译器。后面第二次编译的时候也是这个问题,我们只编译 C 和 C++ 的编译器。

3.2修改 gcc 的 t-linux 文件

在 t-linux 文件中的 TARGET_LIBGCC2_CFLAGS 上加上 __gthr_posix_h 和 inhibit_libc

$ cd gcc-$VGCC/gcc/config/arm

$ mv t-linux t-linux-orig

$ sed 's/TARGET_LIBGCC2_CFLAGS =/TARGET_LIBGCC2_CFLAGS = -D__gthr_posix_h -Dinhibit_libc/' < t-linux-orig > t-linux-core

$ cp ./t-linux-core ./t-linux

3.4编译

$ cd ~/tars/BuildDir

$ mkdir gcc-core

$ c

[1] [2] 下一页

频道声明:本频道的文章除部分特别声明禁止转载的专稿外,可以自由转载.但请务必注明出出处和原始作者 文章版权归本频道与文章作者所有.对于被频道转载文章的个人和网站,我们表示深深的谢意。

原始作者:佚名 录入时间:2007-5-12 04:00:21
信息来源:不详 投稿信箱:itqoo@126.com
教程录入:itqoo    责任编辑:itqoo 
  • 上一个教程:

  • 下一个教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    - 关于我们 - 合作伙伴 - 友情链接 - 广告刊登 - 投稿热线 - 在线留言版权声明联系方式 -
    IT公社版权所有 粤ICP备05127012号
    Copyrigh@2005-2006 itqoo.com.Inc All Rights Reserved  推荐分辨率 1024*768
    联系站长:E-Mail:itqoo@126.com     MSN:urchincc@hotmail.com    QQ:点击这里给我发消息
    特别感谢:亿太网络提供空间支持