【无标题】

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();
}
相关推荐
想摆烂的不会研究的研究生6 小时前
每日八股——Redis(1)
数据库·经验分享·redis·后端·缓存
码熔burning7 小时前
MySQL 8.0 新特性爆笑盘点:从青铜到王者的骚操作都在这儿了!(万字详解,建议收藏)
数据库·mysql
猫头虎7 小时前
2025最新OpenEuler系统安装MySQL的详细教程
linux·服务器·数据库·sql·mysql·macos·openeuler
哈库纳玛塔塔7 小时前
放弃 MyBatis,拥抱新一代 Java 数据访问库
java·开发语言·数据库·mybatis·orm·dbvisitor
@LetsTGBot搜索引擎机器人8 小时前
2025 Telegram 最新免费社工库机器人(LetsTG可[特殊字符])搭建指南(含 Python 脚本)
数据库·搜索引擎·机器人·开源·全文检索·facebook·twitter
计算机毕设VX:Fegn08959 小时前
计算机毕业设计|基于springboot + vue动物园管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
冉冰学姐9 小时前
SSM校园排球联赛管理系统y513u(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm 框架应用·开题报告、
Tony Bai10 小时前
【分布式系统】03 复制(上):“权威中心”的秩序 —— 主从架构、一致性与权衡
大数据·数据库·分布式·架构
wb0430720111 小时前
SQL工坊不只是一个ORM框架
数据库·sql
至善迎风11 小时前
Redis完全指南:从诞生到实战
数据库·redis·缓存