为linux内核构建最小的根文件系统.doc
上传人:qw****27 上传时间:2024-09-12 格式:DOC 页数:5 大小:35KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

为linux内核构建最小的根文件系统.doc

为linux内核构建最小的根文件系统.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

[导读]在此,我们利用现有分析,构建一个可以说是很小的根文件系统,busybox是针对嵌入式开发需求,集各种unix工具于一身的很小很强大的工具集。企业软件热点文章WindowsXP注册表的常用设置如何编写Linux设备驱动程序linux内核init进程函数的部分代码如下:01if(execute_command)02run_init_process(execute_command);0304run_init_process("/sbin/init");05run_init_process("/etc/init");06run_init_process("/bin/init");07run_init_process("/bin/sh");0809panic("Noinitfound.Trypassinginit=optiontokernel.");10}代码中我们看出,linux内核在初始化的最末段,也就是挂载了跟文件系统之后,开始了与根文件系统,也就是用户应用的沟通,我们看到:内核分别尝试了/sbin/init,/etc/init,/bin/init,/bin/sh四个应用的执行,由此可以想到,只要我们准备相应的应用,并且只要满足其中之一,就可以启动系统了,如果任何的一个都没有满足,那么久会出现很经典的内核panic:Noinitfound.Trypassinginit=optiontokernel.在此,我们利用现有分析,构建一个可以说是很小的根文件系统,busybox是针对嵌入式开发需求,集各种unix工具于一身的很小很强大的工具集。busybox的编译过程不再赘述,现假设busybox编译后已经生成如下文件夹:binlinuxrcsbinusr其中,linuxrc为程序,bin、sbin、usr为文件夹,其实三个文件夹内绝大部分是程序,并且是指向bin/busybox的链接,也就是所有的命令均由bin/busybox执行我们看到,内核初始化最后一次尝试的bin/sh,猜想上来sh并不会跟其它的程序产生关联,所以干脆删除sbin和usr再说,同时linuxrc似乎也不是必须,最多内核报告错误,并不会产生panic,所以精简后,根目录如下(有点裸了:)):bin呵呵,现在想,估计是启动不起来的,为什么呢?起码sh程序或者说busybox要依赖一些动态库,当然可以编译选择静态编译了,那么似乎连什么库都不要,但是我们这里说的最小,并不是文件最少,而是最必须的意思,同时默认busybox编译,采用动态库,所以无论怎么说,lib库是最小根文件系统必须的。所以,添加lib目录,其中的动态库文件来自交叉编译器的lib目录。现在的最小根文件系统如下:binlib这时候,先别急,我们发现bin目录下,仍然有很多文件,当然也是链向bin/busybox的链接,也就是说,有没有他们没什么关系,那么如果删除他们也没什么影响咯,开始精简bin目录,精简后目录如下:busyboxshsh程序(到busybox的链接),以及busybox,现在发现,直接输入rm等命令已经不管用了,那么是不是意味着我们的精简结束了呢?因为诸如rm这样的命令只是一个指向busybox的链接,那么就是说我们直接busyboxrm这样调用,也可以使用咯,测试一下,果然好用。现在bin目录做到了最小。回顾一下,我们现在的根文件系统目录如下:其中,bin目录已经最小,下面看看lib目录有没有什么压缩的空间。binliblib目录之所以保留到现在,是因为总是怀疑busybox可能用到这个那个库的,所以看看busybox到底用到些什么动态库,pc上执行命令arm-linux-gcc-dbusybox,看到以下结果:01Dynamicsectionatoffset0xb5014contains22entries:02TagTypeName/Value030x00000001(NEEDED)Sharedlibrary:[libcrypt.so.1]040x00000001(NEEDED)Sharedlibrary:[libm.so.6]050x00000001(NEEDED)Sharedlibrary:[libc.so.6]060x0000000c(INIT)0xc18c070x0000000d(FINI)0x9e8dc080x00000004(HASH)0x80e8090x00000005(STRTAB)0xa410100x00000006(SYMTAB)0x8b40110x0000000a(STRSZ)3410(bytes)120x