[实验学习环境]
操作体统:fedora 7
系统内核:linux 2.6.23.17-88
cpu型号:i686
硬件平台:i386
(通过指令uname -a 可以得到系统信息)
编译器:GCC 4.1.2(通过指令gcc -v可以得到版本信息)
参考书籍:《ARM嵌入式Linux系统构建与驱动开发范例》,作者:周立功,陈明计,陈渝;出版社:北京航空航天大学出版社.《源码开放的嵌入式系统软件分析与实践--基于SkyEye和ARM开发平台》,作者:陈渝,李明,杨晔等;出版社:北京航空航天大学出版社
推荐访问网站:http://www.uclinux.org 这上面有很多需要的文件,包括内核源码。
1,建立交叉编译环境。
这里建立交叉编译环境,有两种方法,一种是从源码制作,另一种是安装二进制的交叉工具链。
实际上,我只是实践第二种方法成功了。第一种方法,虽然我也尝试了,好像是没有成功。这里为了记录,我还是写一下。
(1)从源码制作交叉编译环境
第一步,在/source目录下准备如下文件:
binutils-2.10.tar.bz2 二进制文件的工具包
binutils-2.10-full.patch 工具包的补丁
gcc-2.95.3.tar.bz2 GCC编译器
gcc-2.95.3-full.patch GCC 的补丁
gcc-2.95.3-arm-pic.patch GCC的补丁
gcc-2.95.3-arm-pic.patch2 GCC的补丁
gcc-2.95.3-arm-mlib.patch GCC的补丁
gcc-2.95.3-sigset.patch GCC的补丁
gcc-2.95.3-m68k-zext.patch GCC的补丁
genromfs-0.5.1.tar.gz 生成romfs的工具
STLport-4.5.3.tar.gz STL相关补丁
STLport-4.5.3.patch STL相关补丁
elf2flt-20030314.tar.gz 用来把elf格式的文件转换为flat格式文件的工具
build-uclinux-tools.sh 编译交叉编译环境所用的脚本
第二步,从源码开始来编译自己的交叉工具链。把/source目录下的所有与编译环境相关的文件拷贝到同一目录下,并进入此目录。以root用户的身份执行以下命令:
# ./build-uclinux-tools.sh build 2>&1|tee errs
(2)安装二进制的交叉工具链arm-elf工具
肯定你得先有执行文件吧,它就是arm-elf-tools-20040427.sh。然后在命令行(root身份)执行如下命令:
;拷贝arm-elf-tools-20040427.sh到根目录
# cp /source/arm-elf-tools-20040427.sh /
;使文件arm-elf-tools-20040427.sh具有可执行权限
#chmod 755 arm-elf-tools-20040427.sh
;运行该脚本
# ./arm-elf-tools-20040427.sh
最后查看/usr/local/bin/目录中是否存在以arm-elf-开头的编译环境文件。如果存在则说明交叉编译环境安装成功!
是的,我们可以大笑一声。不过好戏还在后头,耐心点吧。
2,使用GNU TOOLS 编译uClinux内核
首先你得先下载到内核源码,这里需要特别提出,我最初下载到了uClinux-dist-20070130.tar.gz,这个是官方网站给的最新版本,但之后我按如下方法编译就出错。主要是在交叉编译器上的问题,查了很久也没找到方法解决。然后老实的下载了一个大众版本:uClinux-dist-20040408.tar.gz。谁解决了那个问题可以告诉我阿,谢谢了。
然后按如下步骤编译内核:
(1)解压缩和解包:tar zxf uClinux-dist-20040408.tar.gz
(2)进入目录:cd uClinux-dist
(3)内核配置:make xconfig(图形方式)或者make menuconfig(命令行方式)
其中在Vendor/Product中选择GDB/ARMulator,Kernel Version 中选择linux-2.4.x,Libc Version中选择uC-libc,最后选择Save and Exit。
之后,创建内核依赖关系:make dep
编译内核: make
最后,在/usr/src/uclinux-dist/linux-2.4.x目录下生成一个带调试信息的名为linux的文件,该文件为elf格式的内核执行文件;同时在/usr/src/uclinux-dist/images/生成文件系统映像文件romfs.img等。
这里,内核就编译好了,最后让我们测试一下吧。
3,使用SkyEye进行测试。
首先生成配置文件,在uclinux-dist目录下建立skyeye的配置文件skyeye.conf,内容如下:
cpu:arm7tdmi
mach:at91
mem_bank:map=M,type=RW,addr=0x00000000,size=0x00004000
mem_bank:map=M,type=RW,addr=0x01000000,size=0x00400000
mem_bank:map=M,type=R,addr=0x01400000,size=0x00400000,file=images/romfs.img
mem_bank:map=M,type=RW,addr=0x02000000,size=0x00400000
mem_bank:map=M,type=RW,addr=0x02400000,size=0x00008000
mem_bank:map=M,type=RW,addr=0x04000000,size=0x00400000
mem_bank:map=I,type=RW,addr=0xf0000000,size=0x10000000
然后在/usr/src/uclinux-dist执行如下命令:
#skyeye -e linux-2.4.x/linux
然后你就可以看到一些新的好东西了!当然如果有errors,只能你自己解决了,加油吧!