Fedora 13下建立arm交叉编译环境


终于把交叉编译环境、移植内核和制作root文件系统在arm开发板上顺利跑通了。期间有的步骤很顺利,更多的是被很多细节性的问题困住,比如最后一个不起眼的小问题导致文件系统无法加载,困扰了我一个星期,最终通过分析慢慢发现了这个bug。还有各源码包版本的问题,而且网上很多介绍都是基于旧版本的。我这里全部用我能找到的最新版本,当然,至于新旧版本到底哪个更好更合适,这是个智者见智的论题,不在本文讨论之列。我坚信很多人也遇到过或者即将遇到类似的错误和问题,因此我觉得把我过去两周做过的相关工作,详细地写下来,希望对大家有所帮助!

首先是平台和环境 ,我过去两周都是基于vmware 中Ubuntu 10.04的,但是我发现Ubuntu这个很火的桌面linux发行版本并不适合进行嵌入式开发,典型的麻烦就是系统缺少很多库、服务等等,需要自己手动安装,增加了不少额外的工作,和我以前用的Fedora 9比麻烦不少。所以现在我干脆全新装了一个Fedora 13 ,把过去的工作重复一遍,边编译边纪录,力求不遗漏细节!

过程预览:

1,准备工作,包括下载源码包、补丁、建立文件夹和设置环境变量等

2,建立内核头文件

3,建立binutils

4,建立bootstrap gcc

5,建立glibc

6,建立完整版本gcc

7,测试hello world

现在就让我们开始吧!

1,准备工作

我使用的源码包和补丁 如下:

linux-2.6.34.tar.bz2

binutils-2.20.tar.gz

gcc-4.5.0.tar.bz2

gcc-4.5.0-startfiles_fix-1.patch

gmp-4.3.0.tar.bz2

mpc-0.8.2.tar.gz

mpfr-3.0.0.tar.bz2

glibc-2.11.tar.gz

glibc-linuxthreads-2.5.tar.bz2

glibc-ports-2.11.tar.bz2

glibc-2.11.2-gcc_fix-1.patch

至于怎么得到这些源码包,找google吧!

建立工作目录:

自己选一个合适的地方,建立一个总文件夹Embedded,并且在其下建立 build-tools、kernel和tools三个子文件夹、www.bkjia.com我们以后的操作就都在这里进行了。

$ mkdir Embedded

$ cd Embedded

$ mkdir build-tools    kernel     tool

$ ls


build-tools    kernel     tool

各文件夹作用如下:

build-tools : 保存binutils、gcc 和 glibc的源代码和用来编译这些源代码的目录。

kernel        : 保存内核源代码和补丁。

tools          : 保存编译好的交叉编译工具和库文件。

设置环境变量:

这里设置环境变量只是为了方便,因为每个工具的config都需要输入类似的变量,不如放在环境变量里。

在命令行下打开vi  ~/.bashrc,在文档最后输入下面几行,然后注销当前用户,重新登录

export PRJROOT=/home/jinglelong/MySoftware/Embedded                             
export TARGET=arm-linux 
export PREFIX=$PRJROOT/tools
export TARGET_PREFIX=$PREFIX/$TARGET
export PATH=$PREFIX/bin:$PATH

各变量的具体意义如下:

PRJROOT                     : 整个工程的根目录,这里当然是Embeded了

TARGET                        : 目标文件对应的体系结构,arm-linux代表编译出来的target只能在arm体系结构中运行

PREFIX                          : 设置目标文件夹的路径前缀

TARGET_PREFIX        : 设置目标文件夹的路径前缀路径

PATH                              : 添加可执行文件的路径,这里主要是只中间编译工具等

相关内容