Jollen's email: jollen # jollen.org

more: Jollen's Consulting | Jollen's Wiki

« 二零一零新年快樂:新希望與期許! | Home | 「Jollen 的 Android Framework in a Nutshell」演講 »

Android 的 HAL 技術, #8: 實作 HAL Stub

jollen 發表於 January 2, 2010 11:31 PM

承日記「Android 的 HAL 技術, #6: 小結 HAL stub 實作步驟」與「Android 的 HAL 技術, #7: 取得 Proxy Object」。在了解基本的觀念,以及架構上的設計後,接著就可以開始實作 HAL Stub 了。以下是 LED Stub 的實作範例,將程式碼儲存為 led.c:

static struct hw_module_methods_t led_module_methods = {
    open: led_device_open
};
 
const struct led_module_t HAL_MODULE_INFO_SYM = {
    common: {
        tag: HARDWARE_MODULE_TAG,
        version_major: 1,
        version_minor: 0,
        id: LED_HARDWARE_MODULE_ID,
        name: "Simple LED module",
        author: "The Mokoid Open Source Project",
        methods: &led_module_methods,
    }
 
    /* supporting APIs go here */
};

這段程式碼實作了圖1的設計, led_module_t 是 Stub 的主體結構(或稱為主類別),其符號名稱須取名為 HAL_MODULE_INFO_SYM,不可更改。任何的 Stub 主類別名稱都須命名為 HAL_MODULE_INFO_SYM。


圖1:LED Stub的設計(OOD)

幾個重要的欄位如下:

  • tag:須指定為 HARDWARE_MODULE_TAG
  • id:指定為 HAL Stub 的 module ID,我們的範例為”LED”
  • methods:struct hw_module_methods_t,為 HAL 所定義的「method」
  • struct hw_module_methods_t 是由 HAL 定義的標準介面,目前的 AOSP(Android Open Source Project)實作裡包含一個”open”介面

"Open" 是一個介面(interface),這意味著 HAL Stub 必須實作此介面,這個部份更是 HAL 的重點。

--jollen

引用通告

如果您想引用這篇文章到您的Blog,
請複製下面的鏈接,並放置到您發表文章的相應界面中。

http://www.jollen.org/cgi-bin/mt3/mt-tb.cgi/687

發表一個評論

(您發表的意見將被立即接受,但需要一點時間與後端伺服器做同步,您的留言才會顯示在網站上。為避免 spam 攻撃,按「發表」後請輸入帳號密碼。使用者帳號:「nospam」、密碼:「nospam」。)

[Top] Copyright (C) 2006,2010 www.jollen.org.
All rights reserved. All content licensed under Creative Commons License.