linux中的根文件系统(rootfs的原理和介绍)
一、什么是文件系统
文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。文件系统由三部分组成:文件系统的接口,对对象操作和管理的软件集合,对象及属性。从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,当用户不再使用时撤销文件等。
尽管内核是linux的核心,但文件却是用户与操作系统交互所采用的主要工具。这对linux来说尤其如此,这是因为在UNIX传统中,它使用文件I/O机制管理硬件设备和数据文件。
二、什么是根文件系统
根文件系统首先是内核启动时所mount的第一个文件系统,内核代码映像文件保存在根文件系统中,而系统引导启动程序会在根文件系统挂载之后从中把一些基本的初始化脚本和服务等加载到内存中去运行。
三、根文件系统为什么这么重要
根文件系统之所以在前面加一个”根“,说明它是加载其它文件系统的”根“,那么如果没有这个根,其它的文件系统也就没有办法进行加载的。
根文件系统包含系统启动时所必须的目录和关键性的文件,以及使其他文件系统得以挂载(mount)所必要的文件。例如:
四、如何在内核中挂载根文件系统
init/main.c->start_kernel()->vfs_caches_init(totalram_pages)–>mnt_init()–>/* sysfs用来记录和展示linux驱动模型,sysfs先于rootfs挂载是为全面展示linux驱动模型做好准备 // mnt_init()调用sysfs_init()注册并挂载sysfs文件系统,然后调用kobject_create_and_add()创建fs目录 */sysfs_init();/* init_rootfs()注册rootfs,然后调用init_mount_tree()挂载rootfs */init_rootfs();init_mount_tree();1、sysfs文件系统目前还没有挂载到rootfs的某个挂载点上,后续init程序会把sysfs挂载到rootfs的sys挂载点上;2、rootfs是基于内存的文件系统,所有操作都在内存中完成;也没有实际的存储设备,所以不需要设备驱动程序的参与。基于以上原因,linux在启动阶段使用rootfs文件系统,当磁盘驱动程序和磁盘文件系统成功加载后,linux系统会将系统根目录从rootfs切换到磁盘文件系统。start_kernelvfs_caches_initmnt_initinit_rootfs注册rootfs文件系统init_mount_tree 挂载rootfs文件系统vfs_kern_mountmount_fstype->mount其实是rootfs_mountmount_nodevfill_super 其实是ramfs_fill_superinode = ramfs_get_inode(sb, NULL, S_IFDIR | fsi->mount_opts.mode, 0);sb->s_root = d_make_root(inode);static const struct qstr name = QSTR_INIT("/", 1);[1*]__d_alloc(root_inode->i_sb, &name);…mnt->mnt.mnt_root = root;[2*]mnt->mnt.mnt_sb = root->d_sb;[3*]mnt->mnt_mountpoint = mnt->mnt.mnt_root;[4*]mnt->mnt_parent = mnt;[5*]
root.mnt = mnt;root.dentry = mnt->mnt_root;mnt->mnt_flags |= MNT_LOCKED;set_fs_pwd(current->fs, &root);set_fs_root(current->fs, &root);…rest_initkernel_thread(kernel_init, NULL, CLONE_FS);
在执行kernel_init之前,会建立roofs文件系统。
五、根文件系统各个常用目录简介
/etc/:存储重要的配置文件。
/bin/:存储常用且开机时必须用到的执行文件。
/sbin/:存储着开机过程中所需的系统执行文件。
/lib/:存储/bin/及/sbin/的执行文件所需的链接库,以及Linux的内核模块。
/dev/:存储设备文件。
六、常用目录
/lib目录
该目录下存放共享库和可加载(驱动程序),共享库用于启动系统。运行根文件系统中的可执行程序,比如:/bin /sbin 目录下的程序。
/home目录
用户目录,它是可选的,对于每个普通用户,在/home目录下都有一个以用户名命名的子目录,里面存放用户相关的配置文件。
/root目录
根用户的目录,与此对应,普通用户的目录是/home下的某个子目录。
/var目录
与/usr目录相反,/var目录中存放可变的数据,比如spool目录(mail,news),log文件,临时文件。
/mnt目录
用于临时挂载某个文件系统的挂接点,通常是空目录,也可以在里面创建一引起空的子目录,比如/mnt/cdram /mnt/hda1 。用来临时挂载光盘、硬盘。
/tmp目录
用于存放临时文件,通常是空目录,一些需要生成临时文件的程序用到的/tmp目录下,所以/tmp目录必须存在并可以访问。
linux中的根文件系统(rootfs的原理和介绍)相关推荐
- 浅谈linux中的根文件系统(rootfs的原理和介绍)
转自:点击打开 linux中有一个让很多初学者都不是特别清楚的概念,叫做"根文件系统".我接触linux前前后后也好几年了,但是对这个问题,至今也不是特别的清楚,至少没法给出一个很 ...
- 嵌入式Linux中的根文件系统
以下内容转载于http://mp.weixin.qq.com/s/O6MklgKekSc9gbM7zQSMEQ,有删改. 一. 首先要明白的是"什么是文件系统?",文件系统是对一个 ...
- 对嵌入式Linux中的根文件系统的理解和解析
虽然前面已经利用Busybox制作了根文件系统,但是对于根文件系统的作用和普通的文件系统之间的区别还是有点模糊.通过查找资料总结了一 下对根文件系统的理解,也欢迎大家一起讨论. 首先要明白的是& ...
- 根文件系统rootfs构建
一.根文件系统简介 根文件系统一般也叫做 rootfs,Linux 中的根文件系统更像是一个文件夹或者叫做目录,在这个目录里面会有很多的子目录.根目录下和子目录中会有很多的文件,这些文件是 Linux ...
- 嵌入式Linux 根文件系统rootfs的构建
前言 最近翻出来十年前的ARM9开发板:AT91SAM9261EK,芯片是原Ateml的AT91系列,之前开发的资料,因为更换电脑,基本上找不到了,还好部分经验记录在了[博客]上,所以,这次为了继续学 ...
- 十九.Linux开发之根文件系统移植——根文件系统的原理
有道云笔记地址: 详情看这里链接,记录太多,就不一一排版了. http://note.youdao.com/noteshare?id=f9c7c1b589233d7b6ed661c3749f1ce8& ...
- [架构之路-30]:目标系统 - 系统软件 - Linux OS根文件系统rootfs的概念、组成、制作以及用busybox制作根文件系统
目录 前言: 第1章 什么是根文件系统 1.1 什么是文件 1.2 什么是文件系统 1.3 文件系统组织文件的方式:树形结构 1.4 统一的虚拟文件系统 1.5 物理存储介质与物理文件系统类型 1.5 ...
- Linux内核中的vfs,解析 Linux 中的 VFS 文件系统机制
在Linux系统中,每个分区都是一个文件系统,都有自己的目录层次结构.Linux的最重要特征之一就是支持多种文件系统,这样它更加灵 活,并可以和许多其它种操作系统共存.由于系统已将Linux文件系统的 ...
- 嵌入式烧写Linux内核,嵌入式linux 内核和根文件系统烧写方式简介
总体来说,嵌入式Linux内核和根文件的引导与PC机差不多. 嵌入式linux内核和根文件系统可以存放在各种可能的存储设备中,一般情况下我们将内核和根文件系统直接烧入到Flash中(包括NOR和NAN ...
最新文章
- STM32 基础系列教程 17 – CRC
- loss下降auc下降_梯度下降算法 线性回归拟合(附Python/Matlab/Julia源代码)
- 谷歌 AI 的2019:日均2篇论文,纵横16大方向,一文汇集重要开源算法
- android文本与布局
- 为什么defineProperty不能检测到数组长度的“变化”
- ubuntu 16.04 更改jupyter notebook工作路径
- 模拟幅度调制相干解调系统抗噪声性能仿真分析
- python 爬取taptap热门榜
- Linux中rm -rf 文件夹,删不掉
- 关于poi处理word换行问题
- C# 利用 OleDb 组件操作 Excel 进行文件读写操作
- [ZT]千兆光纤 GBIC和SFP接口规格介绍
- M1-CORO-S7 MANIP Modeling of Manipulators(1)
- 无法启动此程序因为计算机丢失dtlui,用360重装大师重装系统后开机提示计算机中丢失DTLUI.dll? 爱问知识人...
- Java SE(7)
- 换行符后需要加逗号吗c语言,为什么大多数编程语言都在换行符之前而不是换行符之后使用逗号?...
- Au:录音中常见问题修复
- 夏洛克和他的女朋友—线性筛—逻辑
- 算力网络 — 算力中心
- Java并发学习----大三仔(自己归纳的有错误请指正)