- 1、本文档共15页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
字符设施驱动程序
字符设施驱动程序与块设施不同。所波及的键盘驱动、控制台显示驱动和串口驱动以及与这些驱动有关的接口、算法程序都紧密有关。他们共同协作实现控制台终端和串口终端功能。
下列图反应了控制台键盘中止办理过程。
以上为总的办理流程,下面对每一个驱动分开剖析。首先是键盘驱动。键盘驱动用
汇编写的,比较难理解,波及内容较多,有键盘控制器804X的编程,还有扫描码(共3套,这里用第二套)和控制命令及控制序列(p209~210有解说)。由于键盘从XT发展到AT到现在PS/2,USB,无线键盘,发展较快,驱动各有不同,此版本驱动为兼容XT,将扫描码映射为XT再办理,因此仅供参照。CNIX操作系统的键盘驱动实现为C语言,可读性更好。
键盘驱动
键盘驱动就是上图键盘硬件中止的过程。keyboard.S中的_keyboard_interrupt函数为中止主流程,文件中其他函数均被其调用。
ds,es置为内核数据段
读取键盘扫描码
扫描码是否为0xe0
或0xe1?
N
经过函数跳转表调用键办理程序
复位e0标志(即0xe0或0xe1的标志)
对用8255A的PC键盘电路复位并向8259
发EOI(中止结束)信号
调用do_tty_interrupt函数
中止返回
Y
设置e0标志位
以上打星处为键盘驱动的核心,即主要办理过程,针对不同扫描码分别办理,并最
终将变换后所得ASCII码或控制序列放入控制台tty构造的读缓冲行列read_q中。
键办理程序跳转表为key_table,根据扫描码调用不同办理程序,关于“普通
键”,即只有一个字符返回且没有含义变化的键,调用do_self函数。其他均为“特殊键”:1.crtrl键的按下和释放2.alt键的按下和释放3.shift键的按下和释放4.capslock键的按下和释放(释放直接返回,不作任何办理)5.scrolllock键的按
下6.numlock的按下7.数字键盘的办理(包括alt-ctrl+delete的办理,因为老式键
盘delete键在数字小键盘上。还包括对光标移动键的分别办理)8.功能键
F1~F12)的办理9.减号的办理(老键盘’/’与’-’以0xe0加以划分,可能其中一键要按shift)
do_self是最常用的流程,即跳转表中使用频次最高的流程:
根据alt键按下或shift键按下或都不按,确定扫描码ASCII码映射表基址
从映射表取得ASCII码并进行有效性考证
若ASCII码在’a’与’}’(0x61~0x7d)范围且capslock或ctrl键按下,则变换为
大写字符
若ASCII码在’’’与-’(0x40~0x5f)之间且ctrl键按下,则变换为控制字符
0x00~0x1f)
若左alt键按下,字符的位7置位
将所得字符放入tty读缓冲read_q
控制台程序
控制台程序分两部分:1.控制台初始化2.控制台写函数
控制台初始化函数根据EGA单色、MDA单色、EGA彩色、CGA各样显卡设置显卡种类、显存占用内存的开端地点、结束地点、显示索引存放器端口和显示数据存放器端口。并将显卡种类打印在屏幕上。初始化滚屏变量和光标地点,设置键盘中止陷阱门,复位键盘。
控制台写函数从终端对应的tty写缓冲行列中取字符,并显示在屏幕上。思路是利用状态机原理对缓冲行列中的字符逐一办理(假如字符写在显存对应地点,假如光标,设置光标地点),最后向显示控制器发送光标显示地点。
end
;且数组
收到字符
ESC
[
?
par未遍
历完
01234
start
1.非控制字符
1.ESCE
非扩展字符
光标移到下一
2.换行符
行开始处
垂直制表符
2.ESCM
换页符
光标上移一行
3.回车符
3.ESCD
4.DEL
光标下移一行
5.BackSpace
4.ESCZ
6.水平制表符
发送终端应答
7.扬声器
字符序列
5.ESC7
保留光标地点
6.ESC8
恢复光标地点
6.ESC[(?)E9.ESC[(?)H12.ESC[(?)L
15.ESC[(?)@
光标下移
ESC[(?)f
在光标处插
在光标处删
指定列数
光标移到
入n行
除n个字符
并回到0列
移到指定
13.ESC(?)M
16.ESC[(?)m
7.ESC[(?)F
行、列
在光标处删
改变光标处
光标上移
10.ESC[(?)J
除n行
字符显示属
指定行数
清屏
14.ESC(?)P
性
并回到0列
11.ESC[(?)K
在光标处删
17.ESC[(?)r
8.ESC[(?)d
对行中字符
除n个字符
设置滚屏的
光标移到
删除
始末行号
ESC[(?)21.ESC[(?)G
ESC[(?)28ESC[(?)’
ESC[(?)287光标移到
指定列
2.ESC[(?)A
光标上移
指定行数
3.ESC
您可能关注的文档
最近下载
- 2023年洛阳师范学院汉语言文学专业《现代汉语》期末试卷B(有答案).docx VIP
- 2023年南开大学软件工程专业《计算机网络》科目期末试卷B(有答案).docx VIP
- 恐龙小百科科普知识PPT课件.pptx VIP
- 万能烤签自动烧烤炉及其烤签自转驱动机构.pdf VIP
- 随机信号分析教程答案-李兵兵、马文平.pdf
- 文艺复兴史学习通超星期末考试答案章节答案2024年.docx
- 部编版语文一年级上册第8单元教案(新教材).doc
- +第三单元第一节++地球的自转++课件-2024-2025学年七年级地理上册粤人版+.pptx VIP
- 2024年高考英语真题试卷(新高考Ⅰ卷) .pdf
- 2023年南开大学软件工程专业《计算机网络》科目期末试卷A(有答案).docx VIP
文档评论(0)