网站大量收购闲置独家精品文档,联系QQ:2885784924

字符设备驱动程序.docx

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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

文档评论(0)

132****0439 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档