Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->Linux技术 ->网络应用 ->正文

高手进阶 学会做嵌入式Linux操作系统

来源:赛迪网技术社区  作者:Webmaster 时间:2007-06-03 点击: [收藏] [投稿]

本章要讲述的是自动创建交叉编译环境的方法。目标,针对商业硬件平台,厂家都会为你提供一个开发包,我用过XX厂家的IXP425和 MIPS的,非常地方便,记得我第一次接触嵌入式开发,拿着这个开发包自动化创建交叉编译环境、编译内核、建立根文件系统、创建Ram Disk,我反复做了三四次,结果还不知道自己究竟做了些什么,呵呵,够傻吧……

所以,建议没有这方面经验的读者,还是首先尝试一下手工创建的方法吧,而本章接下来的内容,是送给曾经被它深深伤害而不想再次去亲历这项工作而又想提高交率而又在通用平台上工作没有商业开发包的朋友。

建立交叉开发工具链

准备工具:

buildroot-0.9.27.tar.tar

只需要一个软件?对,其它的不用准备了,buildroot事实上是一个脚本与补丁的集合,其它需要用到的软件,如gcc、uClibc,你只需在buildroot中指明相应的版本,它会自动去给你下载。

事实上,buildroot到网上去下载所需的所有工作是需要时间的,除非你的带宽足够,否则下载软件时间或许会占去80%,而我在做这项工作之间,所需的工作链全部都在我本地硬盘上,我解压开buildroot后,新建dl文件夹,将所有工具源码的压缩包拷贝进去,呵呵,buildroot就不用去网上下载了。

我的软件清单:

Linux-libc-headers-2.4.27.tar.bz2

Gcc-3.3.4.tar.bz2

binutils 2.15.91.0.2.tar.bz2

uClibc 0.9.27.tar.bz2

genext2fs_1.3.orig.tar.gz

ccache-2.3.tar.gz

将它拷贝到${PRJROOT}/build-tools下,解压

[root@skynet build-tools]# tar jxvf buildroot-0.9.27.tar.tar

[root@skynet build-tools]#cd buildroot

配置它:

[root@skynet build-tools]#make menuconfig

Target Architecture (i386) --->; 选择硬件平台,我的是i386

Build options --->; 编译选项

这个选项下重要的是(${PRJROOT}/tools) Toolchain and header file location?编译好的工具链放在哪儿?

如果你像我一样,所有工具包都在本地,不需它到网上自动下载,可以把wget command选项清空;

Toolchain Options --->; 工具链选项

--- Kernel Header Options 头文件它会自动去下载,不过应该保证与你将要用的内核是同一个版本;

[] Use the daily snapshot of uClibc? 使用最近的uClibc的snapshot

Binutils Version (binutils 2.15.91.0.2) --->; Binutils的版本

GCC compiler Version (gcc 3.4.2) --->; gcc 版本

[*] Build/install c++ compiler and libstdc++?

[ ] Build/install java compiler and libgcj? 支持的语言,我没有选择java

[ ] Enable ccache support? 启用ccache的支持,它用于编译时头文件的缓存处理,用它来编译程序,第一次会有点慢,但是以后的速度可就很理想了,呵呵……

--- Gdb Options 根据你的需要,选择gdb的支持

Package Selection for the target --->;

这一项我没有选择任意一项,因为我打算根文件系统及busybox 等工具链创建成工,手工来做。

Target Options --->; 文件系统类型,根据实际需要选,我用的ext2;

配置完成后,编译它:

[root@skynet build-tools]#make

这一项工作是非常花时间的,我的工具包全部在本地,也花去我一小时十三分的时间,如果全要下载,我估计网速正常也要多花一两个钟头。

经过漫长的等待(事实上并不漫长,去打了几把游戏,很快过去了):

……

make[1]: Leaving directory `/home/skynet/build-tools/buildroot/build_i386/genext2fs-1.3'

touch -c /home/skynet/build-tools/buildroot/build_i386/genext2fs-1.3/genext2fs

#-@find /home/skynet/build-tools/buildroot/build_i386/root/lib -type f -name \*.so\* | xargs /home/skynet/tools/bin/i386-linux-uclibc-strip --remove-section=.comment --remove-section=.note --strip-unneeded 2>;/dev/null || true;

/home/skynet/build-tools/buildroot/build_i386/genext2fs-1.3/genext2fs -i 503 -b 1056 \

-d /home/skynet/build-tools/buildroot/build_i386/root -q -D target/default/device_table.txt /home/skynet/build-tools/buildroot/root_fs_i386.ext2

大功告成!!!

清点战利品

让我来看看它究竟做了哪些事情吧:

[root@skynet skynet]# cd tools

[root@skynet tools]# ls

bin bin-ccache i386-linux i386-linux-uclibc include info lib libex!ec man usr



 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<



上一篇:修正Linux下丑陋的FireFox表单控件问题   下一篇:实用技巧两则 主机名修改与Cat命令退出

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章
Power by linux-cn.com 粤ICP备05006655号