Devlink 信息¶
devlink-info
机制使设备驱动程序能够以标准、可扩展的方式报告设备(硬件和固件)信息。
devlink-info
API 的最初动机有两方面:
使在设备群中以与供应商无关的方式自动化设备和固件管理成为可能(另请参见 Documentation/networking/devlink/devlink-flash.rst);
命名每个组件的固件版本(与拥挤的 ethtool 版本字符串不同)。
devlink-info
支持报告多种类型的对象。通常不鼓励在此处以及通过任何其他 Linux API 报告驱动程序版本。
名称 |
描述 |
|
当前使用的设备驱动程序名称,也可通过 sysfs 获取。 |
|
设备的序列号。 这通常是 ASIC 的序列号,也常在设备的 PCI 配置空间中的 Device Serial Number 能力中可用。 序列号应在每个物理设备上是唯一的。有时设备的序列号只有 48 位长(以太网 MAC 地址的长度),由于 PCI DSN 为 64 位长,设备会将额外信息填充或编码到序列号中。一个例子是在额外的两个字节中添加端口 ID 或 PCI 接口 ID。驱动程序应确保剥离或标准化任何此类填充或接口 ID,并且只报告唯一标识硬件的序列号部分。换句话说,同一设备的两个端口或多主机设备的两个主机上报告的序列号应相同。 |
|
设备的板序列号。 这通常是电路板的序列号,常在 PCI 重要产品数据中可用。 |
|
用于硬件标识符以及不可现场更新的组件版本的组。 此部分中的版本标识设备设计。例如,组件标识符或 PCI VPD 中报告的板版本。 此组不得包含任何频繁更改的标识符,例如序列号。请参阅 Documentation/networking/devlink/devlink-flash.rst 以了解原因。 |
|
用于当前运行的软件/固件信息的组。这些版本通常仅在重启后(有时是设备复位后)才更新。 |
|
用于设备闪存中软件/固件版本的组。 即使尚未重启,存储的值也必须更新以反映闪存中的更改。如果设备在刷写新软件时无法更新 |
每个版本在每个版本组中最多只能报告一次。如果设备能够报告 stored
版本(参见 Documentation/networking/devlink/devlink-flash.rst),则存储在闪存中的固件组件应同时出现在 running
和 stored
部分。如果软件/固件组件是从磁盘加载的(例如 /lib/firmware
),则只能通过内核 API 报告运行版本。
请注意,通过 devlink 报告的任何安全版本纯粹是信息性的。Devlink 不使用安全通道与设备通信。
通用版本¶
期望驱动程序使用以下通用名称来导出版本信息。如果给定组件的通用名称尚不存在,驱动程序作者应参考现有的特定于驱动程序的版本并尝试重用。作为最后手段,如果某个组件确实是唯一的,则允许使用特定于驱动程序的名称,但这些名称应在特定于驱动程序的文件中进行记录。
所有版本都应尝试使用以下术语:
名称 |
描述 |
|
设计和修订的标识符,主要用于硬件版本。 |
|
组件之间 API 的版本。API 项对用户通常价值有限,且供应商可以从其他版本推断出来,因此通常不鼓励添加 API 版本以避免冗余。 |
|
刷入设备的分发包标识符。这是固件包的一个属性,该固件包包含多个版本,以便于管理固件映像(参见 Documentation/networking/devlink/devlink-flash.rst)。
|
board.id¶
板设计的唯一标识符。
board.rev¶
板设计修订版。
asic.id¶
ASIC 设计标识符。
asic.rev¶
ASIC 设计修订版/步进。
board.manufacture¶
生产该部件的公司或设施的标识符。
board.part_number¶
板及其组件的部件号。
fw¶
整体固件版本,通常代表 fw.mgmt, fw.app 等的集合。
fw.mgmt¶
控制单元固件版本。此固件负责内务处理任务、PHY 控制等,但不包括逐包数据路径操作。
fw.mgmt.api¶
驱动程序与固件之间软件接口的固件接口规范版本。
fw.app¶
控制高速数据包处理的数据路径微码。
fw.undi¶
UNDI 软件,可能包括 UEFI 驱动程序、固件或两者。
fw.ncsi¶
负责支持/处理网络控制器带外接口的软件版本。
fw.psid¶
固件参数集的唯一标识符。这些通常是特定电路板的参数,在制造时定义。
fw.roce¶
负责处理 RoCE 管理的 RoCE 固件版本。
fw.bundle_id¶
整个固件捆绑包的唯一标识符。
fw.bootloader¶
引导加载程序版本。
未来工作¶
以下扩展可能有用:
磁盘固件文件名 - 驱动程序通过
MODULE_FIRMWARE()
宏列出可能需要加载到设备上的固件文件名。然而,这些是按模块而非按设备列出的。列出驱动程序将尝试按优先级为给定设备加载的固件文件名称会很有用。