代码之家  ›  专栏  ›  技术社区  ›  poseid

设备驱动程序中的抽象层

  •  1
  • poseid  · 技术社区  · 15 年前

    在我的项目中,我需要使用设备驱动程序,但是很难理解抽象层的命名、范围和功能。如我所见,主要层是HAL——“硬件抽象层”。 HAL的客户是什么?HAL与谁交互?

    2 回复  |  直到 10 年前
        1
  •  2
  •   old_timer    15 年前

    你说的是Windows或Linux中的某个特定HAL,还是其他的,或者一般的?

    当从设备驱动程序访问寄存器(驱动设备的代码,根本不必是内核或者有操作系统)时,我通常建议创建诸如put32(地址、数据)、data=get32(地址)之类的函数。或者写和读,不管你喜欢什么。重点是避免创建带有地址的指针并直接使用该指针。指针类型解决方案的性能有所提高,抽象put32()的性能有所提高。但是,我之所以使用它是因为如果代码足够干净,驱动程序就可以作为这个操作系统的内核驱动程序的一部分使用,这个操作系统的内核驱动程序,运行独立的嵌入式,连接到逻辑的HDL模拟,在同一个芯片上的处理器上运行,或者在达到int的主机上运行。o芯片通过PCI或JTAG等。从逻辑(HDL SIM)诞生到最终用户内核驱动程序的一段代码。

    也许更重要的是,考虑一下UART,您希望发送一些字节并接收一些字节,对吗?创建一个uart_send()函数和一个uart_recv()函数,抽象层之上的所有内容都使用这两个函数,当您将此代码目标定位到一个特定的平台时,然后在该特定的硬件中为特定的uart实现这些函数。稍后,您可以用其他东西替换该UART,只要新的UART可以发送和接收抽象层之上的代码就不必更改。尽管您已经用上述函数创建了一个抽象层,但我个人仍然会在实现特定UART的UART_send()和UART_recv()中使用put8()和get8()函数,并在单独的文件中实现put8()和get8()。

    驱动程序和实际硬件之间有多少个抽象层,任务和硬件的具体位置和方式。

        2
  •  0
  •   Aman Sharma    10 年前

    在计算机中,硬件抽象层(HAL)是一个编程层,它允许计算机操作系统在一般或抽象级别而不是在详细的硬件级别与硬件设备交互。Windows2000是包括硬件抽象层的几种操作系统之一。硬件抽象层可以从操作系统内核或设备驱动程序调用。在这两种情况下,调用程序都可以以比其他方式更通用的方式与设备进行交互。