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
相关产品推荐
相关产品推荐

