当前位置: 技术问答>linux和unix
关于 linux 按键驱动 的问题???
来源: 互联网 发布时间:2017-03-25
本文导语: 我在 看 linux自带的按键驱动 driver/input/keyboard/gpio_keys.c文件 gpio_keys_probe 中 对内存的申请 ddata = kzalloc(sizeof(struct gpio_keys_drvdata) + pdata->nbuttons * sizeof(struct gpio_button_data), GFP_KERNEL); 可是通篇找不到对内存的...
我在 看 linux自带的按键驱动 driver/input/keyboard/gpio_keys.c文件
gpio_keys_probe 中 对内存的申请 ddata = kzalloc(sizeof(struct gpio_keys_drvdata) +
pdata->nbuttons * sizeof(struct gpio_button_data),
GFP_KERNEL);
可是通篇找不到对内存的释放函数呢???
还有 就是怎么去设置 按键的触发方式呢!也没有对相应的寄存器的设置呢????
gpio_keys_probe 中 对内存的申请 ddata = kzalloc(sizeof(struct gpio_keys_drvdata) +
pdata->nbuttons * sizeof(struct gpio_button_data),
GFP_KERNEL);
可是通篇找不到对内存的释放函数呢???
还有 就是怎么去设置 按键的触发方式呢!也没有对相应的寄存器的设置呢????
|
1. 关于为什么没有内存释放函数,我还没有想明白。
2. 关于按键触发方式: 你是想如何触发?
驱动中是用中断来触发的。
2. 关于按键触发方式: 你是想如何触发?
驱动中是用中断来触发的。
|
动态申请内存,需要用kmalloc()吧,释放用kfree()
按键触发方式要么用中断,要么用轮询。
对与其中需要设置的寄存器,需要看datasheet,处理器的寄存器说明。
驱动直接操作硬件,有三件宝: 驱动源码,datasheet,总线协议。
写驱动关键在于理解,在源码中找到类似的代码作为模版。当你理解了,你就 成功八成了。
祝你好运啊
按键触发方式要么用中断,要么用轮询。
对与其中需要设置的寄存器,需要看datasheet,处理器的寄存器说明。
驱动直接操作硬件,有三件宝: 驱动源码,datasheet,总线协议。
写驱动关键在于理解,在源码中找到类似的代码作为模版。当你理解了,你就 成功八成了。
祝你好运啊
|
insmod/rmmod几次看看可用内存是不是一直减少。如果你把代码看懂了,加上释放的代码就行了。
|
猜想:
驱动数据结构的地址,通过platform_set_drvdata函数,赋值给通用设备数据的私有驱动数据指针域;
在注销通用设备数据结构过程中,可能会直接或者间接地,通过这个私有驱动数据指针域来释放驱动数据结构。
另外,键盘通过定时器调度工作队列方式gpio_keys_report_event,来报告键盘事件,最终由gpio_get_value来获取键值。
驱动数据结构的地址,通过platform_set_drvdata函数,赋值给通用设备数据的私有驱动数据指针域;
在注销通用设备数据结构过程中,可能会直接或者间接地,通过这个私有驱动数据指针域来释放驱动数据结构。
另外,键盘通过定时器调度工作队列方式gpio_keys_report_event,来报告键盘事件,最终由gpio_get_value来获取键值。