是这样,我静态编译了2.6.12的kernel,让它支持usb keyboard在我们自己的板子上。
下面是devices的信息:
# more devices
I: Bus=0003 Vendor=0a81 Product=0101 Version=0110
N: Name="CHESEN USB Keyboard"
P: Phys=usb-ohci-1/input0
H: Handlers=event1 evbug
B: EV=120003
B: KEY=7 ff87207a c14057ff febeffdf ffefffff ffffffff fffffffe
B: LED=1f
我在编译的时候没有选择VT,如果选择上,那么H: Handlers=kbd event0 evbug (我加入了event debug信息)
这个时侯,我阅读/dev/input/event0,是可以读到东西的。
# hexdump /dev/input/event0
0000000 43af 386d bd09 0007 0001 0023 0001 0000
0000010 43af 386d bd5e 0007 0000 0000 0000 0000
0000020 43af 386d b100 0009 0001 0023 0000 0000
0000030 43af 386d b14f 0009 0000 0000 0000 0000
0000040 43b0 386d c7c8 0000 0001 0021 0001 0000
0000050 43b0 386d c81f 0000 0000 0000 0000 0000
0000060 43b0 386d fa3c 0002 0001 0021 0000 0000
0000070 43b0 386d fa8a 0002 0000 0000 0000 0000
在我不停掉这个hexdump,然后拔掉usb keyboard,这个时侯打印:
hexdump: /dev/input/event0: No such device
0000080
----------------------------------------------------
这样证明usb keyboard的驱动,open,read都正常了。于是我写了一个简单的程序来读取input_event。
while(1)
{
while(read(fd,&buff,sizeof(struct input_event))==0)
{
;
}
printf("type:%d code:%d value:%d\n",buff.type,buff.code,buff.value);
}
打印正常:
type:1 code:46 value:1
type:1 code:33 value:1
type:0 code:0 value:0
type:1 code:46 value:0
type:0 code:0 value:0
type:1 code:33 value:0
type:0 code:0 value:0
这个时侯,我在不停掉该程序的情况下,拔掉keyboard,于是这段程序不停地打印:
type:0 code:0 value:0
type:0 code:0 value:0
type:0 code:0 value:0
type:0 code:0 value:0
type:0 code:0 value:0
type:0 code:0 value:0
type:0 code:0 value:0
type:0 code:0 value:0
type:0 code:0 value:0
我想知道,当我拔掉keyboard的时候,如何让内核知道usb keyboard已经被拔掉了?
是不是我应该使用hotplug的脚本进行rmmod?
谢谢!