linux 输入(input)设备接口

input是在linux下面所有输入设备驱动的一个集合,当前只应用在了USB输入设备上,后面会替代大多数存在的输入设备。input驱动的核心是输入模块,该模块必须在其它所有输入模块加载前被加载,它为两个模块之间提供了一种通讯机制。下面进行详细介绍

input数据结构如下

struct input_dev {

	void *private;

	const char *name;
	const char *phys;
	const char *uniq;
	struct input_id id;

	unsigned long evbit[NBITS(EV_MAX)];
	unsigned long keybit[NBITS(KEY_MAX)];
	unsigned long relbit[NBITS(REL_MAX)];
	unsigned long absbit[NBITS(ABS_MAX)];
	unsigned long mscbit[NBITS(MSC_MAX)];
	unsigned long ledbit[NBITS(LED_MAX)];
	unsigned long sndbit[NBITS(SND_MAX)];
	unsigned long ffbit[NBITS(FF_MAX)];
	unsigned long swbit[NBITS(SW_MAX)];

	unsigned int keycodemax;
	unsigned int keycodesize;
	void *keycode;

	struct ff_device *ff;

	unsigned int repeat_key;
	struct timer_list timer;

	int state;

	int sync;

	int abs[ABS_MAX + 1];
	int rep[REP_MAX + 1];

	unsigned long key[NBITS(KEY_MAX)];
	unsigned long led[NBITS(LED_MAX)];
	unsigned long snd[NBITS(SND_MAX)];
	unsigned long sw[NBITS(SW_MAX)];

	int absmax[ABS_MAX + 1];
	int absmin[ABS_MAX + 1];
	int absfuzz[ABS_MAX + 1];
	int absflat[ABS_MAX + 1];

	int (*open)(struct input_dev *dev);
	void (*close)(struct input_dev *dev);
	int (*flush)(struct input_dev *dev, struct file *file);
	int (*event)(struct input_dev *dev, unsigned int type, unsigned int code, int value);

	struct input_handle *grab;

	struct mutex mutex;	/* serializes open and close operations */
	unsigned int users;

	struct class_device cdev;

	struct list_head	h_list;
	struct list_head	node;
};


1、设备驱动(Device drivers)

设备驱动模块负责和硬件进行通讯,如通过USB,并且为输入模块提供事件,如按键、鼠标移动。

2、事件处理(Event handlers)

该模块从输入模块中获取事件,并且通过各种接口往上层传输,如传输按键(keystrokes)到内核(kernel),鼠标移动通过一个模拟的PS/2接口道GPM以及X等等。

3、用法举例

大多数配置中,需要有USB鼠标以及USB键盘,因此,需要加载以下模块或者将它们编译到内核中

input

mousedev

keybdev

usbcore

uhci_hcd or ohci_hcd or ehci_hcd

usbhid

这样以后,USB键盘会立刻工作,USB鼠标则会以一个major 13, minor 63的字符设备,这个与实际的可能有所出入,如下所示,这是本系统的mouse情况,本系统主要有4个鼠标设备,主设备号都为13,次设备号分别是32、33、34、35


并且输入设备还有个咪头(mice)如下所示,主设备号为13,次设备号为63


我们可以通过以下命令,创建以上设备,如下所示

cd /dev/input

mknod mice c 13 63

  After that you have to point GPM (the textmode mouse cut&paste tool) and XFree to this device to use it - GPM should be called like:
gpm -t ps2 -m /dev/input/mice
  And in X:
Section "Pointer" Protocol    "ImPS/2"
   Device      "/dev/input/mice"
   ZAxisMapping 4 5 EndSection
  When you do all of the above, you can use your USB mouse and keyboard.


4、设备驱动(Device drivers)

设备驱动(device drivers)是用于产生事件的模块,然而,该事件如果没有被处理,则是没有用的。

5、事件处理

事件处理是将设备的事件分发到用户或者内核空间进行处理。

5、1 keybdev(按键设备)

keybdev是目前用于将输入事件转换成特定键盘结构的原始数据,并且传输他们到keyboard.c模块里的handle_scancode函数

5、2 mousedev(鼠标设备)

5、3 evdev

事件是输入事件的一个接口,他传输内核产生的事件到程序里,并且携带了时间戳。

cat /dev/input/mouse0 ,如果移动鼠标,则可以看到上面有字符输出,如下所示

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值