<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          HAL 硬件抽象層介紹

          共 2446字,需瀏覽 5分鐘

           ·

          2021-01-28 13:07

          和你一起終身學(xué)習(xí),這里是程序員 Android

          本篇文章主要介紹?Android?開發(fā)中的部分知識點(diǎn),通過閱讀本篇文章,您將收獲以下內(nèi)容:

          一、HAL 概述
          二、HAL 模塊介紹
          三、HAL 設(shè)備介紹
          四、構(gòu)建HAL模塊

          一、HAL 概述

          HAL定義了供硬件供應(yīng)商實施的標(biāo)準(zhǔn)接口,該接口使Android無需考慮底層驅(qū)動程序的實現(xiàn)。使用HAL可使您實現(xiàn)功能而不會影響或修改更高級別的系統(tǒng)。本頁介紹了較舊的架構(gòu),該架構(gòu)從Android 8.0開始不再受支持。對于Android 8.0及更高版本,請參見 HAL類型。圖 1. HAL 組件

          您必須為產(chǎn)品提供的特定硬件實現(xiàn)相應(yīng)的HAL(和驅(qū)動程序)。HAL實現(xiàn)通常內(nèi)置于共享庫模塊(.so文件)中,但是由于Android并未強(qiáng)制HAL實現(xiàn)與設(shè)備驅(qū)動程序之間進(jìn)行標(biāo)準(zhǔn)交互,因此您可以根據(jù)自己的情況采取最佳措施。但是,為了使Android系統(tǒng)能夠與您的硬件正確交互,您必須遵守每個特定于硬件的HAL接口中定義的合同。

          為了確保HAL具有可預(yù)測的結(jié)構(gòu),每個特定于硬件的HAL接口都具有在中定義的屬性?hardware/libhardware/include/hardware/hardware.h。此界面允許Android系統(tǒng)以一致的方式加載正確的HAL模塊版本。HAL接口包含兩個組件:模塊和設(shè)備。

          二、HAL 模塊介紹

          模塊代表打包的HAL實現(xiàn),存儲為共享庫(.so file)。該?hardware/libhardware/include/hardware/hardware.h頭文件定義一個結(jié)構(gòu)(hw_module_t),其表示一個模塊,并包含元數(shù)據(jù),如版本,名稱,以及該模塊的作者。Android使用此元數(shù)據(jù)來正確查找和加載HAL模塊。

          另外,該hw_module_t結(jié)構(gòu)包含指向另一個結(jié)構(gòu)的指針,該結(jié)構(gòu)包含指向hw_module_methods_t模塊的打開函數(shù)的指針。此開放功能用于啟動與HAL用作其抽象的硬件的通信。每個特定于硬件的HAL通常hw_module_t 使用該特定硬件的附加信息來擴(kuò)展通用結(jié)構(gòu)。例如,在攝像機(jī)HAL中,該camera_module_t結(jié)構(gòu)包含一個 hw_module_t結(jié)構(gòu)以及其他攝像機(jī)特定的函數(shù)指針:

          typedef struct camera_module {
          hw_module_t common;
          int* get_number_of_cameras)(void;
          int* get_camera_info)(int camera_id,struct camera_info * info);
          } camera_module_t;

          實現(xiàn)HAL并創(chuàng)建模塊struct時,必須將其命名為?HAL_MODULE_INFO_SYM。Nexus 9音頻HAL中的示例:

          struct audio_module HAL_MODULE_INFO_SYM = {
          .common = {
          .tag = HARDWARE_MODULE_TAG,
          .module_api_version = AUDIO_MODULE_API_VERSION_0_1,
          .hal_api_version = HARDWARE_HAL_API_VERSION,
          .id = AUDIO_HARDWARE_MODULE_ID,
          .name = "NVIDIA Tegra Audio HAL",
          .author = "The Android Open Source Project",
          .methods = &hal_module_methods,
          },
          };

          三、HAL 設(shè)備介紹

          設(shè)備會抽象您產(chǎn)品的硬件。例如,音頻模塊可以包含主要音頻設(shè)備,USB音頻設(shè)備或Bluetooth A2DP音頻設(shè)備。

          設(shè)備由該hw_device_t結(jié)構(gòu)表示。類似于模塊,每種類型的設(shè)備都定義了泛型的詳細(xì)版本, hw_device_t其中包含針對硬件特定功能的功能指針。例如,audio_hw_device_t結(jié)構(gòu)類型包含指向音頻設(shè)備操作的函數(shù)指針:

          struct audio_hw_device {
          struct hw_device_t common;

          / **
          *由音頻flinger用來枚舉受支持的設(shè)備
          *每個audio_hw_device實現(xiàn)。
          *
          *返回值是audio_devices_t的1個或多個值的位掩碼
          * /
          uint32_t* get_supported_devices)(const struct audio_hw_device * dev);
          ...
          };
          typedef struct audio_hw_device audio_hw_device_t;

          除了這些標(biāo)準(zhǔn)屬性,每個特定于硬件的HAL接口都可以定義更多自己的功能和要求。有關(guān)詳細(xì)信息,請參見HAL參考文檔以及每個HAL的單獨(dú)說明。

          四、構(gòu)建HAL模塊

          HAL實現(xiàn)內(nèi)置于模塊(.so)文件中,并在適當(dāng)時由Android動態(tài)鏈接。您可以通過Android.mk為每個HAL實現(xiàn)創(chuàng)建文件并指向源文件來構(gòu)建模塊。通常,必須以特定格式命名共享庫,以便可以找到并正確加載它們。各個模塊的命名方案略有不同,但遵循以下一般模式:.。

          友情推薦

          Android開發(fā)干貨分享

          至此,本篇已結(jié)束,如有不對的地方,歡迎您的建議與指正。同時期待您的關(guān)注,感謝您的閱讀,謝謝!

          分享到朋友圈吧,方便您使用時快速查找!

          瀏覽 81
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  色色网的五月天 | 波多野吉衣无码AV | 免费视频A∨ | 青青草视频网站 | 国产一区二区免费看 |