星期四, 十一月 08, 2007

键盘驱动原来如此『转』

 键盘驱动原来如此
by good02xaut

闲来无事,研究一下键盘驱动。虽然前面贴过一篇《键盘体系》的介绍,那个链接好像失效。网上还是可以很容易搜到的。

从src里面查找我们需要的参考信息。首先是/drivers/char/makefile文件。keyboard.o提供了键盘的支持。还有就是键盘映射表文件。

drivers/char/keyboard.c,粗略一看,收获不是很大。查看其他kb文件。当然还有很多include目录下的文件。

得到认识:

1。键盘和网卡类似,在/dev/目录下面没有对应于任何设备节点。也就是说,键盘不需要主次设备号。

2。键盘属于tty驱动范畴。对于tty驱动,本来都是一个IN+OUT成对出现的。象串口驱动。而键盘则是通过VT成对出现。IN是键盘,OUT则是fb。

3。内核参数,console=tty0。表明使用VT为tty。console=ttyS0。表明使用串口为tty.

4。历史原因造成了键盘编码的复杂性。由于键盘存在语言差异,不同的国家键盘可以大不同。因此出现了,扫描码,键盘码,ASCII等等。

5。嵌入式场合,很少会用到键盘。但是多会用到按键。这里,我是提倡使用键盘驱动的。当然,也可以基于misc驱动。只有键盘驱动才可以成为VT。

键盘驱动的流程:
中断驱动键盘矩阵
申请中断-》中断检测=》中断处理=》获取scancode=》hand_scancode=》tasklet_schlue.。

查询键盘矩阵
初始化定时器=》定时器溢出=》扫描获取scancode=》hand_scancode=》tasklet_schelue

在S3C44B0X的公板上,有4个按键,分别接到了EINT4,EINT5,EINT6,EINT7。通过对中断21号的处理程序,设置。
按键1=》l
按键2=》s
按键3=》回车
内核启动时,console=tty0。
内核启动后,LCD上有输出。进入shell.
单击1,2,3。屏幕上>ls 命令可以正常执行。

键盘驱动就是这么简单:)

0 意見: