LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 4480|回复: 8

arm交叉编译环境的patch(gcc-4.2.1,glibc-2.6.1,binutils-2.18, little-endian)

[复制链接]
发表于 2007-10-9 15:34:39 | 显示全部楼层 |阅读模式
编译了一个arm的开发环境,小字节序的,支持eabi。和大家共享一下。
在crosstool-0.43的基础上整合了网上一些patch。
希望对大家有所帮助。

本人的系统ubuntu7.04,编译的时候需要gawk,否则会有些问题(也是从这个论坛中搜索到的)。
还有就是去掉latest-eabi.sh中--nounpack。

由于我没有小字节序的平台,无法作测试(个人需要的是大字节序的开发环境,正在努力中)。

??
不过虽说编译没有问题,可以还是有个问题不是很明白,希望高手指点,主要是在build-glibc-headers的时候。
编译的过程中需要定义这样一个宏,我干脆在crosstool.sh的脚本中将该定义强制设到了include/asm/unistd.h中了。
FIXME
#define __ARM_EABI__

问题主要处在下面的预处理中
glibc-2.6.1/ports/sysdeps$unix/sysv/linux/arm/eabi/sysdep.h
#if __NR_SYSCALL_BASE != 0
# error Kernel headers are too old
#endif
会一直提示内核版本过老。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2007-12-25 16:32:18 | 显示全部楼层
楼主能不能吧你的编译过程详细的写出来,我交叉编译总是出错
谢谢了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-12-26 15:11:59 | 显示全部楼层
什么错误,发上来看看。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-12-28 17:31:33 | 显示全部楼层
不要使用root进行编译,根本就不行,而且很危险(会删除目标目录下的所有东西的)。

1)url: http://www.kegel.com/crosstool/,下载crosstool-0.43.tar.gz,解压缩。

2)给源代码打补丁:
$ cd crosstool-0.43 && patch -p1 < ../diff.txt

3)修改编译脚本:
$ vi latest-earm.sh
将倒数第三行的--nounpack去掉。由于调试的时候不希望每次都解压源代码。
TARBALLS_DIR=/var/ftp/incoming/linux/dev_tools/downloads # 希望源代码保存的位置。crosstool会在指定的目录下进行查看,如果发现有源代码,是不会在网络上下载的,如果没有的话,会自动连接几个镜像网站进行尝试下载。我一般喜欢用个多线程的工具将源代码全都下载下来,放到一个目录中待以后使用。
RESULT_TOP=/opt/crosstool  #生成的二进制文件的保存位置。
export TARBALLS_DIR RESULT_TOP #导出环境变量。
GCC_LANGUAGES="c,c++" # 支持的语言类型
export GCC_LANGUAGES # 导出

PARALLELMFLAGS=-j3 # 如果是个多核的cpu,改大一些,原来看过一个公式,好像是ncpu * 2 +1
export PARALLELMFLAGS # 导出

# Really, you should do the mkdir before running this,
# and chown /opt/crosstool to yourself so you don't need to run as root.
mkdir -p $RESULT_TOP #要确认你有权限网这个目录里面写东西,我是先用的root用户建了一个目录,改了一个所有权限。

# Build the toolchain.  Takes a couple hours and a couple gigabytes.
eval `cat earm.dat gcc-4.2.1-glibc-2.6.1-tls.dat`  sh all.sh --notest --nounpack # 第一次编译,去掉--nounpack,否则不能解压,我当初为了调试方便。  :)
# `cat earm.dat gcc-4.2.1-glibc-2.6.1-tls.dat`这一部分表示我现在使用的是哪一个arm的配置,并且希望的gcc和glibc。我只是将这个gcc-4.2.1-glibc-2.6.1-tls.dat调试过去了,其他的还真没有试。

4)创建目标目录,同时修改所有者。
$ mkdir /opt/crosstool && sudo chown arm.arm /opt/crosstool

5)好了,可以运行脚本了
$./latest-earm.sh
等个八个小时就差不多了。

6)修改权限,以防误操作。
$cd /opt/crosstool && sudo chown root.root * -R #依个人设置而定
回复 支持 反对

使用道具 举报

发表于 2008-1-10 21:27:15 | 显示全部楼层
我自己编译crosstool也成功过几次,不过没有一次编译出来的crosstool
再编译出来的东西可以在目标板运行,总是说glibc那几个库文件版本不对什么的。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-1-28 12:41:45 | 显示全部楼层
glibc-2.6.1的是ld-linux.so.3,可以看一下制作的系统里面的/lib/下的ld-linux.so,由于上面提供的patch制作出来的库文件只支持eabi,所以所有的应用都需要重新编译。同时内核要将ebai支持开启。
回复 支持 反对

使用道具 举报

发表于 2008-2-6 16:21:45 | 显示全部楼层
谢谢!
前面用crosstool-0.43.tar.gz试了多次,均告失败。
打了补丁后,终于编译通过了。

顺便问一下,latest-earm.sh中TARGET能改么?我想改成xscale_be,不知可不可以。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-12-20 17:38:59 | 显示全部楼层
Post by allenchen;1814573
谢谢!
前面用crosstool-0.43.tar.gz试了多次,均告失败。
打了补丁后,终于编译通过了。

顺便问一下,latest-earm.sh中TARGET能改么?我想改成xscale_be,不知可不可以。
可以的,我记得默认就是be的。
回复 支持 反对

使用道具 举报

发表于 2010-2-24 03:29:22 | 显示全部楼层
直接基于crosstool编译的啊。。。
可是crosstool已经停止更新很久了,现在gcc都到4.4版本了,
要自己从零开始制作交叉编译toolchain,需要怎么做呢?
希望能和各位交流:)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表