

全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
用心 爱心 专心1 基于基于 LinuxLinux 内核的键盘模拟实现内核的键盘模拟实现 关键词 系统调用 勾子函数 键盘模拟 1 引言 当前 由于 Linux 资源完全公开 使得 Linux 的发展日益广泛快速 基于 Linux 的各种应 用已逐渐深入日常生活的方方面面 尤其是在嵌入式领域 由于内核可裁减定制 因此可 随意地根据用户需求进行整个系统的定制与重构 其中 我们可以通过对各种标准外部设 备的驱动进行改造 从而实现用户对标准设备的特定需求 例如可以通过对键盘的模拟来 实现操作的自动化 从而可以避免重复的键盘操作 2 Linux 内核支持的外部调用接口 由于 Linux 内核作为系统最深层次的核心 因此外部的开发人员并不能直接对内核进行操 作 然而在一些应用程序的开发过程中 又不得不使用内核的某些功能 因此就提供了一 些外部接口供开发人员直接与底层内核打交道 2 1 中断 在 Linux 下 硬件中断叫做 IRQ Interrupt Requests 有两种 IRQ 短类型和长类型 短 IRQ 需要很短的时间 在此期间机器的其他部分被锁定 而且没有其他中断被处理 一 个长 IRQ 需要较长的时间 在此期间可能发生其他中断 但不是发自同一个设备 如果可 能的话 最好把一个中段声明为长类型 如果 CPU 接到一个中断 它就会停止一切工作 除 非它正在处理一个更重要的中断 在这种情况下要等到更重要的中断处理结束后才会处理 这个中断 把相关的参数存储到栈里 然后调用中断处理程序 这意味着在中断处理程序 本身中有些事情是不允许的 因为这时系统处在一个未知状态 解决这个问题的方法是让 中断处理程序做需要马上做的事 通常是从硬件读取信息或给硬件发送信息 然后把对新 信息的处理调度到以后去做 实现的方法是在接到相关的 IRQ 在 Intel 平台上有 16 个 IRQ 时调用中断处理程序 这个 函数接到 IRQ 号码 函数名 标志 一个 proc interrupts 的名字和传给中断处理程序的 一个参数 标志中可以包括 SA SHIRQ 来表明你希望和其他处理程序共享此 IRQ 通常很多 设备公用一个 IRQ 或者一个 SA INTERRUPT 表明这是一个紧急中断 这个函数仅在此 IRQ 没有其他处理程序或需要共享所有处理程序时才会成功运行 2 2 系统调用 系统调用发生在用户进程 通过一些特殊的函数来请求内核提供服务 这时 用户进程被 挂起 内核验证用户请求 尝试执行并把结果反馈给用户进程 接着用户进程重新启动 一般当前系统的系统调用作为一张表 sys call table 进行定义的 是由指向实现各种系统 调用的内核函数的函数指针组成的表 具体参数参见 Linux 内核源代码 arch i386 kernel entry S 文件中 ENTRY sys call table l long SYMBOL NAME sys ni syscall 0 old setup system call l long SYMBOL NAME sys exit l long SYMBOL NAME sys ni syscall 用心 爱心 专心2 streams2 l long SYMBOL NAME sys vfork 190 2 3 钩子函数 钩子 HOOK 是 Linux 系统中非常重要的系统接口 用它可以截获并处理送给其他应用程序 的消息 来完成普通应用程序难以实现的功能 钩子可以监视系统或进程中的各种事件消 息 截获发往目标的消息并进行处理 这样就可以在系统中安装自定义的钩子 监视系统 中特定事件的发生 完成特定的功能 比如截获键盘 鼠标的输入 屏幕取词 日志监视 等等 可见 利用钩子可以实现许多特殊而有用的功能 3 键盘工作机理 CPU 对外部设备的管理是通过中断程序进行的 键盘也是一种外部设备 因此 CPU 对键盘 的管理也是通过中断进行的 当你击打键盘的时候 键盘控制器会向 CPU 提出中断申请 C PU 响应此中断进行处理 这就完成了一次很简单与人之间通过键盘进行的交互 首先 当输入一个键盘值的时候 键盘将会发送相应的 scancodes 给键盘驱动 一个独立 的击键可以产生一个六个 scancodes 的队列 键盘驱动中的 handle scancode 函数解析 scancodes 流并通过 kdb translate 函数里的转换表 translation table 将击键事件和 键的释放事件 key release events 转换成连续的 keycode 例如 a 的 keycode 是 30 击键 a 的时候便会产生 keycode 30 释放 a 键的时候会产生 keycode 158 128 30 然后 这些 keycode 通过对 keymap 的查询被转换成相应 key 符号 获得的字符被送入 raw tty 队列 tty flip buffer receive buf 函数周期性的从 tty flip buffer 中获得字 符 然后把这些字符送入 tty read 队列 当用户进程需要得到用户的输入的时候 它会在进程的标准输入 stdin 调用 read 函数 sys read 函数调用定义在相应的 tty 设备 如 dev tty0 的 file operations 结构中指 向 tty read 的 read 函数来读取字符并且返回给用户进程 4 键盘模拟的实现 通常情况下 对键盘模拟的实现一般是通过写一个自己的键盘中断句柄来实
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025设备供应合同
- 商业综合体施工方案范本
- 2025四川省新租赁合同范本
- 老师讲西游记试卷及答案
- 普通话第一章试卷及答案
- 室内电视背景墙施工方案
- 2万千牛强夯施工方案
- 2025年乡村振兴考试题目及答案
- 高淳区防水板岩施工方案
- 活动评选方案范本
- 食材采购协议书
- 项目驻地(营区)风险评估报告
- DL T 5745-2016 电力建设工程工程量清单计价规范
- 百白破疫苗效力评估的队列研究
- 田径比赛竞赛规则
- +Unit4+I+used+to+be+afraid+of+the+dark+SectionB+1a-1e课件2023-2024学年人教版九年级英语全册
- 2022新高考I卷II卷英语读后续写解读讲评及写作技巧指导课件
- 安徽省物业管理行业专题调研分析报告
- 2023国家电网作业安全风险管控典型生产作业风险定级库
- 媒介经营与管理(课程)课件
- 项目组织供应能力说明
评论
0/150
提交评论