设备模型
linux 设备模型
基本结构
类型 | 内容 | 内核数据结构 | 对应/sys项 |
---|---|---|---|
设备Devices | 设备是此模型中最基本的类型,以设备本身的连接按层次组织 | struct device | /sys/devices/?/?/…/ |
驱动Drivers | 在一个系统中安装多个相同设备,只需要一份驱动程序的支持 | struct device_driver | /sys/bus/pci/drivers/?/ |
总线Bus | 在整个总线级别对此总线上连接的所有设备进行管理 | struct bus_type | /sys/bus/?/ |
类Classes | 这是按照功能进行分类组织的设备层次树;如 USB 接口和 PS/2 接口的鼠标都是输入设备,都会出现在/sys/class/input/下 | struct class | /sys/class/?/ |
目录组织结构
/sys下的子目录 | 内容 |
---|---|
/sys/devices | 内核对系统中所有设备的分层次表达模型,也是/sys文件系统管理设备的最重要的目录结构 |
/sys/dev | 这个目录下维护一个按字符设备和块设备的主次号码(major:minor)链接到真实的设备(/sys/devices下)的符号链接文件 |
/sys/bus | 内核设备按总线类型分层放置的目录结构, devices 中的所有设备都是连接于某种总线之下,在这里的每一种具体总线之下可以找到每一个具体设备的符号链接,它也是构成 Linux 统一设备模型的一部分 |
/sys/class | 按照设备功能分类的设备模型,如系统所有输入设备都会出现在/sys/class/input 之下,而不论它们是以何种总线连接到系统。它也是构成 Linux 统一设备模型的一部分 |
/sys/kernel | 内核所有可调整参数的位置,目前只有 uevent_helper, kexec_loaded, mm, 和新式的slab 分配器等几项较新的设计在使用它,其它内核可调整参数仍然位于sysctl(/proc/sys/kernel) 接口中 |
/sys/module | 这里有系统中所有模块的信息,不论这些模块是以内联(inlined)方式编译到内核映像文件(vmlinuz)中还是编译为外部模块(ko文件),都可能会出现在/sys/module 中 |
/sys/power | 系统中电源选项,这个目录下有几个属性文件可以用于控制整个机器的电源状态,如可以向其中写入控制命令让机器关机、重启等 |
设备模型
https://tomwithkernel.github.io/linux设备驱动/设备模型/