【无标题】

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();
}
相关推荐
IvorySQL22 分钟前
从双解析器到循环工程:IvorySQL 五年技术演进路线的深度观察
大数据·数据库·人工智能·postgresql·开源
wefg132 分钟前
【MySQL】事务
数据库·mysql
黑白极客39 分钟前
mysql的高可用性
数据库·mysql
一十九的酒1 小时前
Oracle 12c 标准版无缝升级企业版实战记录
数据库·oracle·标准版切换到企业版
ZhengEnCi1 小时前
S02-SpringBoot实体类新增字段对已有数据的影响及自动DDL同步机制详解
数据库·spring boot
妙码生花1 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(三十二):增加 admin_rule 模型及数据表迁移
数据库·go·ai编程
千维百策6663 小时前
SRE 中如何消除琐务:提升工程效率与服务可靠性的实践方法
数据库
卓怡学长3 小时前
w266基于spring boot + vue 圣地延安美食乐享系统
java·数据库·vue.js·spring boot·spring·intellij-idea
名不经传的养虾人3 小时前
从0到1:企业级AI项目迭代日记 Vol.65|最危险的故障不是崩溃,是悄悄换掉了正确答案
数据库·人工智能·ai编程·ai-agent·企业ai
程序员佳佳3 小时前
模型网关灰度不是调百分比:把放量、观测和回滚做成账本
java·数据库·人工智能·redis·gpt·aigc·embedding