问个2.6.12 kernel的usb keyboard的问题

nice90 2009-07-15 10:20:31
是这样,我静态编译了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?
谢谢!
...全文
334 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
yhf365 2009-07-15
  • 打赏
  • 举报
回复
你用的那个驱动已经编译到内核中了,
不能用rmmod卸载的。
除非你是把它编译成了模块。

当你拔掉keyboard的时候,内核会知道的,
因为找不到设备了,驱动程序会检测到。
hefuhua 2009-07-15
  • 打赏
  • 举报
回复
我想知道,当我拔掉keyboard的时候,如何让内核知道usb keyboard已经被拔掉了?

我想usb子系统和input子系统会自动将该usb驱动和input驱动给卸载的,而且/dev/input/event0也会被udev给自动删除了的
ShowMan 2009-07-15
  • 打赏
  • 举报
回复
我想知道,当我拔掉keyboard的时候,如何让内核知道usb keyboard已经被拔掉了?
注意: 这个你拔掉的时候内核通过驱动就知道了。(驱动中有中断程序)

是不是我应该使用hotplug的脚本进行rmmod?
无需。

其实这部分通信linux是采用netlink的机制做的,然后会把一些必要的信息写道/proc 和 /sys, 目录下。

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧