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

操作系统课程设计 键盘驱动.doc

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统课程设计 键盘驱动

一、实验选题 1 二、模块整体功能介绍及主要目标 1 三、头文件的分析 2 四、数据结构的分析 2 1、数组tty_table[] 2 2、tty_struct 数据结构 2 3、tty 等待队列数据结构 3 4、各个数据结构间的关系图 3 五、函数的分析 4 1、采用中断驱动的I / O设备键盘的循环周期 4 2、键盘中断处理程序 5 3、ctrl和alt键的处理 7 4、caps、scroll、num键的处理 8 5、数字小键盘的处理 11 6、减号键的处理 13 7、功能键的处理 14 8、do_self的处理 15 9、左,右shift键的处理 16 六、分析体会及亮点说明 16 七、参考文献 20 一、实验选题 实验题目是:Linux0.11字符设备驱动中的键盘驱动程序源代码分析,这部分涉及到操作系统的中断、I/O应用接口、I/O子系统等相关知识,程序源代码参考Linux0.11中kernel目录下的keyboard.s文件。 二、模块整体功能介绍及主要目标 该模块键盘中断处理程序 keyboard.s 主要用于读入用户键入的字符并放入read_q 缓冲队列中。其具体实现机制是:当用户在键盘上键入了一个字符时,会引起键盘中断响应(中断请求信号IRQ1,对应中断号INT 33),此时键盘中断处理程序就会从键盘控制器读入对应的键盘扫描码,然后根据使用的键盘扫描码映射表译成相应字符,放入tty 读队列read_q 中。然后调用中断处理程序的C函数do_tty_interrupt(),它又直接调用行规则函数copy_to_cooked()对该字符进行过滤处理,并放入tty 辅助队列secondary 中,同时把该字符放入tty 写队列write_q 中,并调用写控制台函数con_write()。此时如果该终端的回显(echo)属性是设置的,则该字符会显示到屏幕上。do_tty_interrupt()和copy_to_cooked () 函数在tty_io.c 中实现。用图描述如下: 三、头文件的分析 #include linux/config.h // 内核配置头文件。定义键盘语言和硬盘类型(HD_TYPE)可选项。 在这里还可以定义你的键盘类型:KBD_FINNISH 是芬兰键盘、KBD_US 是美式键盘、KBD_GR 是德式键盘、KBD_FR 是法式键盘。如 #define KBD_US 表示定义美式键盘。 通常,Linux 能够在启动时从BIOS 中获取驱动器德参数,但是若由于未知原因而没有得到这些参数时,会使程序束手无策。对于这种情况,你可以定义HD_TYPE,其中包括硬盘的所有信息。HD_TYPE 宏应该象下面这样的形式: #define HD_TYPE { head, sect, cyl, wpcom, lzone, ctl} 对于有两个硬盘的情况,参数信息需用逗号分开: #define HD_TYPE { h,s,c,wpcom,lz,ctl }, {h,s,c,wpcom,lz,ctl } 如果你想让BIOS 给出硬盘的类型,那么只需不定义HD_TYPE。这是默认操作。 四、数据结构的分析 1、数组tty_table[] 使用了一个数组tty_table[]来保存系统中键盘的信息。每个数组项是一个数据结构tty_struct,用来保存键盘当前状态和正在处理的数据。用C语言描述如下: extern struct tty_struct tty_table[]; // tty 结构数组 2、tty_struct 数据结构 该终端驱动程序主要使用了一个tty_struct 数据结构,在该结构中含有三个功能不同的字符缓冲队列。一个缓冲队列read_q 用来存放用户键入(读入)的原始字符数据;一个缓冲队列write_q用来存放输出到终端(写到终端)去的数据;还有一个缓冲队列secondary 用来存放已经“加工”过的读入数据,这是在行规则程序把原始数据中的特殊字符如删除(backspace)字符变换后的“熟”(cooked)输入数据。tty 数据结构用C描述如下: struct tty_struct { struct termios termios; // 终端io 属性和控制字符数据结构。 int pgrp; // 所属进程组。 int stopped; // 停止标志。 void (*write)(struct tty_struct * tty); // tty 写函数指针。 struct tty_queue read_q; // tty 读队列。 struct tty_queue write_q; // tty 写队列。 struct tty_queue secondary; // tty 辅助队列(存放规范模式

文档评论(0)

ligennv1314 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档