文件系统
oqqYuJi12345678
这个作者很懒,什么都没留下…
展开
-
linux 设备文件节点的创建(三)/dev设备节点的创建及打开
继续上一篇的分析,应用层udev或者mdev获取到内核的事件,来创建设备文件的时候,实际就是调用mknod命令进行节点创建。我们可以模仿udev或者mdev,来手动创建这个节点。1 /dev设备节点创建我们在使用命令: mknod /dev/iTestDevice c $major 0 创建设备文件的时候,内核做了哪些事呢?可以肯定的一点是,内核肯定创建了一个 dentry,inode 结...原创 2019-11-16 22:28:35 · 5421 阅读 · 0 评论 -
Linux 块设备原理(一)Nand Flash驱动(分析MTD层并制作NAND驱动)
1.本节使用的nand flash型号为K9F2G08U0M,它的命令如下: 硬件电路图大概如下: 1.1我们以上图的read id(读ID)为例,它的时序图如下: 首先需要使能CE片选1)使能C...转载 2019-12-03 16:21:00 · 908 阅读 · 0 评论 -
Linux 块设备原理(二)以ext2文件系统为例分析块设备工作原理
在上一篇文章中,分析了如何去写一个基于MTD的flash驱动,大概分析了整个注册流程。整个块驱动就工作起来了。那么文件的读写,与块驱动的关系。文件系统与块驱动的关系,到底是怎么样的呢。这个问题还是值得研究一下的。本文主要分析vfs层到flash驱动层的数据流走向。通过该过程的分析,力求可以看清整个块驱动的工作原理。首先大概了解一下ext2文件系统的基本原理。1 ext2文件系统1.1 ...原创 2019-12-09 22:24:07 · 996 阅读 · 1 评论 -
linux从ubi文件系统启动分析
在前面linux块设备原理文章中,已经分析过linux如何加载mtd设备。那么linux是如何把真实的根文件系统加载到系统中的呢,这边以ubi文件系统为例,分析linux真实根文件系统的加载。沿着函数调用顺序一步步来看相关代码。1 ubi卷的加载kernel_init --------------->kernel_init_freeable ...原创 2019-12-12 23:17:52 · 1800 阅读 · 0 评论 -
linux sys_dup
sys_dup()的主要工作就是用来“复制”一个打开的文件号,使两个文件号都指向同一个文件。先看一下涉及到的数据结构:1 数据结构在Linux中每一个进程的数据是存储在一个task_struct结构(定义在sched.h中)中的。struct task_struct { 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。/* filesystem informat...转载 2019-12-11 20:13:41 · 340 阅读 · 0 评论 -
ramfs文件系统的读写原理
在看initramfs方式启动linux的时候,需要把文件解压到rootfs文件系统中。比较困惑这些文件是如何写到rootfs文件系统中的,所以决定研究一下rootfs根文件系统的读写方式。linux初始化的时候,第一个挂载的根文件系统本质上是个ramfs文件系统。ramfs文件系统只存在于ram中。先看一下根文件系统的初始化过程。1 初始化start_kernel ----...原创 2019-11-22 23:18:24 · 2043 阅读 · 0 评论 -
linux3.10 proc文件系统初始化
start_kernel ------------>proc_root_initstatic struct file_system_type proc_fs_type = { .name = "proc", .mount = proc_mount, .kill_sb = proc_kill_sb, .fs_flags = FS_USERNS_MOUNT,}...原创 2019-10-13 22:14:05 · 682 阅读 · 0 评论 -
linux3.10 proc文件系统实现原理
1 主要数据结构我们列举某个proc目录,其与虚拟文件系统的数据结构关系如下:文件或者目录打开的时候会为虚拟文件系统创建inode,对于proc文件系统,inode结构包含于结构体proc_inode,用于连接vfs:struct proc_inode { struct pid *pid; int fd; union proc_op op; struct proc_dir...原创 2019-10-12 21:06:40 · 879 阅读 · 0 评论 -
linux3.10 虚拟文件系统初始化
start_kernel ----------->vfs_caches_initvoid __init vfs_caches_init(unsigned long mempages){ unsigned long reserve; /* Base hash sizes on available memory, with a reserve equal to...原创 2019-10-07 00:20:02 · 482 阅读 · 0 评论 -
linux sysfs文件系统(二)初始化
sysfs文件系统是linux系统启动的时候第一个初始化的文件系统。1 sysfs_initstart_kernel --------->vfs_caches_init ------------>mnt_init -------------->sysfs_init在sysfs_init函数中,对sysfs...原创 2019-10-01 15:22:35 · 934 阅读 · 0 评论 -
linux sysfs文件系统(一)概述
简单的说,sysfs是一个基于内存的文件系统,它的作用是将内核信息以文件的方式提供给用户程序使用。 sysfs可以看成与proc,devfs和devpty同类别的文件系统,该文件系统是虚拟的文件系统,可以更方便对系统设备进行管理。它可以产生一个包含所有系统硬件层次视图,与提供进程和状态信息的proc文件系统十分类似。 sysfs把连接在系统上的设备和总线组织成为一个...原创 2019-09-30 23:03:13 · 1861 阅读 · 0 评论 -
linux 文件系统(一)概述
Linux下的文件系统中宏观上主要分为三层:一是上层的文件系统的系统调用;二是虚拟文件系统VFS(Virtual File System)层,三是挂载到VFS中的各种实际文件系统。 VFS是一种软件机制,只存在于内存中,每次系统初始化期间Linux都会先在内存中构造一棵VFS的目录树(也就是源码中的namespace)。VFS主要的作用是对上层应用屏蔽底层不同的调用方法,提供一...原创 2019-09-29 11:51:50 · 409 阅读 · 0 评论 -
linux 文件系统(二)图解mount系统调用之挂载关系
在分析代码之前,先看一下mount的图解分析,通过对linux mount的分析,可以进一步了解linux vfs的工作原理。为了说明的方便,我们下面以这样的场景为例进行描述:1. 系统中有xfs, ext2和minix等若干文件系统模块2. 现有/dev/sda1和/dev/sdb1上存在xfs文件系统,/dev/sda2上为ext2文件系统,/dev/sdc1上为minix文件系统...转载 2019-09-29 13:57:18 · 1004 阅读 · 0 评论 -
linux 文件系统(三)mount 源码分析
源码基于linux 3.10版本。1 关键数据结构struct mount和struct vfsmountstruct mount代表着一个mount实例(一次真正挂载对应一个mount实例),其中struct vfsmount定义的mnt成员是它最核心的部分。过去没有stuct mount,mount和vfsmount的成员都在vfsmount里,现在linux将vfsmount改作mo...原创 2019-09-29 19:35:55 · 2692 阅读 · 0 评论