【无标题】

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();
}
相关推荐
万邦科技Lafite2 分钟前
淘宝开放API批量上架商品操作指南(2025年最新版)
开发语言·数据库·python·开放api·电商开放平台·淘宝开放平台
Angletank7 分钟前
SpringBoot中JPA组件深入查询业务实现
数据库·spring boot·后端·mysql
梦里不知身是客1110 分钟前
mysql的B+Tree介绍
数据库·mysql
西安光锐软件13 分钟前
asp.net core 项目开发部署上线流程
数据库
云和数据.ChenGuang13 分钟前
elk日志运维工程师技术之故障处理
运维·数据库·elk·jenkins·运维工程师
陌路2022 分钟前
redis五种数据类型
数据库·redis·缓存
不如打代码KK25 分钟前
MySQL死锁排查指南
数据库·mysql
打不了嗝 ᥬ᭄2 小时前
【MySQL】数据类型以及库和表的操作
数据库·mysql
ohoy9 小时前
mysql 30天自动补0
数据库·mysql
摇滚侠11 小时前
Redis 零基础到进阶,Redis 哨兵监控,笔记63-73
数据库·redis·笔记