看内核,对根文件系统的理解比较模糊,网上找了下,有一篇讨论的很好,解释本质。主要回答:文件系统是什么,根文件系统又是什么,根文件系统与内核的关系。现总结如下。
1楼:
文件系统是数据保存到设备上所使用的一种组织结构或格式。也可以说是操作系统访问外部设备数据所约定的一种通用访问接口格式。 所涉及的设备可以是普通的块设备,也可以是其他形式的虚拟设备。例如位于内存中的虚拟磁盘、网络设备等。
根文件系统是Linux(或者说是UNIX类)操作系统运行时所需要的特有文件系统。该文件系统不仅具有普通文件系统的存储数据文件的功能,还被操作系统用来存储运行时所需要的一些特殊文件。这些特殊文件包括操作系统运行时的配置数据文件(通常位于/etc目录下)和设备文件(位于/dev目录下)。设备文件实际上保存着对应设备的一些相关参数,操作系统通过使用它们来与应用程序进行接口,并与设备进行交互。因此根文件系统是Linux运行时所必须的。
2楼:
“文件系统”与“根文件系统”。
要不我们就统一简称为FS和RFS:
文件系统:File System => FS;
根文件系统:Root File System => RFS。
首先你考虑一点描述语句:根文件系统也是一种“文件系统”,可以认为是一种“特殊的”“文件系统”,为什么是叫“特殊的”呢?是因为这种“根”“文件系统”承载着某些“特殊的功能”(其实“文件系统”相同的话,所具备的功能都是一样的),那就是“操作系统”可能需要通过某种“布局”来管理相关设备的,诸如软盘设备、硬盘设备、虚拟磁盘设备等等,这里可能就是用了一种已被定义好了“数据结构”的“布局”,即“文件系统”,而出现的“根文件系统”呢可能是用来担当主要或重要角色。
(形象点来说,Windows下的C盘分区是有一定文件系统的,如FAT32、NTFS,这当然也都是文件系统呀。在安装Windows操作系统时,会要求你先“格式化”C盘[当然我们目前考虑操作系统是被安装在C盘中],采用一种“文件系统”比如NTFS、FAT32等,这一步呀,就类似于安装“根文件系统”,也就是说在C盘中的NTFS文件系统会被称作是“根文件系统”,而在D盘等中的NTFS文件系统会被称作是“文件系统”或你想加上前缀名称也不是不可以,比如“普通文件系统”,而我们从名称上来说的话,因为这里出现了一个字眼“根”,所以我们就有两种名称的叫法了,自然就是FS与RFS,所以这种名称叫法就会让人感觉很是“云里雾里”,而后“不知所云”的],这个“格式化”过程就是将C盘上的存储空间呀按预先定义好的一种FS的“数据结构”去“初始化”这些磁盘,[这里假设MINIX FS也可被Windows用来“格式化”C盘呀]比如建立引导块、建立超级块、建立两类位图块、建立i节点位图块、建立好数据区块等)也就是说,这个磁盘分区必须已经按一定数据结构的方式把磁盘空间“组织”好,以便“某种系统”(OS或FS,好象是FS更准确吧)能“访问”该分区,所以在 0.11内核中会有两种区分:mount_root() 和 sys_mount(),分别指“挂载根文件系统”、“挂载文件系统”[这里我觉得不应该用一个词:安装!我所理解的意思是,“安装”就是指把某种东西“放”到另一种东西上面去,比如你要安装某种软件到C盘,这种软件的安装程序可能在D盘,这时你会启动D盘上该软件的安装程序,然后安装程序就会把软件默认安装到C盘上,所以这个过程会叫做“安装”,安装前C盘上没有该软件的任何信息,安装后C盘上就会有该软件的信息啦],所以呢,要使用sys_mount()功能,某种设备(具体来说就是某一分区)必须已经被某种FS的格式“安装”好,然后该设备才会被“挂载”(mount)到“一个地方”去
3楼:
最近我也遇到了想关的困惑。
我一直用的UBUNTU系统,启动时首先是GRUB然后由GRUB来引导UBUNTU启动。在安装UBUNTU操作系统的时,我们需要首先分区,生成相应的文件系统,然后才进入操作系统的安装过程。由此可见系统文件(包括内核文件)是基于文件系统的,操作系统是安装在相应的文件系统上面的。而且通过文件系统,我们也能够访问到系统文件。
毕业时我的毕业设计是“在ARM7+UClinux平台下实现一个驱动程序”。我买了一个开发板,所有的东西都已经移植好了,直接通过交叉编译工具生成一个Image文件,通过U-BOOT下载到flash中就可以了。首先配置好内核选项,然后"make",“make image”(此步骤会出错,不用管),"make romfs","make image"。最后生成的Image文件包括了内核和文件系统。由此看来ARM7上的UClinux和pc上的LINUX系统是一致的。
最近接触了ARM9,它的FLASH分为4块。地址从小到大依次为:bootloader,内核影像,根文件系统,用户文件系统。根文件系统需要我们开发者根据需要用工具制作。这样以来就和我以前理解的内核和文件系统的关系不一样了,我一直认为内核是基于文件系统的,他是需要通过文件系统来管理的。而现在 的ARM9的启动过程是,首先启动内核,然后再加载文件系统。
所以我很是郁闷,到底两者是什么关系呢。我觉得这个问题在我看来就是先有母鸡还是先有鸡蛋的问题?