- 1、本文档共22页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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 辅助队列(存放规范模式
您可能关注的文档
- 手绘POP海报教材.ppt
- 手球课件.ppt
- 手足口病健康知识讲座.doc
- 手部骨与关节损伤.ppt
- 扎实推进街道经济社会各项事业健康发展.doc
- 打印教育管理学试题.doc
- 手机电子工厂 静电防护上岗培训讲义.ppt
- 打印稿:高中历史知识点系统归纳和答题技巧整合.doc
- 打造亮点 凸显特色 提升农村基层党建整体水平.doc
- 打磨组长岗位职责说明.doc
- 《护理英语》课件 unit 1 Medical Terminology.pptx
- 智能电子产品设计与制作-第2版- 课件1-自动感应门.pptx
- 智能电子产品设计与制作-第2版- 课件11-语音播报温湿度.pptx
- 办公软件高级应用任务式教程(微课版)课件 任务2制作特色农产品订购单.pptx
- 办公软件高级应用任务式教程(微课版)课件 任务3制作“科技下乡”面试流程图.pptx
- 办公软件高级应用任务式教程(微课版)课件 任务8制作销售分析图表.pptx
- 《液压与气压传动》课件 2.4柱塞泵.ppt
- 《液压与气压传动》课件 4.3方向控制阀.ppt
- 办公软件高级应用任务式教程(微课版)课件 任务1制作劳动模范个人简历 .pptx
- 机器学习原理与应用 课件 第6章 强化学习.pptx
文档评论(0)