| |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| -> C++知识库 -> Bochs源码分析 - 27:8259中的SMM模式介绍 -> 正文阅读 |
|
|
[C++知识库]Bochs源码分析 - 27:8259中的SMM模式介绍 |
前言? ? ? ? SMM,全称为 Special Mask Mode,特殊掩码模式。在一般情况下(普通的Mask Mode),IRQ的中断请求得到响应执行,ISR相应位置位,在中断服务发起EOI命令前,ISR的位不会清位,8259会抑制优先级低的IRQ。 ? ? ? ? 然而,在开启ESMM模式中,其允许在中断服务例程里动态依据IMR及IRR来响应中断请求,而不需要例会ISR。 代码分析? ? ? ? 在《x86/x64体系探索及编程》的ex17-2中实现了这个,简单分析一下代码吧。 ? ? ? ? 首先,在do_timer_handler函数中先开启键盘中断,然后再开启SMM模式,然后再关闭键盘中断,之后一直loop等待着键盘中断触发。
? ? ? ? 这时候屏幕内容如下,可以看到其正在处理IRQ0中断,并且等待键盘中断。
? ? ? ? ?此时按下键盘,进入键盘中断,键盘中断处理流程如下代码所示。该键盘中断就是简单dump了8259的IMR,IRR,ISR三个标志位。之后调用write_master_EOI函数,该函数像寄存器中写入,表示中断事件完成。
? ? ? ? 我们看其8259A三个寄存器的相关属性位,内容如下。可以看到IRQ0与IRQ1同时在执行,这说明SMM模式起到效果了。
? Bochs对键盘的实现? ? ? ? 关于8259A芯片我们先暂时不分析了,源码一共几百行配合手册很好理解。我们现在主要来简单提一句键盘的处理流程,之后获取会分析键盘的实现,到时候为我们提供一些思路。 ? ? ? ? 关于键盘的堆栈调用图如下,我们慢慢来进行分析:
? ? ? ? 通过函数堆栈调用图,我们可以了解其键盘事件是由设备时钟来触发的。
? ? ? ? 在handle_events( )中来处理界面的各种事件,核心函数如下,可以看到其来处理WIN_GUI发来的鼠标移动,键盘按下,弹起,滚动条移动等各种事件。
? ? ? ? 之后其会生成对应的码,指出对应的按键。之后如果分析键盘这部分,我们会回过头来详细分析,现在只是在这里稍微提一下。
总结? ? ? ? 8259A芯片的内容就到这里了,这部分芯片实物也没真正编写过,但是通过bochs代码深刻了解了ISR,IMR,IRR三个寄存器以及其对应的主从芯片,之后我们会来深入学习AIPC,这个是重点。 |
|
|
| C++知识库 最新文章 |
| 【C++】友元、嵌套类、异常、RTTI、类型转换 |
| 通讯录的思路与实现(C语言) |
| C++PrimerPlus 第七章 函数-C++的编程模块( |
| Problem C: 算法9-9~9-12:平衡二叉树的基本 |
| MSVC C++ UTF-8编程 |
| C++进阶 多态原理 |
| 简单string类c++实现 |
| 我的年度总结 |
| 【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
| c语言常见错误合集 |
|
|
| 上一篇文章 下一篇文章 查看所有文章 |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| 360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年10日历 | -2025/10/30 0:50:53- |
|
| 网站联系: qq:121756557 email:121756557@qq.com IT数码 |