前面的驱动程序无法应用到别人写的现成的应用程序上(比如QT),因为别人的应用程序肯定不会打开我们创建的设备文件(/dev/buttons),别人打开的也许是其他现成的设备,比如/dev/tty。设置别人什么都不打开,直接scanf就能获得按键的输入。
以前写的驱动程序只能我们自己用,或自己公司内部用(因为别人不知道怎么用)。
如果想通用,就需要把自己写的驱动程序融入到内核现有的驱动程序中,这个现成的驱动程序就是输入子系统。
这一节我们把自己写的按键驱动融入到linux输入子系统中,输入子系统的原理我们已经在上一篇文章介绍了《Linux输入子系统(Input Subsystem)》
下面开始做测试
还是两个文件,1驱动相关:. key_input.c Makefile
实验步骤:
1.首先查看现在系统中的输入设备:
2.加载驱动:
insmod key_input.ko
可以看到加载之后相应的输入设备也创建出来了
下面开始做测试:
1.首先查看一下当前shell的标准输入是哪个设备:
可以看到当前shell的标准输入是串口,我们需要将他修改为按键,执行以下命令;
exec 0</dev/tty1
执行完上述命令之后,就可以测试我们的按键了,Tiny4412一共4个按键,在驱动中做了如下的按键映射
key0----------------------> shift
key1----------------------> l
key2----------------------> s
key3----------------------> enter
这样我们连着按下key1、key2、key3就相当于执行ls命令,下面看一下效果: