Skip to content
Development
Skill

/platform-device-model

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.

From plugin
low-level-dev-skills
159142 skills
Install
$ npx -y skills add mohitmishra786/low-level-dev-skills --skill platform-device-model --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/platform-device-model

Context preview

The summary Claude sees to decide when to auto-load this skill.

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.

SKILL.md

platform-device-model.SKILL.md
name: platform-device-model
description: 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.

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

| Symptom | Cause | Fix | |---------|-------|-----| | `-EBUSY` on probe | Resource claimed twice | Check `status` / duplicate nodes | | No `/dev` node | Char device not registered | See `writing-char-drivers` | | Deferred forever | Supplier driver missing | Fix DT dependency chain | | Remove crash | Manual free vs devm mismatch | Use devm consistently | | Name mismatch | `.name` vs `compatible` | OF 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
Read more
Ships withlow-level-dev-skills

A curated suite of AI agent skills for systems and low-level programming — C/C++, Rust, Zig, GPU, bare-metal firmware, Linux kernel/driver development, computer architecture, compiler internals, HPC, and more.

Get the whole plugin
Stats
172
Stars
24
Forks
Maintained
Maintenance
JavaScript
Language
MIT
License
1mo ago
Last commit
5mo ago
Created

Repo: mohitmishra786/low-level-dev-skills

Other skills on low-level-dev-skills.