版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、字符设备驱动程序字符设备驱动程序与块设备不同。所涉及的键盘驱动、控制台显示驱动和串口 驱动以及与这些驱动有关的接口、算法程序都紧密相关。他们共同协作实现控制台 终端和串口终端功能。下图反映了控制台键盘中断处理过程。put_queuedo_rdo_ry_inT&LiupTcop5'_to_cookecopy_to_cooke放入队列屮.read_q放入队列屮read_qcon_write secondaryprr::1、write_q输出到显不加输出到显不加以上为总的处理流程,下面对每一个驱动分开分析。首先是键盘驱动。键盘驱动用 汇编写的,比较难理解,牵涉内容较多,有键盘控制器8
2、04X的编程,还有扫描码(共3套,这里用第二套)和控制命令及控制序列(p209210有讲解)。由于键 盘从XT发展到AT到现在PS/2, USB,无线键盘,发展较快,驱动各有不同,此 版本驱动为兼容XT,将扫描码映射为XT再处理,因此仅供参考。CNIX操作系 统的键盘驱动实现为C语言,可读性更好。键盘驱动键盘驱动就是上图键盘硬件中断的过程。keyboard.S中的keyboardn terrupt函数为中断主流程,文件中其他函数均被其调用。一一ds, es置为内核数据段以上打星处为键盘驱动的核心,即主要处理过程,针对不同扫描码分别处理,并最 终将转换后所得ASCII码或控制序列放入控制台tty
3、结构的读缓冲队列read_q中。键处理程序跳转表为key_table,根据扫描码调用不同处理程序,对于“普通 键”,即只有一个字符返回且没有含义变化的键,调用do_self函数。其他均为“特殊键”:1. crtrl键的按下和释放2. alt键的按下和释放3. shift键的按下和释放 4. caps lock键的按下和释放(释放直接返回,不作任何处理)5. scroll lock键的按下6. num lock的按下7.数字键盘的处理(包括alt-ctrl+delete的处理,因为老式键 盘delete键在数字小键盘上。还包括对光标移动键的分别处理)8.功能键(F1F12)的处理9.减号的处理(
4、老键盘'与''以OxeO加以区分,可能其中一键 要按shift)do_self是最常用的流程,即跳转表中使用频率最高的流程:控制台程序控制台程序分两部分:1.控制台初始化2.控制台写函数控制台初始化函数根据EGA单色、MDA单色、EGA彩色、CGA各种显卡设 置显卡类型、显存占用内存的起始地址、结束地址、显示索引寄存器端口和显示数 据寄存器端口。并将显卡类型打印在屏幕上。初始化滚屏变量和光标位置,设置键 盘中断陷阱门,复位键盘。控制台写函数从终端对应的tty写缓冲队列中取字符,并显示在屏幕上。思路 是利用状态机原理对缓冲队列中的字符逐一处理(若是字符写在显存对应位置,若
5、 是光标,设置光标位置),最后向显示控制器发送光标显示位置。一6.ESC(?)E9.ESCH12.ESCL15.ESC18.ESCs光标下移ESC(?)f在光标处插在光标处删保存光标位指定列数光标移到入n行除n个字符置并回到0列移到指定13.ESCM16.ESCm19.ESCu7.ESCF行、列在光标处删改变光标处恢复光标位光标上移10.ESCJ除n行字符显示属置指定行数清屏14.ESCP性并回到0列11.ESCK在光标处删17.ESCr8.ESC(?)d对行中字符除n个字符设置滚屏的光标移到删除始末行号end收到字符ESC0124f且数组历元par未遍start1. 非控制字符 非扩展字符2
6、. 换行符垂直制表符换页符3. 回车符4. DEL5. BackSpace6. 水平制表符7. 扬声器1. ESC E光标移到下一行开始处2. ESC M光标上移一行3. ESC D光标下移一行4. ESC Z发送终端应答 字符序列5. ESC 7保存光标位置6. ESC 8恢复光标位置ESC2ESC28ESC2871. ESCG ESC'光标移到指定列2. ESCA光标上移 指定行数3. ESCBESC(?)e光标下移指定行数4. ESCC光标右移指定列数5. ESCD光标左移指定列数上图中黑虚线表示不退出case循环读取下一字符,而是直接转到下一状态。状态1的5、6与状态4的18、
7、19相同。(?)表示可能包含?串口程序、串行通信原理UCCP串行接口串行接口通信方式:方向、连接、异步/同步;速度控制:波特率控制、收/发时钟、基准时钟; 差错控制:单/双端、信号重复、检错和纠错编码; 长距离传输:信号调制(调频、调幅、调相); 通道共享:时分多路、频分多路; 通信协议:异步串行/同步串行通信协议;接口标准:类型(信号定义、逻辑特性、电气特性、机械特性 )、起止式异步串行通信协议LSBy/ /0 /0/10/1空 闲 位起始位奇偶校验位可有可无停止位(1, 1.5或2位)通信刖约定一波特率、子符(数据/校验/结束)格式;字符识别一空闲状态、字符开始、数据格式、字符结束、起点漂
8、移解决; 抗干扰(信号重复)实现-起始位采样、数据采样;字符正确性一校验码编码技术、检错与纠错 三、串行通信接口标准标准类型:RS-232C、RS-422A、RS-423、RS-485RS-232C接口标准:信号定义:RxD、TxD、SG、DTR/DSR、RTS/CTS、DCD、RI 逻辑特性:连接、信号使用/不使用MODEM时握手规则电气特性:信号电平、电平转换机械特性:连接器、有效传输距离 四、INS8250内部结构 内部总体结构CS0- CS I -CS2A2 AI -A0ADSC5OUTDDIS DISTR DISTRy DOSTR- nosTRMR_ XIALI*XTAL2-*数据总
9、线缓冲器彳二接收缓冲寄存器RBRX.AR选择和控制逻辑接收移位寄存器即状态寄存器.SR线跻控制野布器LCR除数锁存器(高位)儿H除数锁存器(低位)DLLMODEM控制寄存器MCRMODE1状态寄存MSR 4-中斷允许寄存器】ER发送保持寄存器IIR中断识别寄存器IIR接收同步控制发送同步控制发送移伐寄存器*波特率发生器MODEM控制逻辑嚼制-SIN-RCLK SOUTHOUDOUIo尸 DTRco 01H1oOUT2 CTSDSRRi_RLSD” TNTPR7中断控制逻辑INTPR端口定义和寄存器定义A2A1A0DLABRD#有效WR#有效0000接收缓冲寄存器RBR发送保持寄存器THR1波特
10、率除数寄存器DLL(低字节)0010中断允许寄存器IER1波特率除数寄存器DLH(高字节)010X中断识别寄存器IIRI£lFO控制器FCR011X线路控制寄存器LCR100XMODEM 控制寄存器 MCR101X线路状态寄存器LSR110XMODEM 状态寄存器 MSR111XScratch寄存器说明:DLAB为LCR的D7位LCR 使用时,最后一次使 D7=0并设置其它位;DLH/DLL 值为基准时钟频率十(16 X波特率);IIR 中断请求一 IIR过程,对IIR读操作时其值的变化原理;与程序关系紧密的硬件是除数寄存器、接受缓冲、发送缓冲、中断允许寄存器、以 及通信线路和Mod
11、em的控制和状态寄存器。所谓的 DLH/DLL值在除数寄存器中 设定,即波特率因子。同步控制时会以当前设定波特率的16倍频控制每一位信号的脉冲保持时间(即如果要求高信号必须是保持10ms,贝U同步控制会以10/16ms的时间精度保证16次的10/16ms都为高脉冲),接收到信号以同样的原理检测信 号。(通常检测16倍频中的第7, 8,9三个倍频处的脉冲,以少数服从多数原则 判断脉冲的高低)。中断的屏蔽与否取决于中断允许寄存器。中断产生后都在中断标识寄存器中置 位。因此只要有中断标识在中断标识寄存器中置位且不屏蔽就会发出中断。在实际 处理中,在串口中断处理中循环判断是否在处理完上一中断后已产生下
12、一中断,若 有则直接处理,提高了效率。串口程序分为初始化部分serial.c和中断处理部分rs_io.s。串口初始化相当简 单:串口中断处理程序也很简单:保存现场,即eax等针对4个中断源的处理函数中两个函数:Modem状态改变的处理和接收状态有错处理都未作实际处理,只是复位相应寄存器。另两个函数为已接收到数据处理和发 送保持寄存器空的处理。接收到数据中断的处理(read_char函数)(与读队列read_q交互)读取字符发送保持寄存器空中断的处理(write_char函数)(与写队列write_q交互)计算写缓冲队列中的字符数头尾指针相等?置等待进程状态为可运行(唤醒)屏蔽发送保持寄存器队列
13、中字符数超过256 个?退出置等待进程状态为可运行(唤醒)头尾指针相等?读队列尾的字符到保持寄存器退出尾指针前移、取模、保存字符设备(终端)的上层接口tty_io.c和tty_ioctl是终端(控制台和串口终端)的上层接口实现其实除了 copy_to_cooked(函数提供完全供内核使用外。字符设备接口函数(即与用户程序 的接口)就三个:tty_read(),tty_write()和tty_ioctl()与用户程序的接口函数的特征 是以设备号作为参数,而不会以某个内核数据结构作为参数。tty_read函数实现用户接口从tty队列的secondary队列中读取字符。读取的 规则由p378的MIN
14、和TIME机制决定。tty_write函数将用户缓冲区的字符写入 tty的write_q队列,未写完或 write_q满了则睡眠,直到写完为止。tty_iotcl是用 户程序用来设置或取得tty设备(控制台终端或串口终端)参数的。如设置或取 得termios结构的属性、设置波特率。获取或设置终端设备进程的组id等。还有很多功能Linux0.11未实现,估计是为了兼容 POSIX标准,已预留了接口。tty_read(),tty_write()在系统中的位置如下图:丈n毎如屮字役设备驰动程庁注:函数 tty_write(). tty_read (i 和 copy _t o_c ook$d() 均t
15、E tty_io. c '|1押制台终端设备值得一提的是tty_queue缓冲队列结构中缓冲区的算法,采用的是循环缓冲区的 算法:tail指针处取字符,head指针处插字符。tail取完一字符和head插完一字 符,都将指针增1。到了边界再转到缓冲区开头,详见 p410 2334行缓冲区操作宏 函数。缓冲区的数据结构如下图:termios : i'i 晦tty_table 数组”瓦它字段写函数指针tty垢队列 (irrit e_q)tty辅助队列(secondary)tty读队列(read_q)真它字段 -(-ail)缓冲区(buf)tty_io.c和tty_ioctl.c两文
16、件中与用户接口无关,只在内核中使用的函数是 copy_to_cooked(函数。它的功能是1.将read_q中的字符复制成规范模式字符放在 secondary队列中。2.对键盘中断符进行处理:向当前进程发送键盘中断信号,键 盘退出信号。3.如果设置了回显标志,将相应字符放入 write_q队列并调用tty- write直接输出到屏幕(con_write)或从串口输出(rs_write) 4.最后唤醒等待 sec on dary的 进程。LinuxO .11字符设备部分总结该部分尽管有键盘、显卡、串口的硬件驱动程序,但它们通过中断串联在了一 起,即相互间紧密相关。相关的方式是以功能为导向:1.控
17、制台终端2.串口终端1.控制台终端,见下面两图。是以键盘中断触发的中断处理过程:键盘中断处 理(扫描码转ASCII码或CSI)-行规则程序(copy_to_cooked)-屏幕显 示(显卡驱动con_write,显示字符及光标位置和完成滚屏功能)融盘屮断处理过程键盘砌件中断放入队列屮输出到显示屏con_writeput.queuedo_t Ly_int&nupTcopy_ta_cookeVrread_qsecond£r5Trrire_Q系统调用read, Write了符设备接口char dev.ct ty_Trri te (?tty_read()字符设备驰动程川seconda
18、ry11 !iechowrite qcopy_tQ_coaked() |j 1注;歯数 tty_write().rty_read 0 和co-tocooked ()均在 tty_io. c '(Jcon_write()console, cput_aueue ()keyboard. S终喘就裂拧制台终端设备*终端显示器2.串口驱动,与键盘只有一个中断源(按键)不同,串口有4个中断源,Linu x0.11只对接收到数据中断和发送数据中断处理(其余2个只是复位寄存器,暂未处理)。对于接收到数据中断:串口中斷处理过程按版到数据中断read_qwrite_q上图为串口中断接收到数据后的处理过程。rs_write的作用是开启写保持空寄存器 空中断,此中断会调用 write_char中断处理程序。因此此时是中断嵌套中断。概括 起来也是3步:串行口接收到字符中断-行规则程序(cop
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024版音像制品出版合同
- 2024年项目融资中介合同
- 2025年农业设施彩钢棚租赁与维护服务合同3篇
- 2024艺术品收藏与买卖合同
- 2024铁路运输合同中物流成本控制策略研究3篇
- 2024衣柜墙板吊顶装修工程合同签订与生效条件合同
- 2024茶园承包种植经营合同
- 医疗建筑管桩施工合同
- 码头加固施工协议
- 儿童剧主持人聘请协议
- 医院物业管理应急预案
- 如何认识和欣赏《楚辞》
- 幼儿园英语教学计划模板述职汇报
- T-ISEAA 001-2020 网络安全等级保护测评高风险判定指引
- QC成果提高地下室剪力墙混凝土施工质量
- 子宫内膜癌护理查房
- 神通数据库管理系统v70企业版5安装部署手册
- 信息部年终工作总结(2篇)
- 化工厂有限公司年终工作总结
- JJF 1089-2002滚动轴承径向游隙测量仪校准规范
- GB/T 4348.1-2013工业用氢氧化钠氢氧化钠和碳酸钠含量的测定
评论
0/150
提交评论