在Mini6410上安装自己的内核和文件系统

2012-01-09 由 创建在标签 开发

前面有一篇文章说的是Mini6410的启动过程,主要说的是6410的启动的一些大致流程,并没有提到内核和文件系统。做过嵌入式的人都应该知道系统的资源是有限的,需要倍加珍惜,所以在特定的应用场景中要使用定制的内核和文件系统,而友善提供的文件系统显得很臃肿,有点浪费空间,而且不是所有的功能我们都需要用到,自己定制一个文件系统是一个很好的选择,也是在开发过程中一个必须做到的工作。

6410的内核和文件系统

由于用的是友善提供的Superboot,所以需要了解友善是如何来做的。友善的Superboot启动的时候先读取它的配置文件,找到内核镜像和文件系统的目录(注:友善Superboot的具体实现不太清楚,所以只是猜测),然后加载内核,我是用SD卡启动的,方便更新文件系统和内核。下面是友善提供的文件系统和内核的大小,你会发现比你想象的要大很多。

[root@gaoliang Linux]# ls -lh
-rwxr-xr-x    1 root     root        3.6M Nov 16 18:49 zImage_n43
-rwxr-xr-x    1 root     root      293.0M Nov 19 21:04 rootfs_qtopia_qt4.ext3

一个文件系统就占了近200M的空间,在硬件资源有限的情况下,我们还是应该要好好珍惜那点宝贵的资源。

裁剪文件系统

我是直接从友善的文件系统中把文件拷贝过来,在原有的基础上做一些改动,主要是删除一些没有用或者不实用的功能。

首先先查看每个目录的大小,从而知道哪些地方是我们重点关注的地方。

[root@localhost rootfs_qtopia_qt4]# du -sh *
724K    bin
4.0K    dev
648K    etc
53M     lib
0       linuxrc
4.0K    mnt
86M     opt
4.0K    proc
21M     root
1.2M    sbin
4.0K    sys
4.0K    tmp
76M     usr
4.0K    var
592K    www

其中lib、opt和usr占用的空间比较多,其中lib目录是因为modules目录中包含了两个版本的内核;opt是一些可选包,主要是QT相关的一些库;usr目录主要是播放器的应用程序和一些测试程序。

所以将opt目录下的东西全部删除,删除usr目录下关于应用程序的部分,如果删除了应用程序,应用程序会起不来,如smplayer就不能正常工作,也可以同时删除bin目录下相应的东西。

最后再将lib目录下的modules删除,删除了之后就只安装我们自己编译内核配置的模块,可以直接复制一份友善提供的配置文件编译内核(要与开发板对应),编译完成后用如下命令来在我的文件系统下安装模块。

make modules_install INSTALL_MOD_PATH=/opt/arm/mini6410/linux/rootfs
#INSTALL_MOD_PATH你的文件系统所在的路径

这样就可以将我们所配置的内核模块安装到我们的文件系统中来。从而减小文件系统的大小。

内核配置

内核的裁剪网上也有很多介绍,每一个配置项也都有介绍,而且翻译过来的中文资料也比较多,可以在网上搜一搜。

目前的状态和打算

现在我裁剪后文件系统已经比原先的小了很多,因为还有一些不了解的东西,所以也没有细看,如果把一些无用的东西全部去掉的话,应该能够做得很小。下面是我裁剪后的内核和文件系统:

[root@gaoliang Linux]# ls -lh
-rwxr-xr-x    1 root     root       89.0M Nov 20 08:01 rootfs_qtopia_qt4.ext3
-rwxr-xr-x    1 root     root        3.6M Jan  9  2012 zImage_n43

但是也有一个比较奇怪的现象,就是用友善提供的制作文件系统的工具所制作的文件系统比原来的还要大,并没有压缩。这个让人感动有些奇怪。我在Linux下未打包的文件系统只有69M,所以后面打算用压缩的方式打包,将文件系统压得更小,但是因为不了解Superboot做了哪些工作,这个还有一定难度。配置文件对Superboot有什么影响也需要弄清楚,因为配置文件中指定了文件系统,所以也不清楚如何让内核加载文件系统有没有受到Bootloader的影响。

因为删除了QT相关的库,所以也想移植一个新的GUI库,主要是减少文件系统的大小,我身边有人在做MiniGUI,所以初步想法是用miniGUI做一套新的GUI,但是不去开发它的应用程序了,等miniGUI3.0的源码放出来之后开始做这个工作(今天问过miniGUI的技术支持,3.0的源码还有一个月才放出,但是总归是开源,还是不错的)。

希望有对Superboot有了解的人说说,但是这个是人家的商业机密,让人挺烦的…不过这个也没有办法,还是靠自己去慢慢去摸索吧。

标签:, ,

无评论

发表评论