Linux驱动学习流水账-注册platform device

今天学习了注册平台设备,写文备忘。

注册设备

今天学习的注册设备的方法是将设备注册到platform上。

platform_device

platform_device是描述平台设备的结构体,一个结构体就代表一个平台设备。位于include/linux/platform_device.h文件中。

struct platform_device {
        const char      * name;
        int             id;
        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;
};

注册设备

step1

我的开发板的platform device的注册在arch/arm/mach-exynos/mach-itop4412.c文件中。
参考其它设备声明,注册一个s3c_device_hello_ctl。其中name为设备的名称,在挂载驱动时,Linux会匹配驱动中的设备name与设备列表中的name。

#ifdef CONFIG_HELLO_CTL
struct platform_device s3c_device_hello_ctl = {
        .name = "hello_ctl",
        .id = -1,
};
#endif

#ifdef CONFIG_LEDS_CTL
struct platform_device s3c_device_leds_ctl = {
        .name   = "leds",
        .id             = -1,
};
#endif

#ifdef CONFIG_BUZZER_CTL
struct platform_device s3c_device_buzzer_ctl = {
        .name   = "buzzer_ctl",
        .id             = -1,
};
#endif

#ifdef CONFIG_ADC_CTL
struct platform_device s3c_device_adc_ctl = {
        .name                   = "adc_ctl",
        .id                             = -1,
};
#endif

step2

定义了设备的platform_device结构体后,需要将其加入设备列表中,同样参考现有设备加入上面声明好的设备。

static struct platform_device *smdk4x12_devices[] __initdata = {
//省略
#ifdef CONFIG_LEDS_CTL
    &s3c_device_leds_ctl,
#endif

#ifdef CONFIG_BUZZER_CTL
    &s3c_device_buzzer_ctl,
#endif

#ifdef CONFIG_ADC_CTL
    &s3c_device_adc_ctl,
#endif
//省略
};

step3

想要将设备编译进内核,还需要用menuconfig将其加入内核。在文件drivers/char/Kconfig中加入设备的选项,同样参考现有设备来写。

config LEDS_CTL
        bool "Enable LEDS config"
        default y
        help
          Enable LEDS config

config HELLO_CTL
        tristate "Enable HELLO config"
        default y
        help
          Enable HELLO config

config BUZZER_CTL
        bool "Enable BUZZER config"
        default n
        help
          Enable BUZZER config

此时make menuconfig,然后选择Devices drivers->character drivers就可以看到设备的配置了。


step4

make zImage,然后烧写。在板子上ls /sys/devices/platform/就可以看到注册好的平台设备啦。


你可能感兴趣的:(Linux驱动学习流水账-注册platform device)