Tuesday, November 30, 2010

Brand New Start

Abstract
明天將是人生中的一個新起點, C'mon




















My New Room
  • 首先是一進門就是三個大衣櫃, 加個門簾會更美觀, 這邊算是玄關, 因此還有下一道門

 
  • 房間以及浴室外觀



  • 浴室基本上可乾濕分離


  • 大鏡子及「免治馬桶」(不習慣用Orz)

  • 有點像「閨房」



Epilogue
  • 兩面採光, 14F, 大坪數, 還有開放式大衣櫥


















 



  • Beginnings by Carl Bard [2]





















Reference 
  1. http://crossroadsmag.eu/2009/12/  
  2. http://www.success.net/fx/  
  3. 信義房屋2010廣告

Sunday, November 14, 2010

Hardware Abstraction Layer (HAL)

Introduction
退伍後,在最近的工作面試中,曾經有位主管提到了Hardware Abstraction Layer (HAL),主管稍微解釋了它的概念,其實我這個菜逼八沒碰過這玩意兒,在面試之前,對HAL的瞭解大概只有在Android那邊survey到的一個記憶:「HAL在Android的角色之一是它可以讓廠商避免掉利用Android來開發自家產品時所發生的GPL版權上的問題」( ~想盡量口語化卻讓一句話變得好冗長 囧rz )實際上,HAL並非只有上述的好處,在嵌入式系統中HAL更是使得系統具有更好的架構,且使得系統更portablereusable。 

本文將概念性解釋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將有以下的好處:
  1. 上層AP不需更改code 
  2. 若在HAL落實Hardware Abstraction,將使得之後開發更便利
針對上面兩點好處底下做個說明:
  1. HAL提供API供上層呼叫,因此就算更換了不同硬體,只要API的部份仍依照當初制定的規格來撰寫、修改,則上層的code將不用做任何修改(亦即上層根本不需知道底層如何實作出該API)
  2. 在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使得:
  1. 開發廠商可以不需要open source且不會違反GPL
     
  2. 任何硬體方面的改變, 可以不用修改到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上的應用至於這個概念在更細部上是如何實作的,各家做法不盡相同,網路上也有許多參考文件可參考,這裡就不重覆敘述了。 
 

Reference
  1. http://en.wikipedia.org/wiki/Hardware_abstraction_layer
  2. http://sites.google.com/site/io/anatomy--physiology-of-an-android
  3. http://www.altera.com/literature/hb/nios2/n2sw_nii52003.pdf