linux 键盘驱动,linux卸载驱动

大家好,关于linux 键盘驱动很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于linux卸载驱动的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

HID Keyboard Device键盘驱动损坏

(键盘)代码 19:由于其配置信息(注册表中的)不完整或已损坏,Windows无法启动这个硬件设备解决方法收藏

VMware没卸载就让我直接删除掉了。在删除VMware一些残留的服务后,结果重新启动系统后,键盘不能用了,一敲键盘后,鼠标也不动了,造成系统假死状态。如果不动键盘,鼠标仍然可以使用,关掉系统,重新插上键盘,开机故障依然,热插拔也无济于事,系统在启动,直到进入系统,都没有硬件错误提示,百思不得其解。开始以为是键盘坏掉了,我的是双系统,另个系统是linux,进入linux,键盘可以使用,证明键盘是没有问题的。

无奈只能用鼠标查找故障。打开设备管理器看到键盘那项里是一个惊叹号!

查看详细信息:

设备管理器显示:代码 19:由于其配置信息(注册表中的)不完整或已损坏,Windows无法启动这个硬件设备

删除这个设备,在扫描硬件更新,找到后依然是这个提示:代码 19:由于其配置信息(注册表中的)不完整或已损坏,Windows无法启动这个硬件设备,真是郁闷了。

google一下得到下面类似的解决方法:

打开注册表regedit,

定位到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E96B-E325-11CE-BFC1-08002BE10318}

删除UpperFilters项

卸载设备,重新启动。

然后设备管理器里变成:代码 10:该设备无法启动。

定位到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E96B-E325-11CE-BFC1-08002BE10318}

添加字符串UpperFilters项,内容是kbdclass

卸载设备,重新启动。

实际应用了一下,果然好用,问题终于解决!其实出现类似的情况,不仅仅是键盘,其他外设出现的几率也有,比如光驱,不过解决方法和这个大致一样。

Class\{4D36E96B-E325-11CE-BFC1-08002BE10318}这里面的{4D36E96B-E325-11CE-BFC1-08002BE10318}这个表示是键盘,注册表里也有详细描述,Class下有很多这样的字符,打开一看就明白表示什么

如何在嵌入式linux开发板上使用USB键盘

首先usb键盘驱动的源代码位于一下目录:

drivers/usb/input/usbkbd.c

将usb键盘驱动编译进内核:

#make menuconfig

Device Drivers--->USB support---->USB HIDBP Keyboard(simple Boot) support

(注意:有可能默认设置USB键盘驱动是不可见的,需修改当前目录下的Kconfig文件,在此不做详细介绍,Kconfig语法有待进一步熟悉:))

保存设置后,重新编译内核:

#source setenv

#make uImage

uImage生成后位于目录:arch/arm/boot/uImage;

(或者直接将usb键盘驱动编译为驱动模块,进行加载也可);

启动系统后,确定usb键盘加载到了那个设备文件,一般为/dev/input/event0设备,可通过cat命令进行确认:

#cat/dev/input/event0

操作usb键盘,会有乱码出现;

然后应用层用这个程序来获取usb键盘的输入:

#include<sys/types.h>

#include<sys/stat.h>

#include<fcntl.h>

#include<linux/input.h>

struct input_event buff;

int fd;

int read_nu;

int main(int argc, char*argv[])

{

fd= open("/dev/input/event0", O_RDONLY);

if(fd< 0)

{

perror("can not open device usbkeyboard!");

exit(1);

}

int i= 0;

printf("--fd:%d--\n",fd);

while(1)

{

while(read(fd,&buff,sizeof(struct input_event))==0)

{

;

}

//if(buff.code> 40)

printf("type:%d code:%d value:%d\n",buff.type,buff.code,buff.value);

//#if 0

//i++;

//if(i> 12)

//{

//break;

//}

//#endif

}

close(fd);

return 1;

}

运行程序后,按下A键,可见如下输出:

--fd:3--

type:1 code:30 value:1

type:0 code:0 value:0

Linux下编写zlg7290驱动(3)-键盘驱动编写

在Linux环境下,为zlg7290开发键盘驱动的第三部分涉及数据处理和中断处理。首先,驱动注册后,我们需处理键盘按键中断。zlg7290支持64个按键,按键按下触发中断,驱动可通过轮询或中断检测。本例采用中断方式,当键按下,中断会触发一个工作队列,以避免Linux内核的i2c_transfer可能引发的睡眠问题。中断处理函数`zlg7290_interrupt`接收中断信号后,启动工作队列。工作队列`zlg7290_work`负责读取设备键值,通过`input_report_key`和`input_sync`提交给上层处理。

测试部分,通过编写简单的程序,从`/dev/input/event1`设备读取输入事件,打印按键代码和状态。例如,用户按下某个键时,终端会输出`user:key_val= code 1`,按键释放则输出`user:key_val= code 0`,其中`code`对应按键的键值。当键值大于56时,会映射到特定的键值。至此,zlg7290键盘驱动的编写和测试已全部完成。

阅读剩余
THE END