Introduction
退伍後,在最近的工作面試中,曾經有位主管提到了Hardware Abstraction Layer (HAL),主管稍微解釋了它的概念,其實我這個菜逼八沒碰過這玩意兒,在面試之前,對HAL的瞭解大概只有在Android那邊survey到的一個記憶:「HAL在Android的角色之一是它可以讓廠商避免掉利用Android來開發自家產品時所發生的GPL版權上的問題」( 呼~想盡量口語化卻讓一句話變得好冗長 囧rz )。 實際上,HAL並非只有上述的好處,在嵌入式系統中,HAL更是使得系統具有更好的架構,且使得系統更portable、更reusable。
本文將概念性解釋HAL在整個系統架構中所扮演的角色,之後舉出幾個例子,來描述不同系統上對於HAL的使用狀況。
Hardware Abstraction Layer (HAL)
wiki[1]上對於HAL的描述,第一句是這樣說的
A hardware abstraction layer (HAL) is an abstraction layer, implemented in software, between the physical hardware of a computer and the software that runs on that computer. Its function is to hide differences in hardware from most of the operating system kernel, so that most of the kernel-mode code does not need to be changed to run on systems with different hardware.
最後一句是這樣結束的
Operating systems having a defined HAL are easily portable across different hardware. This is especially important for embedded systems that run on dozens of different platforms.
介紹HAL的資料很多,但是它的精神從wiki的前後兩個句子大概可以看出個端倪。
當更換了底層硬體平台或是零件,driver就必須重寫,此時如果有HAL,將有以下的好處:
- 上層AP不需更改code
- 若在HAL落實Hardware Abstraction,將使得之後開發更便利
針對上面兩點好處,底下做個說明:
- HAL提供API供上層呼叫,因此就算更換了不同硬體,只要API的部份仍依照當初制定的規格來撰寫、修改,則上層的code將不用做任何修改(亦即上層根本不需知道底層如何實作出該API)
- 在HAL開發API時,應該多考慮Portability,盡量使得該API能在不同硬體上run
HAL implementation with various platforms
HAL其實可以算是一個「概念」,這個概念就是提供一個「界面」,而這個界面的精神是要分隔kernel space及user space。因此,接下來舉出兩個不同平台對於HAL的應用方式:
- Android
2008年, Patrick Brady在Google I/O的演講「Anatomy & Physiology of an Android」中提到了HAL [2], 在Android中, HAL使得:
- 開發廠商可以不需要open source且不會違反GPL
- 任何硬體方面的改變, 可以不用修改到Kernel
- Nios® II processor
The HAL is a lightweight runtime environment that provides a simple device driver interface for programs to connect to the underlying hardware. The HAL application program interface (API) is integrated with the ANSI C standard library. The HAL API allows you to access devices and files using familiar C library functions, such as printf(), fopen(), fwrite(), etc. [3]
上面提到的Android是一套OS, 在這套OS中可以實作出HAL這個概念。 而Nios® II processor, 它是一個處理器, 這個處理器上層需要driver, 這些driver上層就是HAL的實作加上ANSI C standard library的整合, 作用及精神上也符合HAL的概念。
Conclusion
本文首先介紹了HAL的概念,接著瀏覽HAL這個概念在Android及Nios® II processor上的應用。至於這個概念在更細部上是如何實作的,各家做法不盡相同,網路上也有許多參考文件可參考,這裡就不重覆敘述了。
本文首先介紹了HAL的概念,接著瀏覽HAL這個概念在Android及Nios® II processor上的應用。至於這個概念在更細部上是如何實作的,各家做法不盡相同,網路上也有許多參考文件可參考,這裡就不重覆敘述了。
Reference
- http://en.wikipedia.org/wiki/Hardware_abstraction_layer
- http://sites.google.com/site/io/anatomy--physiology-of-an-android
- http://www.altera.com/literature/hb/nios2/n2sw_nii52003.pdf
0 意見:
Post a Comment