input_allocate_device浅析

本文深入解析了input_allocate_device函数的工作原理,包括分配内存、初始化device结构体、设置device_type及device_class等内容,并详细介绍了相关电源管理和初始化过程。

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

一.input_allocate_device分析,看看这个东西,到底完成了什么样的工作,应该不是简单的kmalloc

struct input_dev *input_allocate_device(void)
{
    struct input_dev *dev;             //一个input_dev的指针

    dev = kzalloc(sizeof(struct input_dev), GFP_KERNEL);  //分配工作
    if (dev) {
        dev->dev.type = &input_dev_type;    //对input_dev继成的device结构的初始化
*******************************************************************************8
static struct device_type input_dev_type = {
    .groups        = input_dev_attr_groups, //设备属性的初始化
    .release    = input_dev_release,    //设备释放函数,应该是个回调函数
    .uevent        = input_dev_uevent,    //设备所支持的事件
#ifdef CONFIG_PM
    .pm        = &input_dev_pm_ops,    //电源管理
#endif
};

*******************************************************************************
            
        dev->dev.class = &input_class;   //这个不太明白
        device_initialize(&dev->dev);
******************************************************************************
void device_initialize(struct device *dev)
{
    dev->kobj.kset = devices_kset;  //将这个对象属于这个device_kset集
    kobject_init(&dev->kobj, &device_ktype);  //kobj的初始化,计数为1
    INIT_LIST_HEAD(&dev->dma_pools);    //初始化DMA链表
    init_MUTEX(&dev->sem);            //信号量的初始化。互斥访问
    spin_lock_init(&dev->devres_lock);
    INIT_LIST_HEAD(&dev->devres_head);    
    device_init_wakeup(dev, 0);    //如果可以被唤醒,则唤醒
    device_pm_init(dev);        //初始化电源管理
    set_dev_node(dev, -1);        
*****************************************
//static inline void set_dev_node(struct device *dev, int node)
{
    dev->numa_node = node;//这个不明白有什么作用
}
*****************************************
}

*****************************************************************************
        mutex_init(&dev->mutex);
        spin_lock_init(&dev->event_lock);
        INIT_LIST_HEAD(&dev->h_list);   //handler链表初始化
        INIT_LIST_HEAD(&dev->node);    //input_dev链表初始化

        __module_get(THIS_MODULE);
    }

    return dev;

}

不对之处,望大家多多指教

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值