Linux内核启动:根文件系统、根设备与系统调用解析
139 浏览量
更新于2024-07-15
收藏 3.89MB PDF 举报
"本文深入探讨了Linux操作系统中的根文件系统、根设备以及与文件系统操作密切相关的系统调用,包括sys_open、sys_read、sys_write、sys_mount和sys_mknod。文章首先介绍了内核启动时如何从rootfs过渡到实际的根文件系统,涉及ramdisk、cpiok-initrd和image-initrd等概念。接着,讨论了内核如何通过dentry和inode结构来关联文件。最后,提到了ext4文件系统的inode操作接口,并预告了接下来将要探讨的Linux网络相关主题。"
在Linux系统启动时,uboot负责加载kernel映像,并将控制权转交给内核。内核启动初期并没有文件系统,因此必须设置并找到根文件系统(rootfs)。rootfs是内核运行的第一个临时文件系统,用于加载真正的根文件系统。在Linux kernel 4.7.1版本中,这一过程由`start_kernel()`函数开始,该函数保存bootloader传递给内核的参数,并通过`parse_early_param()`解析这些参数。
根设备是挂载根文件系统的特殊设备,其查找是内核启动过程的关键步骤。通常,根设备的标识可以在启动参数中指定,如/dev/hda1或/dev/sda1。在找到根设备后,内核会尝试挂载相应的文件系统,例如ext4、ext3或vfat等。
内核中的dentry(目录项)和inode(索引节点)是文件系统的核心数据结构。dentry代表文件系统中的一个路径元素,可以是目录或文件,而inode存储了关于文件或目录的所有元数据,如权限、大小、修改时间等。当打开一个文件时,系统调用如sys_open会通过路径查找对应的dentry,然后通过dentry获取对应的inode,进一步进行读写操作。
sys_open、sys_read和sys_write是与文件操作密切相关的系统调用。sys_open用于打开文件,返回一个文件描述符;sys_read用于从文件中读取数据;sys_write则用于向文件写入数据。这些调用都涉及到dentry和inode的交互,确保正确地定位和访问文件。
sys_mount是用于挂载文件系统的关键系统调用,它将一个文件系统挂载到指定的挂载点上。挂载操作涉及对vfsmount结构的管理,vfsmount代表了一个已挂载的文件系统实例,包含了该文件系统的根dentry。
sys_mknod则用于创建特殊文件,如字符设备文件或块设备文件,它允许用户创建设备节点,使得应用程序能够直接与硬件交互。
文章中还提到了ext4文件系统的inode操作接口,ext4是Linux广泛使用的日志文件系统,其inode接口提供了创建、删除、修改文件元数据的功能。
作者计划在后续的文章中探讨Linux网络相关的内容,包括socket创建、send/receive、内核路由、邻居机制、网卡设备创建等,以及vlan接口的创建和vlan头的处理。
这篇文章详细介绍了Linux内核启动过程中根文件系统和根设备的设定,以及与文件系统操作相关的系统调用,对于理解Linux内核的工作原理具有很高的参考价值。
457 浏览量
2010-02-06 上传
130 浏览量
点击了解资源详情
135 浏览量
245 浏览量
2025-01-07 上传
2025-01-07 上传
2025-01-07 上传
weixin_38517904
- 粉丝: 4
- 资源: 966
最新资源
- 行业分类-设备装置-一种接收机板卡和导航接收机.zip
- todolist2
- 《梯度增强决策树影响估计方法的适应与评价》论文及实验代码
- TypingTag:一个令人讨厌的Discord机器人
- 小型项目:最新演示可在此处找到;)
- 利用Python实现的BP神经网络进行人脸识别.zip
- 行业分类-设备装置-一种抗水防破抗氧化防蛀书画纸.zip
- 学生管理系统gui的简单实现---基于java.awt
- ansible-collectd:安装 CollectD 的 Ansible 角色
- arrows_car
- is-retry-allowed:根据error.code检查是否可以重试请求
- 行业分类-设备装置-一种报警方法、管理平台和报警系统.zip
- github-actions-sandbox:对您没有用。 对我来说,这只是一个沙箱GitHub回购,可以尝试一些东西并开发GitHub Actions
- flagser:计算有向标志复合体的同源性(基于https
- openwrt串口程序.rar
- MATLAB下的数字调制样式识别-其它文档类资源