You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux内核SPI驱动中如何从struct device获取设备枚举标识?

SPI设备标识(如spi1.0)的构造与获取方法

一、spiX.Y标识的构造逻辑

日志里的spi1.0是SPI总线编号+片选编号的动态拼接字符串,既不是struct device的固定成员,也不是枚举值转换而来。

Linux内核中,dev_dbg这类设备日志函数会调用dev_name()获取设备名称。对于SPI设备,内核通过spi_dev_name()函数动态生成该标识:

  • 从struct spi_device的master->bus_num字段提取总线编号(如1对应spi1)
  • 从struct spi_device的chip_select字段提取片选编号(如0对应.0)
  • 拼接成spi{bus_num}.{chip_select}格式的字符串,也就是你看到的spi1.0、spi3.0这类标识。

二、为什么spi->dev->init_name为NULL

struct device的init_name是设备初始化阶段的临时名称,仅用于部分静态注册的设备。而SPI设备的名称是动态生成并关联到设备的kobject上,不会给init_name赋值,所以它的值为NULL。

三、在自己的函数中获取并使用该标识

直接调用内核提供的dev_name()函数即可获取完整的SPI设备标识字符串,示例代码:

// 获取spi设备标识字符串
const char *spi_id = dev_name(&spidev->dev);
// 打印或使用该标识
dev_info(&spidev->dev, "Working on SPI device: %s", spi_id);

该字符串由内核维护,无需手动释放,可直接用于日志打印、设备匹配等场景。


内容的提问来源于stack exchange,提问作者Ratin Rahman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 01:15:08