LXZ-2008
驱动牛犊
驱动牛犊
  • 注册日期2010-08-27
  • 最后登录2010-10-08
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望61点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:4370回复:8

请求高手解答一下硬件抽象层和驱动程序的关系

楼主#
更多 发布于:2010-08-27 23:09
       在WINDOWS XP操作系统中,在内核模式下有驱动程序(这是不是我们平常装显卡驱动时所说的驱动),
然后驱动程序下是硬件抽象层(这个层是不是就是一个DLL文件),硬件抽象层下是硬件?

    我在一些资料上又看到有什么虚拟驱动的概念,他们是这样说的,在内核模式下是虚拟驱动,虚拟驱动
下是硬件抽象层,而硬件抽象层下才是硬件驱动程序,硬件驱动程序下才是硬件?那么我们平常装的显
卡驱动程序是哪个呢,虚拟驱动程序还是硬件驱动程序?我们所进行的驱动开发又是只哪个呢?

描述:层次图

图片:20100722_14b47739cc7490be552bVG0iBC86GW0l.jpg

层次图
 

    硬件抽象层所谓的与硬件无关体现在哪里?我查了一天的网了,而且看了整个PE文件结构以及许多的内
核资料,但是对于WINDOWS这样的内核讲解却很含糊。希望高手们不舍赐教。谢谢!
LXZ-2008
驱动牛犊
驱动牛犊
  • 注册日期2010-08-27
  • 最后登录2010-10-08
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望61点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2010-08-28 10:28
        不知道是不是国人无法解答,是不是需要上国外论坛寻求帮助。或者说大陆的论坛解答不了,
到台湾的看看。我应该放对位置吧。懂驱动编程的这个层次问题应该知道吧?
    
很无奈。-_-
zy19590114
驱动牛犊
驱动牛犊
  • 注册日期2010-06-27
  • 最后登录2012-10-05
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望91点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2010-09-04 13:54
我简单说一下硬件抽象层HAL。本来驱动程序可以用汇编指令in,out直接读取硬件寄存器端口,这样也就说驱动程序直接面向具体硬件,若驱动程序不直接使用in.out指令,而将in,out指令交给专门的程序使用,而驱动程序再调用该程序来间接达到读取硬件寄存器端口的目的,这就将驱动程序跟具体硬件隔离开了。硬件抽象层就是这个专门的程序。
LXZ-2008
驱动牛犊
驱动牛犊
  • 注册日期2010-08-27
  • 最后登录2010-10-08
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望61点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2010-09-04 18:11
谢谢!
.那我们平常安装的驱动程序就是在硬件抽象层之上吗?那么硬件抽象层能涵盖所有的硬件吗?
例如一款显卡出得比操作系统出得晚或者说,以前显卡是AGP的后来是PCI-E的,而PCI-E出在操作系统之后,那么这时候怎么办?是不是这时的驱动程序就必须直接控制硬件了,而不是通过硬件抽象的程序?
换句话说是不是硬件抽象层只负责通用的,而一般驱动程序也通过硬件抽象层的程序操作硬件,当硬件抽象层无法涵盖的硬件才由驱动直接来操作?
zy19590114
驱动牛犊
驱动牛犊
  • 注册日期2010-06-27
  • 最后登录2012-10-05
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望91点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2010-09-04 22:26
从操作系统方面来说驱动程序就是操作系统功能的扩展,也是同硬件抽象层一样运行在环0层,同样能完成硬件抽象层的功能。
LXZ-2008
驱动牛犊
驱动牛犊
  • 注册日期2010-08-27
  • 最后登录2010-10-08
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望61点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2010-09-05 13:46
谢谢!我大概明白了,我想我在做驱动时可能能更好地理解他。呵呵
Pegram
论坛版主
论坛版主
  • 注册日期2005-12-03
  • 最后登录2013-08-23
  • 粉丝13
  • 关注5
  • 积分1333分
  • 威望4717点
  • 贡献值1点
  • 好评度78点
  • 原创分0分
  • 专家分2分
6楼#
发布于:2010-09-12 12:39
图是对的,你的说明完全错了。
HAL是最接近硬件的,上面是内核和驱动栈。
我想,任何一本内核书籍,都会比较全面地讲这部分内容吧。
《寒江独钓》与《竹林蹊径》的合作作者。精通USB开发,设计了CY001 USB驱动套件(http://bbs.driverdevelop.com/read.php?tid-119314.html)。
LXZ-2008
驱动牛犊
驱动牛犊
  • 注册日期2010-08-27
  • 最后登录2010-10-08
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望61点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2010-09-12 22:27
唉,有些书讲得没那么详细.
而我需要的恰是这一点的问题,将内核书从头看到尾也不错,但这不是我当前要做的,那是我后续的工作。
我当前的工作是从总体上大概地了解。
谢谢楼上的回答。
您刚才说我的错了,哪个地方,还望赐教,谢谢,不然一个错误可能伴随很长时间的。

“是我们平常装的显卡驱动在硬件抽象层上,硬件抽象层负责直接操控硬件,当硬件抽象层没有涉及的硬件才有驱动直接操作,否则是通过硬件抽象层操纵。”
是这里错了吗?还望赐教。

还有听说DirectX也有硬件抽象层,这个的硬件抽象层文件或者说程序是跟WINDOWS操作系统装机时带的,还是装DirectX时才有的呢?这个硬件抽象层和原先的硬件抽象层是同一个层次的还是在其之上?
其次我们所说的DirectX快,快在哪里?是因为这里的代码能让显卡直接运行里面的函数绘图快,还是直接操纵硬件快?
WINDOWS自带的负责绘图的函数不也是通过驱动控制硬件吗?到底两者的差距是因为前者能让显卡绘图,还是
什么呢?
还望赐教谢谢!
LXZ-2008
驱动牛犊
驱动牛犊
  • 注册日期2010-08-27
  • 最后登录2010-10-08
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望61点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2010-09-12 22:29
还有一个问题。
我们在用汇编用IN、OUT指令直接操纵IO口,用C语言怎么办,C语言有这样的语句吗?
(针对PC机的CPU而言,不是单片机)
游客

返回顶部