免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3678 | 回复: 11
打印 上一主题 下一主题

哪位大哥大爷大大来帮我解释一下这个keyboard驱动的问题啊~ [复制链接]

论坛徽章:
14
水瓶座
日期:2014-06-10 09:51:0215-16赛季CBA联赛之江苏
日期:2017-11-27 11:42:3515-16赛季CBA联赛之八一
日期:2017-04-12 14:26:2815-16赛季CBA联赛之吉林
日期:2016-08-20 10:43:1215-16赛季CBA联赛之广夏
日期:2016-06-23 09:53:58程序设计版块每日发帖之星
日期:2016-02-11 06:20:00程序设计版块每日发帖之星
日期:2016-02-09 06:20:0015-16赛季CBA联赛之上海
日期:2015-12-25 16:40:3515-16赛季CBA联赛之广夏
日期:2015-12-22 09:39:36程序设计版块每日发帖之星
日期:2015-08-24 06:20:002015亚冠之德黑兰石油
日期:2015-08-07 09:57:302015年辞旧岁徽章
日期:2015-03-03 16:54:15
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-21 16:40 |只看该作者 |倒序浏览
首先非常感谢一位同志向我推荐了essential linux device driver这本书,至少让我从原来的完全一团糨糊变成了现在的稀糊糊~

硬件——笔记本的keyboard——特此注明一下,因为现在一般的键盘都是usb的了,驱动不一样了,笔记本的keyboard应该是AT/PS2的,使用controllers来翻译scancode~

目的——按下Shift_Lock(由x来设置)点亮caps的led~

鉴于Linux下面的input device驱动模型——将其分为了device driver和event driver两部分~

先说device driver,键盘应该是使用serio类的驱动——/driver/input/keyboard/atkbd.c

再来event driver,这个地方我就开始昏了~

1:如果user land的app是console的话,则使用/driver/char/keyboard.c作为event handler来将event解释upstream到上面~

2:如果user land的app是x的话,则需要使用evdev作为event handler来解释,反映到/dev/input/eventx里面去,再由x来读取~

请问这两个event handler是如何判断切换的呀~因为后者相对前者来说对keyboard的控制相当得晦涩,特别是我这种需要向下控制的情况——如果需要读取事件完全可以去read /dev/input下面的event,但是如何再根据这个evdev下去控制就非常非常复杂了~

因此我希望能不能在x下面依然能够根据我个人的需要来继续调用/driver/char/keyboard.c这个event handler,这样控制点灯的话相对会容易一些(essential linux device driver这本书上面也有个简单的将ctl_alt_del的动作直接换成点亮capslock和numlock灯的情况),我也是根据这个例子来确认在console和x下面使用得是不同的event handler~

论坛徽章:
14
水瓶座
日期:2014-06-10 09:51:0215-16赛季CBA联赛之江苏
日期:2017-11-27 11:42:3515-16赛季CBA联赛之八一
日期:2017-04-12 14:26:2815-16赛季CBA联赛之吉林
日期:2016-08-20 10:43:1215-16赛季CBA联赛之广夏
日期:2016-06-23 09:53:58程序设计版块每日发帖之星
日期:2016-02-11 06:20:00程序设计版块每日发帖之星
日期:2016-02-09 06:20:0015-16赛季CBA联赛之上海
日期:2015-12-25 16:40:3515-16赛季CBA联赛之广夏
日期:2015-12-22 09:39:36程序设计版块每日发帖之星
日期:2015-08-24 06:20:002015亚冠之德黑兰石油
日期:2015-08-07 09:57:302015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2009-07-22 13:11 |只看该作者
继续跪求大哥大爷大大~

现在可以很确定的是——笔记本的keyboad device driver是/driver/input/keyboard/atkbd.c,把这个东西卸了的话,无论是console还是x,keyboard都没法用了~

论坛徽章:
14
水瓶座
日期:2014-06-10 09:51:0215-16赛季CBA联赛之江苏
日期:2017-11-27 11:42:3515-16赛季CBA联赛之八一
日期:2017-04-12 14:26:2815-16赛季CBA联赛之吉林
日期:2016-08-20 10:43:1215-16赛季CBA联赛之广夏
日期:2016-06-23 09:53:58程序设计版块每日发帖之星
日期:2016-02-11 06:20:00程序设计版块每日发帖之星
日期:2016-02-09 06:20:0015-16赛季CBA联赛之上海
日期:2015-12-25 16:40:3515-16赛季CBA联赛之广夏
日期:2015-12-22 09:39:36程序设计版块每日发帖之星
日期:2015-08-24 06:20:002015亚冠之德黑兰石油
日期:2015-08-07 09:57:302015年辞旧岁徽章
日期:2015-03-03 16:54:15
3 [报告]
发表于 2009-07-22 14:00 |只看该作者
现在怪事又来了——我在内核编译中把event设置成为了module,这样的话/dev/input/eventx就无法open了~

但是键盘依然可以用!!!

难道说在这种情况下event handler就会转去使用console的event handler,即——/driver/char/keyboard.c??

论坛徽章:
14
水瓶座
日期:2014-06-10 09:51:0215-16赛季CBA联赛之江苏
日期:2017-11-27 11:42:3515-16赛季CBA联赛之八一
日期:2017-04-12 14:26:2815-16赛季CBA联赛之吉林
日期:2016-08-20 10:43:1215-16赛季CBA联赛之广夏
日期:2016-06-23 09:53:58程序设计版块每日发帖之星
日期:2016-02-11 06:20:00程序设计版块每日发帖之星
日期:2016-02-09 06:20:0015-16赛季CBA联赛之上海
日期:2015-12-25 16:40:3515-16赛季CBA联赛之广夏
日期:2015-12-22 09:39:36程序设计版块每日发帖之星
日期:2015-08-24 06:20:002015亚冠之德黑兰石油
日期:2015-08-07 09:57:302015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2009-07-22 14:25 |只看该作者
再次抓狂~

根据essential linux device driver书里面对/driver/char/keyboard.c来进行修改,尝试让起boot_it函数不reboot而只是点亮capslock的led灯~

在console下面没有问题,但是在x下面还是不行!更关键的是——我已经将event handler设置为module,并且直接将/dev/input这个目录给干掉了~键盘依然可以用~又不是在走/driver/char/keyboard.c这个event handler(因为如果使用这个event handler,则必然会点亮capslock灯),那走的是哪条路呀~~~

论坛徽章:
0
5 [报告]
发表于 2009-07-22 16:13 |只看该作者
这个时候可以选择自己添加printk信息来跟踪~

看看到底是用了哪部分的代码~

论坛徽章:
14
水瓶座
日期:2014-06-10 09:51:0215-16赛季CBA联赛之江苏
日期:2017-11-27 11:42:3515-16赛季CBA联赛之八一
日期:2017-04-12 14:26:2815-16赛季CBA联赛之吉林
日期:2016-08-20 10:43:1215-16赛季CBA联赛之广夏
日期:2016-06-23 09:53:58程序设计版块每日发帖之星
日期:2016-02-11 06:20:00程序设计版块每日发帖之星
日期:2016-02-09 06:20:0015-16赛季CBA联赛之上海
日期:2015-12-25 16:40:3515-16赛季CBA联赛之广夏
日期:2015-12-22 09:39:36程序设计版块每日发帖之星
日期:2015-08-24 06:20:002015亚冠之德黑兰石油
日期:2015-08-07 09:57:302015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2009-07-22 17:23 |只看该作者
原帖由 superfight 于 2009-7-22 16:13 发表
这个时候可以选择自己添加printk信息来跟踪~

看看到底是用了哪部分的代码~

一句话惊醒梦中人啊~

好的~

一步步往上面跟~

论坛徽章:
0
7 [报告]
发表于 2009-07-27 22:43 |只看该作者

回复 #5 superfight 的帖子

1. 拿console下面的app --bash来说,它依赖于/dev/ttyX来和键盘打交道,所以根本不会用到evdev event handler 即/dev/input/eventX.
2. X和键盘打交道的渠道也是/dev/ttyX来进行的,可以通过如下命令查看:
$ ls -l /proc/`pidof X`/fd/  
这个输出结果当中有/dev/ttyX而没有/dev/input/eventX,可以说明这个问题。
3.X 和bash和/dev/ttyX打交道的方式是不一样的,前者是raw机制,后者不是,因此直接影响了keyboard event handler的行为有所不同。具体可以查看kbd_event函数。

论坛徽章:
14
水瓶座
日期:2014-06-10 09:51:0215-16赛季CBA联赛之江苏
日期:2017-11-27 11:42:3515-16赛季CBA联赛之八一
日期:2017-04-12 14:26:2815-16赛季CBA联赛之吉林
日期:2016-08-20 10:43:1215-16赛季CBA联赛之广夏
日期:2016-06-23 09:53:58程序设计版块每日发帖之星
日期:2016-02-11 06:20:00程序设计版块每日发帖之星
日期:2016-02-09 06:20:0015-16赛季CBA联赛之上海
日期:2015-12-25 16:40:3515-16赛季CBA联赛之广夏
日期:2015-12-22 09:39:36程序设计版块每日发帖之星
日期:2015-08-24 06:20:002015亚冠之德黑兰石油
日期:2015-08-07 09:57:302015年辞旧岁徽章
日期:2015-03-03 16:54:15
8 [报告]
发表于 2009-07-28 11:15 |只看该作者
原帖由 fantry_t 于 2009-7-27 22:43 发表
1. 拿console下面的app --bash来说,它依赖于/dev/ttyX来和键盘打交道,所以根本不会用到evdev event handler 即/dev/input/eventX.
2. X和键盘打交道的渠道也是/dev/ttyX来进行的,可以通过如下命令查看:
$ ...

第二点没看懂——x和console和keyboard联系都是在用/dev/ttyX?

论坛徽章:
0
9 [报告]
发表于 2009-07-28 22:25 |只看该作者

回复 #8 lxyscls 的帖子

怕你不清楚,所以专门说明如何验证我说的是怎么回事。

论坛徽章:
14
水瓶座
日期:2014-06-10 09:51:0215-16赛季CBA联赛之江苏
日期:2017-11-27 11:42:3515-16赛季CBA联赛之八一
日期:2017-04-12 14:26:2815-16赛季CBA联赛之吉林
日期:2016-08-20 10:43:1215-16赛季CBA联赛之广夏
日期:2016-06-23 09:53:58程序设计版块每日发帖之星
日期:2016-02-11 06:20:00程序设计版块每日发帖之星
日期:2016-02-09 06:20:0015-16赛季CBA联赛之上海
日期:2015-12-25 16:40:3515-16赛季CBA联赛之广夏
日期:2015-12-22 09:39:36程序设计版块每日发帖之星
日期:2015-08-24 06:20:002015亚冠之德黑兰石油
日期:2015-08-07 09:57:302015年辞旧岁徽章
日期:2015-03-03 16:54:15
10 [报告]
发表于 2009-07-30 13:49 |只看该作者
原帖由 fantry_t 于 2009-7-28 22:25 发表
怕你不清楚,所以专门说明如何验证我说的是怎么回事。

高人——WHERE?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP