我们知道linux的一般启动过程是uboot引导内核、内核挂载文件系统,文件系统挂载完毕之后开始执行初试化的用户程序,
这里文件系统是怎么被挂载的呢?今天就来详细的剖析一下。
我们在uboot的环境变量里经常看到root=/dev/mtdblock3这样的字样,我们知道这个是用来指定我们最后要挂载的文件系统
的位置的。但是问题出现了,/dev/mtdblock3是指文件系统当中的一个文件,但是在挂载文件系统之前根本还没有目录和文件
和文件的概念,典型的先有鸡还是先有蛋的问题。挂载文件系统需要目录文件,有目录文件的前提是要挂载了文件系统。这样
肯定是不行的。所以我们就要现提供一只“鸡”,就是文件系统,让我们能找到/dev/mtdblock3这个文件,然后再去挂载其上面
的文件系统。那么又有问题了,我们是通过什么方法和步骤提供的那只“鸡”(文件系统)的?这就是下面要讲的initrd机制和
initramfs机制
这两个机制的原理和作用有很大的相似:
1. 在挂载真正的文件系统之前,它们会挂载一个基于内存的虚拟文件系统,这个文件系统只是起个过度的作用,为了挂载
真正的文件系统(root=/dev/mtdblock3指定位置的文件系统)做铺垫的。
2. 在挂载虚拟文件系统后都会执行一个可执行文件,initrd机制会执行虚拟文件系统根目录下的linuxrc或init文件文件,initramfs会
执行虚拟文件系统根目录下的init文件。
3. 使用这两种机制还有一个好处:现在文件系统可以存在多种介质上,每一种介质都有相应的驱动,如果把这些驱动全部编进
内核,势必造成内核十分庞大。引入了这两种机制后,我们可以把各种驱动编译成模块,然后在启动的时候根据检测到的硬件
来插入模块驱动。插入模块驱动这个动作就是在上面的linuxrc或init可执行文件中。插入模块之后,就有了操作硬件的驱动,
然后就可以进行真正的文件系统挂载了
阅读(1077) | 评论(0) | 转发(0) |