Chinaunix首页 | 论坛 | 博客
  • 博客访问: 678978
  • 博文数量: 183
  • 博客积分: 9166
  • 博客等级: 中将
  • 技术积分: 1920
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-31 16:17
文章分类

全部博文(183)

文章存档

2010年(159)

2009年(24)

分类:

2010-03-21 15:48:16

/*******************************第一部分***************************************/

预先安装软件

bison flex build-essential patch libncurses5-dev
这些软件最好都装上,否则可能会出错,然后只能重新编译。可以使用apt-get install来安装
本方案所选软件包如下:(注:由于glibc可能对于版本限制比较严格所以没有尝试其他的组合这些都是大家认为比较稳定可靠的一种组合
crosstool-0.43
gcc-3.3.6
gcc-4.1.1
glibc-2.3.2
binutils-2.16.1
linux-libc-headers-2.6.12.0
linux-2.6.27.6

1. Ubuntu 8.04默认安装的 gcc 版本为4.2.4,可能编译会出现问题,选择使用 gcc-4.1.1
安装  sudo apt-get install gcc-4.1
sudo rm /usr/bin/gcc (删除GCC,它只是个到gcc-4.2.4的软链接文件)
sudo ln -s /usr/bin/gcc-4.1 /usr/bin/gcc (建立GCC到gcc-4.1的软链接)

这样gcc版本就会是4.1 如果不修改,后面编译会报old错误,其实是gcc版本过高不支持我们使用较低的4.1版本才能编译通过。后续还可能出现的configure: error: no acceptable cc found in $PATH 错误也是由于gcc版本问题所造成的。
编译完成后可以运行以下命令修改回来
sudo rm /usr/bin/gcc
sudo ln -s /usr/bin/gcc-4.3 /usr/bin/gcc
如果运行
ls -la /bin/sh
看到链接的是 dash ,则请运行以下命令
sudo dpkg-reconfigure dash
选择 no 以删除 dash ,编译完成可再运行此命令选择 yes 以重新安装 dash
此处如果不改好的话,编译时会出现错误

/*******************************第二部分***************************************/


修改 crosstool-0.43 目录下 demo-arm9tdmi.sh 为
#!/bin/sh
# This script has one line for each known working toolchain
# for this architecture. Uncomment the one you want.
# Generated by generate-demo.pl from buildlogs/all.dats.txt
set -ex
TARBALLS_DIR=$HOME/Download (此处为crosstool需要下载的文件目录)
RESULT_TOP=/
home/yuanyangliu/Arm/crosstool(这是需要生成的工具链存放目录)
export TARBALLS_DIR RESULT_TOP
GCC_LANGUAGES="c,c++"
export GCC_LANGUAGES
# 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
#eval `cat arm9tdmi.dat gcc-3.2.3-glibc-2.2.5.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.2.3-glibc-2.3.2.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.2.3-glibc-2.3.2-tls.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.3.6-glibc-2.2.5.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.3.6-glibc-2.3.2.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.3.6-glibc-2.3.2-tls.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.2.5.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.2.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.2-tls.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.5.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.5-tls.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.6.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.6-tls.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.2.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.2-tls.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.5.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.5-tls.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.6.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.6-tls.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-4.1.0-glibc-2.3.2.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-4.1.0-glibc-2.3.2-tls.dat` sh all.sh --notest
eval `cat arm9tdmi.dat gcc-4.1.1-glibc-2.3.2.dat` sh all.sh --notest
echo Done.
其中红色部分是需要修改的
TARBALLS_DIR 是下载的工具源码压缩包的存放目录,可事先下载好源码压缩包存放于此(不要解压)。
RESULT_TOP 是要生成的工具链的存放目录,一定要改到有写权限的目录,不然无法编译,具体放哪里自行决定即可。


修改 crosstool-0.43 目录下 gcc-4.1.1-glibc-2.3.2.dat 为
BINUTILS_DIR=binutils-2.16.1
GCC_CORE_DIR=gcc-3.3.6
GCC_DIR=gcc-4.1.1
GLIBC_DIR=glibc-2.3.2
LINUX_DIR=linux-2.6.27.6
LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.12.0
GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2
GDB_DIR=gdb-6.5

保存退出。
在终端中进入 crosstool-0.43 目录执行
./demo-arm9tdmi.sh
注:不要以root用户登录进行编译
(root用户执行很危险)
差不多搞了一小时,终于看到如下信息:

+echo Done.
Done.      

编译完成后应该在你所设的工作目录下的 gcc-4.1.1-glibc-2.3.2/arm-9tdmi-linux-gnu/bin 下找到 arm-9tdmi-linux-gnu-gcc
添加目录
在终端中输入以下命令
sudo gedit /etc/environment

在PATH结尾的分号前添加 Crosstool 的 bin 目录
例如我的如下:
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/yuanyangliu/Arm/crosstool/gcc-4.1.1-glibc-2.3.2/arm-9tdmi-linux-gnu/bin"


还行,可以用!不信试试看。Ubuntu 8.04。

                                                                                              洋洋

                                                                                            2010.03.21

阅读(2789) | 评论(2) | 转发(0) |
0

上一篇:有是一个上午

下一篇:ARM软件系统定制

给主人留下些什么吧!~~

liuyuanyang2010-03-21 18:50:01

mhsy2003: 交叉编译是啥意思呢,杂交?:》
就是在一个平台下编译另外一个平台上的目标代码
比方说:在X86平台下编译ARM体系结构指令 能直接在ARM平台上执行

mhsy20032010-03-21 18:33:45

交叉编译是啥意思呢,杂交?:》