当前位置: 首页 > news >正文

Linux节点创建API与路径对应关系

以下是包含 软连接(符号链接) 在内的完整节点创建API与节点(含链接)对应关系,覆盖sysfs核心关联、设备树映射、总线/模块链接等场景,明确每个链接的创建机制、路径及作用:

一、sysfs 核心节点与软连接(最关键的设备模型关联)

sysfs通过软连接构建设备“逻辑-物理-总线”的关联网络,这些链接由内核自动创建(无需驱动显式调用API),是设备模型的核心特性。

创建机制/API节点/链接路径类型说明
1. 设备类与物理设备的链接
device_create(cls, ..., name)/sys/class/[cls_name]/[dev_name]/device → 指向 /sys/devices/[phys_dev_path]软连接逻辑设备节点(类目录下)通过device链接指向其对应的物理设备节点(/sys/devices/下),实现“逻辑分类→物理实体”的追溯。例如:/sys/class/net/eth0/device/sys/devices/pci0000:00/.../eth0
2. 物理设备与总线的链接
bus_register(bus) + 设备注册/sys/devices/[phys_dev_path]/subsystem → 指向 /sys/bus/[bus_name]软连接物理设备节点通过subsystem链接指向所属总线目录,表明设备挂载的总线类型。例如:USB设备的subsystem/sys/bus/usb
3. 总线设备与类的链接
总线驱动框架自动创建/sys/bus/[bus_name]/devices/[dev_name] → 指向 /sys/devices/[phys_dev_path]软连接总线目录下的devices子目录通过链接映射/sys/devices/下的设备,方便按总线枚举设备。例如:/sys/bus/pci/devices/0000:00:1f.0/sys/devices/pci0000:00/0000:00:1f.0
4. 设备树与物理设备的链接
设备树解析 + 物理设备注册/sys/devices/[phys_dev_path]/of_node → 指向 /sys/firmware/devicetree/base/[dts_node]软连接若设备由设备树描述,物理设备节点通过of_node链接指向对应的设备树节点,实现“物理设备→DTS定义”的关联。例如:/sys/devices/platform/12340000.uart/of_node/sys/firmware/devicetree/base/uart0@12340000
5. 驱动与设备的链接
driver_register(drv)/sys/bus/[bus_name]/drivers/[drv_name]/[dev_name] → 指向 /sys/devices/[phys_dev_path]软连接总线驱动目录下的设备链接,表明该驱动绑定的设备。例如:/sys/bus/usb/drivers/usb-storage/sda/sys/devices/.../sda

二、sysfs 节点创建API与对应实体节点(含属性)

以下API直接创建sysfs的实体节点(目录/文件),软连接基于这些节点自动生成:

API实体节点路径类型关联的软连接
kobject_create_and_add(name, parent_kobj)/sys/[parent_path]/name/(如 parent_kobj=kernel_kobj 时为 /sys/kernel/name/目录无自动链接(自定义节点,需手动创建属性)。
sysfs_create_file(kobj, &attr)/sys/[kobj_path]/attr_name属性文件无链接,直接作为节点的属性(如 /sys/kernel/my_node/val)。
class_create(owner, name)/sys/class/name/类目录类目录下的设备节点通过device链接指向物理设备(见上表1)。
device_create(...)/sys/class/[cls_name]/[dev_name]/设备逻辑节点device(指向物理设备)、subsystem(指向类目录)等链接。
platform_device_register(pdev)/sys/devices/platform/[dev_name]/物理设备节点subsystem(指向platform总线)、of_node(指向设备树节点,若有)等链接。
bus_register(bus)/sys/bus/[bus_name]/(含devices/drivers/子目录)总线目录devices/下的链接指向/sys/devices/设备(见上表3)。

三、设备树节点(无显式API,内核自动生成链接)

设备树节点由内核解析DTS生成,其链接用于关联物理设备:

创建机制节点/链接路径类型说明
内核解析DTS/sys/firmware/devicetree/base/[dts_node]/(如 /sys/firmware/devicetree/base/uart0@12340000/目录compatiblereg等静态属性文件(只读)。
物理设备注册时自动创建/sys/firmware/devicetree/base/[dts_node]/device → 指向 /sys/devices/[phys_dev_path]软连接设备树节点通过device链接指向对应的物理设备节点(若设备已被内核探测并初始化),实现“DTS定义→物理实例”的映射。

四、模块(module)相关节点与链接

内核模块加载后会在sysfs生成节点,链接指向模块的代码段、依赖等:

创建机制节点/链接路径类型说明
模块加载(insmod/sys/module/[mod_name]/模块目录sections/(代码段链接)、drivers/(关联的驱动链接)等子目录。
模块自动创建/sys/module/[mod_name]/sections/.text → 指向模块.text段在内存中的地址软连接暴露模块代码段的内存位置,用于调试(如kallsyms定位符号)。
模块绑定驱动/sys/module/[mod_name]/drivers/[bus]:[drv_name] → 指向 /sys/bus/[bus]/drivers/[drv_name]软连接模块目录通过链接关联其注册的驱动,表明模块与驱动的从属关系。

五、/dev 设备文件与软连接(udev/mdev 生成)

/dev下的软连接由udev规则定义,基于sysfs信息创建:

触发机制节点/链接路径类型说明
device_create(...) + udev/dev/[dev_name](如 /dev/ttyUSB0设备文件由udev基于sysfs的dev文件(设备号)创建,无自动链接(需手动通过udev规则定义)。
udev规则(SYMLINK+="xxx"/dev/[symlink_name] → 指向 /dev/[dev_name]软连接自定义符号链接(如 /dev/usbserial/dev/ttyUSB0),方便用户通过固定名称访问设备。

六、proc/debugfs 中的节点(无自动软连接,可手动创建)

proc和debugfs以功能为主,软连接较少,通常手动创建:

API节点路径类型软连接说明
proc_create(name, ...)/proc/[name](如 /proc/myproc文件无自动链接,可通过ln -s手动创建(如 /proc/self/proc/[pid],内核默认创建)。
debugfs_create_file(...)/sys/kernel/debug/[dir]/name(如 /sys/kernel/debug/my_debug/val文件无自动链接,调试用,通常不创建链接。

总结:软连接的核心作用

  1. 关联多维度信息:通过devicesubsystemof_node等链接,将“逻辑分类(class)→物理设备(devices)→总线(bus)→设备树(DTS)”串联,形成完整的设备关系网。
  2. 简化访问路径:总线目录下的设备链接(如/sys/bus/pci/devices/)、模块与驱动的链接,让用户/工具无需遍历整个/sys/devices/即可找到目标设备。
  3. 追溯设备根源of_node链接让物理设备可追溯到DTS定义,subsystem链接明确设备所属总线,为调试和驱动绑定提供关键线索。

所有软连接均由内核或udev自动维护,驱动无需显式调用API创建,只需正确注册设备/类/总线,内核会自动生成这些关联,确保sysfs的“可导航性”。

http://www.dtcms.com/a/320244.html

相关文章:

  • AI日报0807 | GPT-5或今晚1点来袭:四大版本全曝光
  • 什么是 TDengine IDMP?
  • Disruptor 消费者核心:BatchEventProcessor解析
  • 告别复杂配置!cpolar让Prometheus监控突破网络限制
  • 【42】【OpenCV C++】 计算图像某一列像素方差 或 某一行像素的方差;
  • 嵌入式开发硬件——单片机
  • 【列出指定时间段内所有的下单产品】
  • 数据结构(循环顺序队列)
  • RAGAS:检索增强生成系统的无参考评估框架与技术解析
  • 2025年华数杯C题超详细解题思路
  • 哈希表原理与实现全解析
  • 天道20金句
  • Moses工具的配置和小语种平行语料训练SMT完整实现
  • 大模型 Transformer模型(上)
  • Java集合的遍历方式(全解析)
  • 力扣经典算法篇-46-阶乘后的零(正向步长遍历,逆向步长遍历)
  • BGP笔记整理
  • Maven高级:继承与聚合实战指南
  • RS485转Profibus网关在QDNA钠离子分析仪与300PLC通信中的应用解析
  • 【OCCT+ImGUI系列】013-碰撞检测-包围盒Bnd_Box
  • 【入门级-C++程序设计:9、函数与递归-函数定义与调用、形参与实参】
  • RESTful 服务概述:从理念到实践的全面解析
  • Coze开放平台综合文档指南
  • 达梦包含OR条件的SQL特定优化----INJECT-HINT优化方法
  • 最新完整内、外期货量化交易系统C#源码可售
  • 【C#补全计划:类和对象(九)】接口
  • redis--黑马点评--用户签到模块详解
  • dubbo源码之编解码逻辑
  • 一场 Dark Theme A/B 测试的复盘与提效实践
  • 聚集索引VS非聚集索引:核心差异详解