键盘驱动原来如此『转』
闲来无事,研究一下键盘驱动。虽然前面贴过一篇《键盘体系》的介绍,那个链接好像失效。网上还是可以很容易搜到的。 从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。 键盘驱动的流程: 查询键盘矩阵 在S3C44B0X的公板上,有4个按键,分别接到了EINT4,EINT5,EINT6,EINT7。通过对中断21号的处理程序,设置。 键盘驱动就是这么简单:)
中断驱动键盘矩阵
申请中断-》中断检测=》中断处理=》获取scancode=》hand_scancode=》tasklet_schlue.。
初始化定时器=》定时器溢出=》扫描获取scancode=》hand_scancode=》tasklet_schelue
按键1=》l
按键2=》s
按键3=》回车
内核启动时,console=tty0。
内核启动后,LCD上有输出。进入shell.
单击1,2,3。屏幕上>ls 命令可以正常执行。
0 意見:
发表评论