惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Threat Research - Cisco Blogs
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
V
Vulnerabilities – Threatpost
GbyAI
GbyAI
P
Proofpoint News Feed
L
LINUX DO - 热门话题
P
Palo Alto Networks Blog
A
About on SuperTechFans
T
Tenable Blog
M
MIT News - Artificial intelligence
IT之家
IT之家
I
Intezer
D
DataBreaches.Net
爱范儿
爱范儿
T
Threatpost
C
CERT Recently Published Vulnerability Notes
云风的 BLOG
云风的 BLOG
博客园 - 三生石上(FineUI控件)
WordPress大学
WordPress大学
K
Kaspersky official blog
大猫的无限游戏
大猫的无限游戏
A
Arctic Wolf
Y
Y Combinator Blog
Cyberwarzone
Cyberwarzone
酷 壳 – CoolShell
酷 壳 – CoolShell
D
Darknet – Hacking Tools, Hacker News & Cyber Security
H
Help Net Security
Microsoft Security Blog
Microsoft Security Blog
Spread Privacy
Spread Privacy
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
AWS News Blog
AWS News Blog
博客园 - 聂微东
C
Check Point Blog
S
Securelist
有赞技术团队
有赞技术团队
雷峰网
雷峰网
aimingoo的专栏
aimingoo的专栏
Last Week in AI
Last Week in AI
Stack Overflow Blog
Stack Overflow Blog
MongoDB | Blog
MongoDB | Blog
D
Docker
G
GRAHAM CLULEY
T
The Exploit Database - CXSecurity.com
C
Cybersecurity and Infrastructure Security Agency CISA
T
Tailwind CSS Blog
L
Lohrmann on Cybersecurity
G
Google Developers Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
L
LangChain Blog

博客园 - yooooooo

【ARM CoreLink 系列 5 -- CI-700 控制器介绍 】 ARM CoreLink 系列 4.3 -- NI-700 Component and interface identifiers ARM CCI-500 与 NI0700 的关系. ARM NIC-400 与 NI-700 的区别 claude code命令使用 【ARM Trace32(劳特巴赫) 使用介绍 2.2 -- TRACE32 进阶命令之 DIAG 弹框命令】 trace32 .cmm脚本和.t32文件的区别 【ARM Trace32(劳特巴赫) 使用介绍 2.1 -- TRACE32 Practice 脚本 cmm 脚本学习】 【ARM Trace32(劳特巴赫) 使用介绍 1.1 - Veloce 环境中使用trace32 连接 Cortex-M33】 PCIe 总线的 ASPM 和 链路状态机制总结 I3C协议详解 UART 协议规范 BPF 调度器 sched_ext 实现机制、调度流程及样例 Android Camera性能分析 录像Buffer Path详解 【UEFI基础】Protocol介绍 【UEFI实战】在库中使用全局变量 sched feature TTWU_QUEUE 【ARM CoreLink 系列 4.2 -- NI-700 Function units 详细介绍】 edk2构建编译流程 UEFI:FDF文件及FD、FV、FFS EDK II PCD的概念、类型、使用 PELT算法浅析 load_balance函数代码详解 - yooooooo UEFI Boot Manager Linux misfit task Linux 内核中sched_prio_to_weight转换关系 CFS任务放置代码详解 CFS任务的负载均衡(load balance)
fw_devlink 功能
yooooooo · 2026-03-07 · via 博客园 - yooooooo
  • fw_devlinkLinux 驱动核心(driver core)的一套机制:从固件描述(主要是 Device Tree,部分场景也可用于 ACPI/fwnode 体系)中“推导设备依赖关系”,并自动建立“consumer↔supplier”的依赖链接,用来管理probe 顺序以及与之相关的一些 PM/同步状态语义。
  • 它的核心目标是:让依赖设备(supplier,例如 regulator/clock/phy/iommu 等)优先 probe,再让使用者设备(consumer)probe,从而减少“因为依赖未就绪导致的无限 defer probe/随机探测顺序问题”。
  • 该机制不依赖具体驱动实现来“告诉内核依赖关系”,而是由内核在早期直接解析固件(DT)来构建依赖图,因此在“全模块化内核、驱动加载顺序不确定”的情况下也能工作。
  • 内核启动早期,fw_devlink解析固件(DT)中的依赖属性,识别出“谁依赖谁”(consumer→supplier)的关系,并先建立 fwnode links(固件节点之间的链接)。
  • 目前 DT 侧它支持的依赖来源包括但不限于:clockspower-domainsphysiommusinterconnectspinctrl-**-supply(regulator)以及 *-gpio(s) 等等(演进中,文档/演讲中列出了多类属性)。
  • 当这些 DT 节点对应的 struct device 逐步创建出来后,前面建立的 fwnode links 会被转换为 device links(设备之间的链接)。
  • 一旦形成 device links,驱动核心就可以据此强制/影响 probe 顺序:fw_devlink 的目标之一就是“保证 supplier 会在 consumer 之前 probe”。
  • 它还能减少“initcall 顺序鸡生蛋问题”:驱动的 initcall level 变得不再关键,不需要靠“调 initcall 等级”去抢先注册 supplier 驱动。

fw_devlink 支持多种工作模式(内核命令行参数),常见含义如下:

  • fw_devlink=off

    • 不解析固件依赖(不建立这些由固件推导出的链接)。
  • fw_devlink=permissive(一些版本/演进中作为默认或接近默认的行为)

    • 会解析依赖并建立链接,但尽量“不影响 probe”(更偏向提供依赖信息、减少过度阻塞)。
  • fw_devlink=on

    • 强制执行 probe 顺序(supplier 先 probe,consumer 后 probe),并且可影响 suspend/resume 的相关顺序语义。
  • fw_devlink=rpm

    • 相当于 on,并且额外对 Runtime PM(运行时电源管理)顺序进行约束

备注:不同内核版本对“默认值/细节”可能不完全一致,但“off/permissive/on/rpm 的语义分层”是 fw_devlink 演进过程中明确提出并使用的。