linux混杂设备驱动程序编写的不同

本文详细介绍了Linux中的混杂设备及平台设备驱动的实现原理。包括misc_register和platform_driver_register的使用,以及对应的卸载函数。解析了struct miscdevice和struct platform_driver的结构,并解释了各自的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在PWM,ADC,LED,DS18B20,BEEP等驱动中我们发现设备注册,卸载使用了,misc_register,misc_deregister。
结构体
struct miscdevice {
int minor; //次设备号
const char *name; //设备名称
const struct file_operations *fops;
struct list_head list;
struct device *parent;
struct device *this_device;
const char *nodename;
mode_t mode;
};

混杂设备是字符设备的子集,所有的混杂设备都有一个共同的主设备号,每个混杂设备有不同的次设备号,在驱动程序初始化函数中使用函数misc_register注册设备。在驱动程序卸载函数中使用misc_deregister函数注销设备。最后就是完成file_operations中的函数功能实现,这样一个混杂设备的驱动就完成了。
而我们看watchdog和RTC等驱动的时候,注册,卸载使用函数不同,在驱动程序初始化函数中使用函数 platform_driver_register注册设备。在驱动程序卸载函数中使用platform_driver_unregister函数注销设备
注册的是struct platform_driver

struct platform_driver {
    int (*probe)(struct platform_device *);   //探测函数
    int (*remove)(struct platform_device *);//移除函数
    void (*shutdown)(struct platform_device *);//关机函数
    int (*suspend)(struct platform_device *, pm_message_t state);//挂起函数
    int (*resume)(struct platform_device *);//恢复函数
    struct device_driver driver; //驱动程序结构
    const struct platform_device_id *id_table; //同一类型设备,不同ID
};

最后就是完成platform_driver中的函数功能实现,这些函数传入了结构体struct platform_device

各个函数的作用:
probe()函数是在内核建立
是在驱动程序中带__init宏初始化函数执行完之后执行,一般内核启动的时候就会调用初始化函数,将会注册平台设备和平台设备驱动程序,平台设备和设备驱动程序在适当的时候建立连接,连接成功就会调用probe函数。
remove()函数,与probe()函数对应,在probe函数申请的资源,应该在remove函数中释放。
suspend()函数,使设备处于低功耗状态
resume()函数,使设备处于恢复到正常状态
shutdown()函数,使设备处于关机状态。

struct platform_device {
    const char  * name; //平台设备名称
    int     id;          //一般设为-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;
};

RTC的驱动也可以按照混杂设备的驱动进行编写。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值