关于 platform-device-model
面向 Linux 驱动开发者的平台设备模型技能,讲解设备与驱动生命周期、资源处理、sysfs 和延迟探测,衔接设备树描述与驱动代码。
主要功能
- 01平台设备与驱动生命周期
- 02probe 和 remove 处理
- 03使用 devm 辅助函数获取资源
- 04读取 DT 和 ACPI 设备属性
- 05sysfs 属性与延迟探测
- 06通过 sysfs 和 udevadm 调试
适用场景
- 01实现或调试 platform_driver
- 02将板级文件驱动转换为 DT platform_driver
- 03通过 sysfs 暴露驱动状态
- 04排查延迟探测和资源冲突
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ mohitmishra786/ low-level-dev-skills --skill platform-device-model安装后在 Claude Code 中输入/platform-device-model确认已加载。
详细介绍
平台设备模型
目的
说明 Linux 平台总线(及类似总线)的驱动模型:struct device、device_driver、probe/remove、资源获取、sysfs 和延迟探测——这是设备树与驱动代码之间的连接纽带。
适用场景
- 实现或调试
platform_driver生命周期 - 通过 sysfs 暴露驱动状态
- 理解 uevent /
udev设备节点的创建过程 - 在使用
skills/kernel-dev/writing-char-drivers之前
工作流
1. 对象层级
bus_type (platform, amba, pci, i2c, spi)
├── struct device — hardware instance
└── struct device_driver — driver logic
└── probe(dev) / remove(dev)
平台设备通常来自 DT(of_platform)或旧式板级文件。
2. 平台驱动骨架
static int my_probe(struct platform_device *pdev)
{
struct resource *res;
void __iomem *base;
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
base = devm_ioremap_resource(&pdev->dev, res);
if (IS_ERR(base))
return PTR_ERR(base);
platform_set_drvdata(pdev, priv);
return 0;
}
static void my_remove(struct platform_device *pdev)
{
/* devm_* auto-cleanup on remove */
}
static struct platform_driver my_pdrv = {
.probe = my_probe,
.remove = my_remove,
.driver = {
.name = "my-dev",
.of_match_table = my_of_match,
},
};
module_platform_driver(my_pdrv);
优先使用 devm_* 辅助函数,以便自动回滚。
3. 设备属性(DT / ACPI)
u32 speed;
device_property_read_u32(&pdev->dev, "clock-speed", &speed);
bool flag = device_property_present(&pdev->dev, "feature-x");
4. Sysfs(驱动可见性)
static ssize_t status_show(struct device *dev,
struct device_attribute *attr, char *buf)
{
return sysfs_emit(buf, "ok\n");
}
static DEVICE_ATTR_RO(status);
/* in probe */
device_create_file(&pdev->dev, &dev_attr_status);
5. 延迟探测
当时钟、稳压器或总线尚未就绪时,返回 -EPROBE_DEFER——内核核心会稍后重试。
6. 调试
ls /sys/bus/platform/devices/
ls /sys/bus/platform/drivers/
cat /sys/kernel/debug/devices_deferred # if debugfs enabled
udevadm monitor
7. Agent 用法
/platform-device-model Convert legacy board file driver to DT platform_driver with devm_ioremap
常见问题
| 现象 | 原因 | 修复方法 |
|---|---|---|
探测时出现 -EBUSY | 资源被重复占用 | 检查 status / 重复节点 |
没有 /dev 节点 | 字符设备未注册 | 参见 writing-char-drivers |
| 一直处于延迟状态 | 缺少供应方驱动 | 修复 DT 依赖链 |
| 移除时崩溃 | 手动释放与 devm 不匹配 | 始终一致地使用 devm |
| 名称不匹配 | .name 与 compatible 不一致 | OF 使用 of_match_table |
相关技能
skills/kernel-dev/device-tree— 硬件描述skills/kernel/device-drivers— IRQ、DMA、regmap 深入内容skills/kernel-dev/writing-char-drivers— 用户空间接口skills/kernel-dev/bus-drivers-i2c-spi— 其他总线类型skills/low-level-programming/linux-kernel-modules— 模块加载
评论
支持 Markdown