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

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

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

bin:所有的编译工具,如gcc,都在这儿了,只是加了些指定的前缀;

bin-ccache:如果在Toolchain optaion中没有选择对ccache的支持,就没有这一项了;

i386-linux:链接文件;实际指向include

i386-linux-uclibc:uclibc的相关工具;

include:供交叉开发工具使用的头文件;

info:gcc 的info文件;

lib:供交叉开发工具使用的链接库文件;

……

现在可以把编译工具所在目录XXX/bin添加至PATH了

测试工具链

如果你现在写一个程序,用i386-linux-gcc来编译,运行的程序会告诉你:

./test: linked against GNU libc

因为程序运行库会寻到默认的/lib:/usr/lib上面去,而我们目前的uclibc的库并不在那里(虽然对于目标机来讲,这是没有错的),所以,也只能暂时静态编译,试试它能否工作了。当然,你也可以在建好根文件系统后,试试用chroot……

第三章 编译内核

本章的工作,是为目标机建立一个合适的内核,对于建立内核,我想有两点值得考虑的:

1、功能上的选择,应该能够满足需要的情况下,尽量地小;

2、小不是最终目的,稳定才是;

所以,最好编译内核前有一份目标机硬件平台清单以及所需功能清单,这样,才能更合理地裁减内核。

准备工具

Linux内核源码,我选用的是Linux-2.4.27.tar.bz2

编译内核

将Linux-2.4.27.tar.bz2拷贝至${PRJROOT}/kernel,解压

#cd linux-2.4.27

//配置

# make ARCH=i386 CROSS_COMPILE=i386-linux- menuconfig

//建立源码的依存关系

# make ARCH=i386 CROSS_COMPILE=i386-linux- clean dep

//建立内核映像

# make ARCH=i386 CROSS_COMPILE=i386-linux- bzImage

ARCH指明了硬件平台,CROSS_COMPILE指明了这是交叉编译,且编译器的名称为i386-linux-XXX,这里没有为编译器指明路径,是因为我前面已将其加入至环境变量PATH。

又是一个漫长的等待……

OK,编译完成,673K,稍微大了点,要移到其它平台,或许得想办法做到512以下才好,回头来想办法做这个工作。

安装内核

内核编译好后,将内核及配置文件拷贝至${PRJROOT}/images下。

# cp arch/i386/boot/bzImage ${PRJROOT}/images/bzImage-2.4.27-rmk5

# cp vmlinux ${PRJROOT}/images/vmlinux-2.4.27-rmk5

# cp System.map ${PRJROOT}/images/System-2.4.27-rmk5

# cp .config ${PRJROOT}/images/2.4.27-rmk5

我采用了后缀名的方式重命名,以便管理多个不同版本的内核,当然,你也可以不用这样,单独为每个版本的内核在images下新建对应文件夹也是可行的。

安装内核模块

完整内核的编译后,剩下的工作就是建立及安装模块了,因为我的内核并没有选择模块的支持(这样扩展性差了一点,但是对于我的系统来说,功能基本上定死了,这样影响也不太大),所以,剩下的步骤也省去了,如果你还需要模块的支持,应该:

//建立模块

#make ARCH=i386 CROSS_COMPILE=i386-linux- modules

//安装内核模块至${PRJROOT}/images

#make ARCH=i386 CROSS_COMPILE= i386-linux- \

>;INSTALL_MOD_PATH=${PRJROOT}/images/modules-2.4.18-rmk5 \

>;modules_install

最后一步是为模块建立依存关系,不能使用原生的depmod来建立,而需要使用交叉编译工具。需要用到busybox中的depmod.pl脚本,很可惜,我在busybox1.0.0中,并没有找到这个脚本,所以,还是借用了busybox0.63中scripts中的depmod.pl。

将depmod.pl拷贝至${PREFIX}/bin目录中,也就是交叉编译工具链的bin目录。

#depmod.pl \

>;-k ./vmlinux –F ./System.map \

>;-b ${PRJROOT}/images/modules-2.4.27-rmk5/lib/modules >; \

>;${PRJROOT}/images/modules-2.4.27-rmk5/lib/modules/2.4.27-rmk5/modules.dep

注:后面讨论移植内核和模块内容时,我只会提到内核的拷贝,因为我的系统并没有模块的支持。如果你需要使用模块,只需按相同方法将其拷贝至相应目录即可。

附,内核编译清单

附,内核选择:

内核编译记录:

Code maturity level options 不选

Loadable module support 不选

Processor type and features 根据实际,选择处理器类型

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



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

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