当应用程序调用open时:
-
open对应的系统调用号被保存到寄存器中
-
调用swi,触发一个软中断异常
swi是汇编中的一个指令,可以将处理器模式从用户模式变换到管理模式从而执行特权程序
-
根据open的系统调用号在内核实现准备好的一个系统调用表中找到对应的系统调用函数sys_open
这个函数在内核源码的fs/open.c文件中。不过这个函数在2.6内核版本之后就没有了,核心操作在do_sys_open函数里面
它又调用do_filp_open函数
然后又调用别的各种函数 … 。经过了一系列的辗转反侧的调用之后拿到文件的inode。文件inode中包含了文件的信息。有两种inode,一种是虚拟的只存在内存中,另一种存在磁盘上。这里使用的是虚拟inode,结构体定义在include/linux/fs.h
- 然后通过inode->i_rdev获取设备号信息,根据设备号在内核的cdev数组中找到自己对应的驱动cdev
- 找到cdev以后将这个cdev赋值给inode->i_cdev用于缓存<