platform-device-model

v2026.09.24

Platform device model skill for Linux driver binding. Use when implementing platform_driver probe/remove, sysfs attributes, device properties, or deferred probe. Activates on queries about platform_device, platform_driver, driver model, sysfs, probe remove, or Linux device bus.

GitHub
安装命令
npx skhub add mohitmishra786/platform-device-model
Markdown
SKILL.md

Platform Device Model

Purpose

Explain the Linux driver model for platform (and similar) buses: struct device, device_driver, probe/remove, resource acquisition, sysfs, and deferred probe — the glue between device tree and driver code.

When to Use

  • Implementing or debugging platform_driver lifecycle
  • Exposing driver state via sysfs
  • Understanding uevent / udev device node creation
  • Before skills/kernel-dev/writing-char-drivers

Workflow

1. Object hierarchy

bus_type (platform, amba, pci, i2c, spi)
├── struct device        — hardware instance
└── struct device_driver — driver logic
        └── probe(dev) / remove(dev)

Platform devices often come from DT (of_platform) or legacy board files.

2. Platform driver skeleton

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);

Prefer devm_* helpers for automatic unwind.

3. Device properties (DT / ACPI)

u32 speed;
device_property_read_u32(&pdev->dev, "clock-speed", &speed);
bool flag = device_property_present(&pdev->dev, "feature-x");

4. Sysfs (driver visibility)

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. Deferred probe

Return -EPROBE_DEFER when a clock, regulator, or bus is not ready — core retries later.

6. Debug

ls /sys/bus/platform/devices/
ls /sys/bus/platform/drivers/
cat /sys/kernel/debug/devices_deferred  # if debugfs enabled
udevadm monitor

7. Agent usage

/platform-device-model Convert legacy board file driver to DT platform_driver with devm_ioremap

Common Problems

SymptomCauseFix
-EBUSY on probeResource claimed twiceCheck status / duplicate nodes
No /dev nodeChar device not registeredSee writing-char-drivers
Deferred foreverSupplier driver missingFix DT dependency chain
Remove crashManual free vs devm mismatchUse devm consistently
Name mismatch.name vs compatibleOF uses of_match_table

Related Skills

  • skills/kernel-dev/device-tree — hardware description
  • skills/kernel/device-drivers — IRQ, DMA, regmap depth
  • skills/kernel-dev/writing-char-drivers — userspace interface
  • skills/kernel-dev/bus-drivers-i2c-spi — other bus types
  • skills/low-level-programming/linux-kernel-modules — module loading
发现
标签

此技能尚未发布标签。

版本
最新版本元数据

版本

v2026.09.24

发布时间

2026年9月24日

分类

未分类

许可证

MIT

源路径

skills/kernel-dev/platform-device-model

默认分支

main

最新提交

bdc5847

Tree SHA

1178323