一直都是用得实验室的pc,编译环境都已安装好!但是学潜入式,要是连搭建个环境都不会,说不过去,就在自己的机子过把瘾!
pc环境:ubuntu9.04
将搭建的交叉编译环境:arm-linux-gcc-4.1.1
注意:文章中命令为
浅蓝色,修改部分为
红色,/home/lingd是我的主目录,
一、准备安装包
需要的安装包(其后为下载地址):
【crosstool-0.43.tar.gz】
【binutils-2.16.1.tar.bz2】
【glibc-2.3.2.tar.bz2】
【glibc-linuxthreads-2.3.2.tar.bz2】
【linux-2.6.24.tar.bz2】
【gdb-6.5.tar.bz2】
【gcc-4.1.1.tar.bz2】
【gcc-3.3.6.tar.bz2】
在用户主目录中,创建一个名为downloads文件夹
lingd@ubuntu:~$ mkdir ~/downloads将上面下载好的安装包复制到downloads目录下(下载完成后默认应该实在桌面上)
后7个安装包在安装过程中会自动下载,也可以自己提前下载好。但是因为系统单线程下载几K每秒,太慢了。 而且需要修改一下glibc里的一个文件,所以我建议提前下载。
二、安装前的修改和配置
下面是一些安装时可能遇到的问题,提前说出来,省得大家编译到一半发现错了还得重新编译,如果你想见识一下这些问题,可以直接跳转到下面的安装过程。
1.安装过程中会提示缺少下面两个包bison、flex、patch
如果以前没有装过,下载安装一下(具体包名我忘记了,可以直接输入bison查看,如果没装过,会提示你可以下载哪些包安装,flex类似)
lingd@ubuntu:~$ sudo apt-get install bisonlingd@ubuntu:~$ sudo apt-get install flex另外网上说还需要一个mm4,不过我装的时候没有提示,好像是安装flex时,解决依赖性时自动装上了。
安装过程中还可能会提示缺少patch,提示信息如下:
applying patch /home/lingd/downloads/crosstool-0.43/patches/glibc-2.3.2/arm-asm-clobber.patchgetandpatch.sh: 1: patch: not foundpatch /home/lingd/downloads/crosstool-0.43/patches/glibc-2.3.2/arm-asm-clobber.patch failed解决方法:
lingd@ubuntu:~$ sudo apt-get install patch2.还有一个莫名其妙的错误,提示说gcc版本太旧或者未安装,但是你用sudo apt-get install gcc 的时后会发现gcc已经是最新版本了,事实上这个错误是因为gcc版本太新了。解决方法如下:
lingd@ubuntu:~$ sudo apt-get install gcc-3.4lingd@ubuntu:~$ cd /usr/binlingd@ubuntu:/usr/bin$ sudo rm gcclingd@ubuntu:/usr/bin$ sudo ln -s gcc-3.4 gcc3.安装是还出现了如下错误:
/home/xxs/crosstool-0.43/build/arm-arm9tdmi-linux-gnu/gcc-4.1.1-glibc-2.3.2/build-glibc/csu/version-info.h:1:1: missing terminating " character
系统在编译生成version.o时候发现version-info.h文件有错误
解决方法:修改glibc-2.3.2中的一个文件
解压glibc-2.3.2.tar.bz2
lingd@ubuntu:/usr/bin$ cd ~/downloadslingd@ubuntu:~/downloads$ tar jxvf glibc-2.3.2.tar.bz2修改glibc-2.3.2/csu/Makefile文件
lingd@ubuntu:~/downloads$ vi glibc-2.3.2/csu/Makefile文件末尾有2处echo
echo "\"Compiled on a $$os $$version system" \
"on `date +%Y-%m-%d`.\\n\"" ;; \
改为:
echo "\"Compiled on a $$os $$version system" \"on `date +%Y-%m-%d`.\\\\n\"" ;; \echo "\"Available extensions:\\n\""; \
改为:
echo "\"Available extensions:\\\\n\""; \保存后,备份原来的glibc-2.3.2.tar.bz2,并重新压缩为glibc-2.3.2.tar.bz2
lingd@ubuntu:~/downloads$ mv glibc-2.3.2.tar.bz2 glibc-2.3.2.tar.bz2.baklingd@ubuntu:~/downloads$ tar cjvf glibc-2.3.2.tar.bz2 glibc-2.3.2三、安装交叉编译工具
解决好上面的一些小问题就可以开始安装了
1.创建一个交叉编译工具安装目录
lingd@ubuntu:~/downloads$ sudo mkdir /opt/crosstool这是因为安装文件默认是安装到这个目录里的
2.修改安装目录安装目录拥有者,为自己添加权限
lingd@ubuntu:~/downloads$ sudo chown -R lingd /opt/crosstool3.解压crosstool-0.43.tar.gz(此时安装包应该位于/home/yourname/downloads/目录下,不是的话自己改一下)
lingd@ubuntu:~/downloads$ tar -zxvf crosstool-0.43.tar.gz进入crosstool-0.43目录
lingd@ubuntu:~/downloads$ cd crosstool-0.434. 配置 crosstool-0.43
lingd@ubuntu:~/downloads/crosstool-0.43$ vi demo-arm.sh注释掉#eval `cat arm.dat gcc-4.1.0-glibc-2.3.2-tls.dat` sh all.sh --notest在其后,加上eval `cat arm.dat gcc-4.1.1-glibc-2.3.2.dat` sh all.sh --notest注意:cat arm.dat gcc-4.1.1-glibc-2.3.2.dat而不是默认的gcc-4.1.1-glibc-2.3.6-tls.dat
修改linux内核版本,linux内核可以自己选择,我的linux内核是linux-2.6.24(前面下载的那个)
lingd@ubuntu:~/downloads/crosstool-0.43$ vi gcc-4.1.1-glibc-2.3.2.datBINUTILS_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.24LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.12.0
GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2
GDB_DIR=gdb-6.5
修改交叉编译工具前缀
lingd@ubuntu:~/downloads/crosstool-0.43$ vi arm.datKERNELCONFIG=`pwd`/arm.config
TARGET=arm-linux (该名称为目标名称,我是觉得默认(arm-unknow-linux-gnu)的太长所以修改了,修改了后要注意了相关目录的权限)
TARGET_CFLAGS="-O"
5. 系统将开始编译
所有使用到的文件(缺少的文件)会在编译的时候来下载:
binutils-2.16.1
gcc-3.3.6
gcc-4.1.1
glibc-2.3.2
linux-2.6.24
linux-libc-headers-2.6.12.0
glibc-linuxthreads-2.3.2
gdb-6.5
这个工程很长需要n小时的时间来
可以ls一下看看里面的文件,里面有一些脚本文件,具体功能可以到上查看FAQ
6.运行./demo-arm.sh进行安装
lingd@ubuntu:~/downloads/crosstool-0.43$ ./demo-arm.sh这步要注意,网上有人说需要修改脚本文件里的一些设置,我没改也装上了,不知道为什么。
7.剩下的就等着编译安装吧,很漫长~~
四、修改环境变量
安装完成后,默认的安装目录就是开始创建的那个/opt/crosstools/
1.添加环境变量
lingd@ubuntu:~/downloads/crosstool-0.43$ vi ~/.bashrc在最后添加如下
if [ -d /opt/crosstool/gcc-4.1.1-glibc-2.3.2/arm-linux ]; then PATH=/opt/crosstool/gcc-4.1.1-glibc-2.3.2/arm-linux/bin:$PATHfi就是把安装的工具bin目录添加到PATH变量中。
保存
2.source ~/.bashrc,使环境变量生效
lingd@ubuntu:~/downloads/crosstool-0.43$ source ~/.bashrc3.重启终端。
输入arm后,连续按两下table键,可以看到arm-linux-gcc-4.1.1,说明已经安装成功
lingd@ubuntu:~/downloads$ arm
arm2hpdl arm-linux-gcc arm-linux-objdump
arm-linux-addr2line arm-linux-gcc-4.1.1 arm-linux-ranlib
arm-linux-ar arm-linux-gccbug arm-linux-readelf
arm-linux-as arm-linux-gcov arm-linux-size
arm-linux-c++ arm-linux-gprof arm-linux-strings
arm-linux-c++filt arm-linux-ld arm-linux-strip
arm-linux-cpp arm-linux-nm
arm-linux-g++ arm-linux-objcopy
lingd@ubuntu:~/downloads$ arm本文大部分内容借鉴http://blog.csdn.net/applezhou6699/archive/2009/08/19/4463162.aspx
阅读(3082) | 评论(0) | 转发(0) |