1. 程式人生 > >Linux驅動開發(2)——設備註冊

Linux驅動開發(2)——設備註冊

結構體platform_device

註冊裝置使用結構體platform_device,原始碼路徑include/linux/platform_device.h

struct platform_device {
        const char      * name;//裝置名稱,在sys/devices顯示
        int             id;//裝置id,用於插入匯流排並且具有相同name的裝置編號,如果只有一個裝置那麼為-1
        struct device   dev;
        u32             num_resources;
        struct resource * resource;

        const struct platform_device_id *id_entry;

        /* MFD cell pointer */
        struct mfd_cell *mfd_cell;

        /* arch specific additions */
        struct pdev_archdata    archdata;
};

操作流程

  1. 註冊裝置
    將裝置結構體放到平臺檔案中,會自動註冊裝置,不用去呼叫註冊裝置的函式。平臺檔案路徑根據架構選擇,例如arch/arm/mach-exynos/mach-itop4412.c。在平臺檔案中加入裝置的結構體,如
#ifdef CONFIG_HELLO_CTL
struct platform_device s3c_device_hello_ctl = {
        .name   = "hello_ctl",
        .id             =-1,
};
#endif

並加入核心連結串列中,

#ifdef CONFIG_HELLO_CTL
        &s3c_device_hello_ctl,
#endif

  1. 在Kconfig檔案中新增設備註冊的巨集定義
    在/drivers/char/Kconfig檔案中定義在/drivers/char/Kconfig檔案中定義
  2. 配置menuconfig中的HELLO巨集定義,生成新的.config檔案
  3. make zImage生成新的zImage
  4. 註冊完之後在虛擬平臺匯流排下可以查到註冊的裝置ls /sys/devices/platform/