关于linux输入子系统

input输入子系统将硬件设备配置部分input_dev和驱动程序handler分开,并通过一个input_handle将两者连接起来

                               input-----(核心层)

                                  |

input_dev--------------|------------------ input_handler         

并将input_handle分别插入两者的h_list链表中。

static int __init input_init(void)
{
	int err;

	err = class_register(&input_class);
	if (err) {
		printk(KERN_ERR "input: unable to register input_dev class\n");
		return err;
	}

	err = input_proc_init();
	if (err)
		goto fail1;

	err = register_chrdev(INPUT_MAJOR, "input", &input_fops);
	if (err) {
		printk(KERN_ERR "input: unable to register char major %d", INPUT_MAJOR);
		goto fail2;
	}

	return 0;

 fail2:	input_proc_exit();
 fail1:	class_unregister(&input_class);
	return err;
}

      从上面代码可以看出,input核心中调用  register_chrdev(INPUT_MAJOR, "input", &input_fops);注册了一个input设备,

因此在cat /proc/devices和 ls /sys/class/ 下面可以看见input设备,这样input相当于一个输入系统的虚拟总设备,其他的按键,鼠标触摸屏等具体的设备都可以注册在该虚拟设备中,input核心负责为这些具体的硬件输入设备match合适的驱动程序handler。并用evdev_connect函数连接起来,在evdev_connect函数中会调用class_device_create()函数创建具体的设备,具体的设备用event命名,将具体的输入设备抽象为事件event。因此在 ls /dev/ 下面能看见evnet设备,在ls /sys/calss/input下面也可以看见event设备。


# ls /dev/ev*
/dev/event0  /dev/event1

# ls /sys/class/input
event0  event1  input0  input2  mice    mouse0  ts0
 

硬件设备中断中调用input_event上报事件,input核心调用相对应的handler的event函数处理该事件

hexdump /dev/event1  可以将事件信息打印出来


# hexdump /dev/event1
0000000 337f 0000 535c 0007 0001 0026 0001 0000
0000010 337f 0000 5368 0007 0000 0000 0000 0000
0000020 337f 0000 9b19 000a 0001 0026 0000 0000
0000030 337f 0000 9b23 000a 0000 0000 0000 0000

如果linux系统安装了QT,应该卸载qt,然后

用cat /dev/tty1

接着按按键,应该能看到ls的显示

如果不卸载QT,则在QT的记事本上应该能看到按键对应的显示

 


 

 

 

      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值