没有合适的资源?快使用搜索试试~ 我知道了~
第一章 开始一个驱动项目在本章中我将对驱动开发的历史作一个简要的回顾。从80年代中期起,我开始涉足个人计算领域,那时也正是IBM刚刚开始出售搭配着MS-DOS操
资源详情
资源评论
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/86365528/bg1.jpg)
第一章 开始一个驱动项目
在本章中我将对驱动开发的历史作一个简要的回顾。从 80 年代中期起,我
开始涉足个人计算领域,那时也正是 IBM 刚刚开始出售搭配着 MS-DOS 操作系统
的个人电脑。而就在今天,我们也依然能感受到当年 IBM 和 Microsoft 的决定所
带来的影响。所以一定的历史背景知识会让你更好的理解如何编写驱动程序。
在本章中,我将简要地介绍一下可以运行 WDM 的两个截然不同的系统。
Windows XP 和 Windows 2000,NT 一样为 WDM 驱动提供了一个框架。在这个框架中,
在完成应用程序或其它的驱动请求的 I/0 操作时,WDM 驱动可以扮演的角色是该
框架预先定义好的;而 Windows Me 和之前的 Windows 9x 以及 Windows 3.x 一样是
一个相对“自由”的系统,所以在这里,驱动可以担当不同的角色。
如果确实有需要自己写一个驱动,那么在项目开始时要做的第一步是确定你
需要什么样的驱动。本章介绍了很多不同的驱动类型,希望能帮助你在这个问题
上有个明确的答案。
最后,本章的末节就项目中应当考虑到的一些事情,列出了一个参考清单。
设备驱动的历史
早期个人电脑中的英特尔处理器只能提供 640KB“真正”内存的能力——之
所以称之为“真正”的内存是因为这种内存以内存芯片的形式实实在在的存在在
系统中,而处理器则通过一个 20 位的物理地址来访问这些内存。这种处理器只
提供了一个操作模式,即所谓的“实模式”。在这“实模式”当中,处理器通过
两个 16 位寄存器值组成一个 20 位的内存地址,并以此来处理每一个涉及内存操
作的指令。从那时候开始,就已经有了扩展槽的概念。这样可以使得那些前卫的
电脑用户可以购买独立的板卡,并把它们安装到系统中。这些板卡往往带有 DIP
开关(后来,这些 DIP 开关变成了跳线针),并附有使用说明,以便你调整 I/O
设置。那时,为了正确地设置 I/O 设置,你常常得记下系统中 I/O 的设置和中断
使用的情况。后来,MS-DOS 使用 CONFIG.SYS 文件来帮助简化这种设置。MS-DOS
根据这个文件的配置自动载入系统中原有设备的实模式驱动以及那些扩展卡的
实模式驱动。当然这些驱动都是用汇编语言编写的,所以经常通过 INT 指令来获
得 BIOS 和 MS-DOS 的服务。最终用户也被迫学习怎样在一个命令行运行一个应用
程序,而开发者当然只能学着在程序中直接操作显卡,键盘和鼠标等硬件,因为
无论是 MS-DOS,抑或 BIOS 都没有提供足够的功能来满足开发要求。
随后 IBM 又发布了 AT 架构的基于英特尔 80286 芯片的的个人电脑。这种 286
芯片新增了“保护模式”。保护模式使用一个 24 位的段地址(通过一个存放在 16
位的段寄存器中的段选择子来来确定这个段地址)和一个 16 的偏移地址,使得
应用程序可以访问 16MB 的主内存和扩展内存。但是,MS-DOS 本身还是一个实模
式的操作系统,没有提供访问保护模式的能力,所以一些公司开始设计 DOS 扩展
![](https://csdnimg.cn/release/download_crawler_static/86365528/bg2.jpg)
器,以使开发者把他们的实模式程序移植到保护模式下来,能够访问到当时市场
上开始出现的大容量内存。正因为实模式的 MS-DOS 还统治着个人电脑市场,因
此这个时候的驱动技术依然停留在原先的水平上。
个人认为,英特尔的 80386 芯片是个人电脑技术发展史上的一个分水岭。通
过分页表,80386 芯片允许程序可以访问多达 4GB 的内存,同时它提供了 32 位
的数值运算能力和 32 位的内存寻址能力。伴随着 80386 芯片的问世,软件工具
市场再度活跃起来。很多程序对内存和处理器的要求越来越高,各编译器厂商和
做 DOS 扩展器的公司纷纷推陈出新争夺市场份额。而那时的设备驱动还依然是用
汇编语言写成的 16 位的实模式的驱动,依然得通过 CONFIG.SYS 文件来完成安装
驱动,所以对最终用户来说还得手工配置各种扩展卡。
以后的日子里,处理器芯片基本上只在性能和能力上进一步提高。就在此时,
在我写这一章的时候,运行速度在 1GHz 以上,拥有 50GB 容量的硬盘和 512MB
(甚至更多内存)的电脑已经成了普通配置,对大多数人来说价格上也完全能够
承受。
伴随着硬件的发展,操作系统技术也在发展着。在文本模式和图形模式之间,
大多数人,就算是系统软件的开发者,都更愿意于使用前者。在图形操作系统上,
Microsoft 虽然晚了一步——Apple 公司早一步推出了它的 Macintosh,但却用
Windows 系列操作系统统治了这个市场。早先的 Windows 系统只是实模式 MS-DOS
的一个图形“壳(shell)”。后来,针对常见的硬件,比如显示适配器,键盘,
鼠标,出现了一些驱动程序集。这些驱动主要是由汇编语言开发的,带着.DRV
扩展名的可执行文件。
在 AT 架构的电脑流行后,Microsoft 开发了支持了保护模式的 Windows。与
此同时,Microsoft 升级了实模式的驱动,使之可以运行在保护模式下。然而,
除了那些“标准”的 Windows 硬件外——显示卡,键盘和鼠标等,其它的硬件依
然由 MS-DOS 的实模式的驱动操纵管理。
随着 386 芯片的电脑普及,Microsoft 发布了能够充分利用 386 芯片提供的
虚拟内存管理能力的 Windows 3.0。尽管如此,每一个新硬件还是需要一个实模
式的驱动。而且现在一个新的重要的问题摆在了眼前。为了使 MS-DOS 程序能够
支持多任务(一个能够让用户接受 Windows 的新特性),Microsoft 设计了一个
虚拟机的操作系统。和 Windows 的图形界面一样,每一个 MS-DOS 程序运行在一
个属于它自己的虚拟机上。但是这些 MS-DOS 程序往往通过发出 IN 和 OUT 指令试
图直接操作硬件,读取或写入设备内存以及处理来自硬件的中断等。更重要的是,
两个或两个以上的共享处理器时间的程序很有可能对硬件发出相互冲突的指令。
在显示卡,键盘和鼠标的使用上,这些程序都有可能引起冲突。
![](https://csdnimg.cn/release/download_crawler_static/86365528/bg3.jpg)
为了可以让多个应用程序共享硬件资源,Microsoft 推出了所谓的虚拟设备
技术。这种技术其主要目的在于“虚拟化”一个硬件设备。之所以这类驱动一般
被称为 VxD 是因为它们大多数都有一个类似 VxD.386 的文件名,其中的 x 则用来
表明该驱动支持的硬件类型。使用这项技术,Windows 3.0 制造了这样一种假象,
系统中的各个虚拟机似乎都运行各自独立的硬件设备上。但是这些设备本身,在
很多时候还是依然由 MS-DOS 的实模式驱动所驱动。一个 VxD 驱动的任务在于在
硬件和软件之间起到一个类似于中间人的作用,它首先会截取应用程序直接操作
硬件的企图,然后为了运行 MS-DOS 驱动,暂时性地切换处理器的工作模式到一
种和实模式非常类似的,所谓的虚拟 8086 模式(virtual 8086 mode)下。
这种技术其实只是权宜之计,它唯一的作用是可以允许硬件平台的平稳增长,
也为操作系统的发展作了一个铺垫。它也是 Windows 3.0 的很多 Bug 的根本原因。
Microsoft 为此准备的答案便是 OS/2 系统。这个系统是 Microsoft 和 IBM——以
一种 20 世纪的“黓契”,合作开发的。
Microsoft 版的 OS/2 后来成了 Windows NT。NT 的第一次发布是在 90 年代早
期,比 Windows 3.1 的发布时间略微晚一点。Microsoft 从零开始全新开发了
NT,目的要使 NT 成为一个安全的,可持续服务的 Windows 平台。Windows NT 下
的驱动使用了全新的技术,和当时非常流行的另两种驱动技术可以说没有任何相
同之处。NT 的驱动几乎全部用 C 语言来编写。这样当新的 CPU 架构出现时,在
无须更改驱动源代码的情况下,只要重新编译一次就可以了。
从 Windows 3.0 的时代开始,软件划分成了两个不同的世界:用户模式和核
心模式,这一点对今天的我们的影响依然很大。人们购买电脑要使用的一般软件
和游戏都属于用户模式的软件。但这些是不被“信任”的应用程序,它们被认为
不能安全可靠地(甚至是可能有恶意的)和硬件或者其它的程序打交道。象你我
编写的驱动和操作系统本身则属于核心模式的程序,它们是被“信任”的程序,
可以随心所欲地使用系统资源。虽然 Windows 3.0 根据模式分离了不同的程序,
但没有一款 Windows1[1]系统(甚至是 Windows ME 也一样)真正使用内存保护的
手段来使系统运行的安全可靠。安全的责任[A1]落到了 Window NT 和它的后继者
身上,这些系统禁止用户模式的程序读取和修改由系统核心管理的资源。
然而,一直要到最近 Windows NT 才能在普通的个人电脑运行得很好,所以
Microsoft 不得不保持并继续 Windows 这条产品线。因此 Windows 3.0 之后,便
有了 3.1,3.11 和 95。从 95 开始,如果你要写一个设备驱动,你就得准备写一
种称之为 VxD 的驱动了。这种驱动其实就是一个 32 位的保护模式的可执行文件。
也就是从那时开始,用户终于可以丢掉他们的有关 I/O 的使用记录的备份了,因
1[1] 这里的 Windows 指的应是我们常说的 Windows 9x 系列产品
Commented [A1]: Province 一词我这里译作“责任”
剩余16页未读,继续阅读
![001](https://img-home.csdnimg.cn/images/20210720083646.png)
![002](https://img-home.csdnimg.cn/images/20210720083646.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![exe](https://img-home.csdnimg.cn/images/20210720083343.png)
![application/octet-stream](https://img-home.csdnimg.cn/images/20210720083646.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![text/plain](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![avatar](https://profile-avatar.csdnimg.cn/2f34bf132db249c993a1c989096ebc4d_weixin_35763055.jpg!1)
书看不完了
- 粉丝: 20
- 资源: 364
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)
评论0