阅读:4369回复:8
请求高手解答一下硬件抽象层和驱动程序的关系
在WINDOWS XP操作系统中,在内核模式下有驱动程序(这是不是我们平常装显卡驱动时所说的驱动),
然后驱动程序下是硬件抽象层(这个层是不是就是一个DLL文件),硬件抽象层下是硬件? 我在一些资料上又看到有什么虚拟驱动的概念,他们是这样说的,在内核模式下是虚拟驱动,虚拟驱动 下是硬件抽象层,而硬件抽象层下才是硬件驱动程序,硬件驱动程序下才是硬件?那么我们平常装的显 卡驱动程序是哪个呢,虚拟驱动程序还是硬件驱动程序?我们所进行的驱动开发又是只哪个呢? 描述:层次图 图片:20100722_14b47739cc7490be552bVG0iBC86GW0l.jpg ![]() 硬件抽象层所谓的与硬件无关体现在哪里?我查了一天的网了,而且看了整个PE文件结构以及许多的内 核资料,但是对于WINDOWS这样的内核讲解却很含糊。希望高手们不舍赐教。谢谢! |
|
沙发#
发布于:2010-08-28 10:28
不知道是不是国人无法解答,是不是需要上国外论坛寻求帮助。或者说大陆的论坛解答不了,
到台湾的看看。我应该放对位置吧。懂驱动编程的这个层次问题应该知道吧? 很无奈。-_- |
|
板凳#
发布于:2010-09-04 13:54
我简单说一下硬件抽象层HAL。本来驱动程序可以用汇编指令in,out直接读取硬件寄存器端口,这样也就说驱动程序直接面向具体硬件,若驱动程序不直接使用in.out指令,而将in,out指令交给专门的程序使用,而驱动程序再调用该程序来间接达到读取硬件寄存器端口的目的,这就将驱动程序跟具体硬件隔离开了。硬件抽象层就是这个专门的程序。
|
|
地板#
发布于:2010-09-04 18:11
谢谢!
.那我们平常安装的驱动程序就是在硬件抽象层之上吗?那么硬件抽象层能涵盖所有的硬件吗? 例如一款显卡出得比操作系统出得晚或者说,以前显卡是AGP的后来是PCI-E的,而PCI-E出在操作系统之后,那么这时候怎么办?是不是这时的驱动程序就必须直接控制硬件了,而不是通过硬件抽象的程序? 换句话说是不是硬件抽象层只负责通用的,而一般驱动程序也通过硬件抽象层的程序操作硬件,当硬件抽象层无法涵盖的硬件才由驱动直接来操作? |
|
地下室#
发布于:2010-09-04 22:26
从操作系统方面来说驱动程序就是操作系统功能的扩展,也是同硬件抽象层一样运行在环0层,同样能完成硬件抽象层的功能。
|
|
5楼#
发布于:2010-09-05 13:46
谢谢!我大概明白了,我想我在做驱动时可能能更好地理解他。呵呵
|
|
6楼#
发布于:2010-09-12 12:39
图是对的,你的说明完全错了。
HAL是最接近硬件的,上面是内核和驱动栈。 我想,任何一本内核书籍,都会比较全面地讲这部分内容吧。 |
|
|
7楼#
发布于:2010-09-12 22:27
唉,有些书讲得没那么详细.
而我需要的恰是这一点的问题,将内核书从头看到尾也不错,但这不是我当前要做的,那是我后续的工作。 我当前的工作是从总体上大概地了解。 谢谢楼上的回答。 您刚才说我的错了,哪个地方,还望赐教,谢谢,不然一个错误可能伴随很长时间的。 “是我们平常装的显卡驱动在硬件抽象层上,硬件抽象层负责直接操控硬件,当硬件抽象层没有涉及的硬件才有驱动直接操作,否则是通过硬件抽象层操纵。” 是这里错了吗?还望赐教。 还有听说DirectX也有硬件抽象层,这个的硬件抽象层文件或者说程序是跟WINDOWS操作系统装机时带的,还是装DirectX时才有的呢?这个硬件抽象层和原先的硬件抽象层是同一个层次的还是在其之上? 其次我们所说的DirectX快,快在哪里?是因为这里的代码能让显卡直接运行里面的函数绘图快,还是直接操纵硬件快? WINDOWS自带的负责绘图的函数不也是通过驱动控制硬件吗?到底两者的差距是因为前者能让显卡绘图,还是 什么呢? 还望赐教谢谢! |
|
8楼#
发布于:2010-09-12 22:29
还有一个问题。
我们在用汇编用IN、OUT指令直接操纵IO口,用C语言怎么办,C语言有这样的语句吗? (针对PC机的CPU而言,不是单片机) |
|