驱动认知
1 和 2 之间 发生了什么事情
因为 linux 一切皆是文件
比如 鼠标 led 设备这些 文件本质 就是存放数据的 并且数据会产生一种结果 产生结果之前会让某些软件/硬件工作。
问题一
如果 open=("/dev/pin5",0777);
open 函数 打开了一个pin5 引脚 但不知道属于哪个硬件
问题一 引出的新认知
231 是主设备号
0 是次设备号
比如 主设备号:华为 vivo oppo
次设备号 :华为1 华为2 华为3
1 用户态进入内核态引出的两个概念
用户态的open 函数进入到内核态会触发一次软中断 软中断会发生系统调用
调用sys_open 但 sys_open 不可以直接让open 使用 就是下面讲的虚拟文件系统 和文件系统
2 文件系统 和虚拟文件系统vfs
比如 root目录存放的是 文件1 文件2 但是文件2不一定是属于root目录的 其他也是 并且它会root目录下的规则
文件的错开存放的
和 window 的不一样 目录底下是啥 那么全部都是属于他的 而且不会乱跑
vsf就是对各种文件系统的一个抽象,它对各种文件系统提供了一个通用的接口
比如 就是 让 open函数 可以用sys_open函数
全部思路
拿 open 函数来说
1 在 上层的open 进入 内核态 会触发软中断
2 软中断 会发生 系统调用 调用sys_call
3 sys_call根据设备 找到设备号 sys_open
4 用一个虚拟文件系统让sys_open 提供给open使用
5 sys_open 会去调用 底层的 pin4_open
6 pin4_open 会加载到驱动链表中
7 最后实现运行效果