高手进阶 学会做嵌入式Linux操作系统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命令退出 更多相关文章
|
推荐文章
精彩文章
|