《驱动学习 - USB键盘驱动》
1.首先我们通过上节的代码中修改,来打印下键盘驱动的数据到底是怎样的 先来回忆下,我们之前写的鼠标驱动的id_table是这样: 所以我们要修改id_table,使这个驱动为键盘的驱动,如下图所示: 然后修改中断函数,通过printk()打印数据: 我们先按下按键A为例,打印出0x04,如下图: 我们再同时按下按键A和S,打印出0x04,0X16, 如下图: 显然这些普通按键都是从buf[2]开始的,那第一个数组到底又存什么值? 我们按完所有键盘按键,发现只有8个按键会打印在buf[0]里,如下图所示: 所以buf[0]是用来保存键盘的特定功能的键,而buf[1]可能是个保留键,没有用到的,buf[2]~buf[7]是普通按键,比如ABCD,1234,F1,F2等等,能支持最多6个按键同时按下。 2.那么每个按键的数据又是怎么定义的? 2.1比如我们按下按键A,为什么打印0X04? 我们找到输入子系统(input.h)中按键A定义的值,它对应的却是30,看来不是直接调用的,如下图: 我们再来参考内核自带的USB键盘驱动 (/drivers/hid/usbhid/usbkbd.c) 发现它的中断函数中有个键盘描述码表(其中0表示保留的意思): 发现该数组的0X04就是0X30,看来要写个键盘驱动