input子系统一:输入设备驱动编写
在学习input子系统内核代码之前,先来看看我们如何编写一个符合input子系统框架的输入设备驱动,以最简单的按键为例子。
1、驱动编写步骤
1、分配一个struct input_dev结构体
2、设置设备能产生哪类和哪些事件
3、注册
4、硬件相关的操作(中断、上报事件等)
2、接口函数
在编写之前先来看看会用到的几个关键的函数:
1、分配相关的函数
struct input_dev *input_allocate_device(void)
return:成功 返回struct input_dev 失败 NULL
NOTE:当注册不成功时使用 input_free_device() 来释放设备,如果注册成功了应该使用 input_unregister_device() 来注销设备
---------------------------------------------------------------------
struct input_dev *devm_input_allocate_device(struct device *dev)
@dev:拥有正在创建的输入设备的设备,如果你的设备时一个i2c设备 那这里就是
i2c_client->dev
return:成功 返回struct input_dev 失败 NULL
NOTE:如果调用这个函数来分配一个输入设备struct input_dev,就不再需要我们自己来主动释放这个设备,内核会在驱动卸载的时候自动释放
2、设置相关的函数
void input_set_capability(struct input_dev *dev, unsigned int type, unsigned int code)
@dev:用前面说的函数申请的结构体struct input_dev
@type:能产生哪类事件,按键就是按键类事件 EV_KEY
@code:能产生这类事件中的哪些事件,比如键盘上的字母,空格,enter,鼠标的左右键等