设备驱动程序中的抽象层

时间:2010-09-30 08:53:25

标签: hardware device-driver

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

2 个答案:

答案 0 :(得分:2)

您是在谈论Windows或Linux中的特定HAL还是某些东西或一般情况?

从设备驱动程序访问寄存器时(驱动设备的代码,根本不必是内核或根本没有操作系统),例如我通常建议创建PUT32(地址,数据)等函数,data = GET32(地址)。或者写作和朗读,不管你喜欢什么。重点是避免使用地址创建指针并直接使用该指针。指针类型解决方案有性能提升,并且性能受到抽象PUT32()的影响。为什么我使用它是因为如果代码足够干净,驱动程序可以用作此操作系统的内核驱动程序的一部分,该操作系统的内核驱动程序,运行独立嵌入式,连接到逻辑的hdl模拟,运行同一芯片上的处理器,或通过PCI或jtag等进入芯片的主机上运行等。从逻辑(hdl sim)诞生到最终用户内核驱动程序,重用了一大块代码。

或许更多的是你的问题虽然考虑一个uart,你想发送一些字节并接收一些字节吗?创建一个uart_send()函数和一个uart_recv()函数,抽象层之上的所有内容都使用这两个函数,当您将此代码定位到特定平台时,您将为该特定硬件中的特定uart实现这些函数。稍后您可以用其他东西替换uart,只要新的uart可以发送和接收抽象层上面的代码就不必改变。即使你已经创建了一个带有上述函数的抽象层,我个人仍然会在uart_send()和uart_recv()的实现中使用PUT8()和GET8()函数来获取特定的uart,并在单独的文件中实现PUT8( )和GET8()。

驱动程序和实际硬件之间有多少抽象层,通常特定于任务和硬件的方式和位置。

答案 1 :(得分:0)

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