【无标题】

1 /dev

该目录下放的是设备文件,是应用程序和内核的交互文件,应用程序通过对这些文件的读写和控制(open、write、,poll等),可以访问实际的设备。应用程序通过mknod创建的文件,如果底层驱动对mknod的设备号有对应的驱动,那么应用程序open "/dev/**"时,就会调用到底层的驱动。

2 /sys

/sys 是个文件系统,内核设备驱动中如果有调用kobj_add函数的,就会在/sys下对应目录下创建相应的文件。 它的作用是将内核注册的device、device_driver和bus通过链表组成一个树形结构,表示内核都有哪些驱动和设备以及所属的bus,便于管理。应用层也可以通过读写/sys下的文件和内核进行交互(ktype)。

3 /sys/devices

实际存放device和driver的,按照设备挂接的总线类型,组织成层次结构,保存了系统所有的设备;是文件系统管理设备的最重要的目录结构;devices 中的所有设备都是连接于某种总线之下,每一种总线之下可以找到每一个具体设备的符号链接,它也是构成 Linux 统一设备模型的重要部分;

4 /sys/dev

下面有两个子目录,block和char,存放的是块设备和字符设备的主次号,格式为:major:minor,但都是链接,指向 /sys/devices 目录下的实际设备。

Linux在Documentation\filesystems文档中有详细讲解

总结:

  1. bus_register注册的bus会在/sys/bus目录下生成子目录。
  2. device_add添加的device会在/sys/devices下生成子目录。
  3. 注册的driver会在/sys/bus所属的总线目录(如platform)下的drivers生成子目录。
  4. class_register注册的class会在/sys/class下生成子目录。
  5. driver有正在由其驱动的device,driver对应的目录下会有device的链接。
  6. device需要有驱动自身的driver,device目录下会有名为driver的文件链接到driver目录。
  7. device需要挂在bus下,/sys/bus下device所属的总线目录(如platform)下的devices会有对应device目录的链接。
  8. device会有所属的class,/sys/class具体的class目录下,也会有device的连接。
  9. 同是挂在platform总线下的不同设备,可以属于不同的class。
cpp 复制代码
// drivers/base/init.c
/**
 * driver_init - initialize driver model.
 *
 * Call the driver model init functions to initialize their
 * subsystems. Called early from init/main.c.
 */
void __init driver_init(void)
{
    /* These are the core pieces */
    bdi_init(&noop_backing_dev_info);
    devtmpfs_init();
    devices_init();         /// 初始化devices_kset/dev_kobj/sysfs_dev_block_kobj/sysfs_dev_char_kobj
    buses_init();           /// 初始化bus_kset/system_kset
    classes_init();         /// 初始化class_kset
    firmware_init();
    hypervisor_init();

    /* These are also core pieces, but must come after the
     * core core pieces.
     */
    of_core_init();         /// 初始of_kset
    platform_bus_init();    /// 注册platform_bus和platform_bus_type
    auxiliary_bus_init();
    cpu_dev_init();
    memory_dev_init();
    node_dev_init();
    container_dev_init();
}
相关推荐
invicinble8 分钟前
对于mysql层对sql层面的知识体系的理解和把握
数据库·sql·mysql
2301_7903009610 分钟前
用Matplotlib绘制专业图表:从基础到高级
jvm·数据库·python
DFT计算杂谈34 分钟前
VASP+PHONOPY+pypolymlpj计算不同温度下声子谱,附批处理脚本
java·前端·数据库·人工智能·python
数据知道36 分钟前
PostgreSQL核心原理:为什么数据库偶尔会卡顿?
数据库·postgresql
Nandeska42 分钟前
14、MySQL基于GTID的数据同步
数据库·mysql
Mr_Xuhhh42 分钟前
MySQL表的内连接与外连接详解
java·前端·数据库
l1t1 小时前
DeepSeek辅助总结postgresql wiki提供的数独求解器
数据库·sql·postgresql
appearappear1 小时前
大数据量处理
数据库
万行1 小时前
SQL进阶&索引篇
开发语言·数据库·人工智能·sql
我是黄骨鱼1 小时前
【零基础学数据库|第二篇】MySql启动!!!
数据库·mysql