国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Android 應(yīng)用層 到 HAL 層

這篇具有很好參考價(jià)值的文章主要介紹了Android 應(yīng)用層 到 HAL 層。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

1、相關(guān)知識(shí)點(diǎn)

1.1 概要

如下 AOSP軟件堆棧架構(gòu)圖 主要跨兩個(gè)階段 Android Apps ==> Android Framework ==> HAL,這種IPC跨進(jìn)程通信Android中必須要了解的相關(guān)知識(shí)點(diǎn):1》Binder IPC通信機(jī)制;2》JNI調(diào)用;3》AIDL、HIDL接口定義語(yǔ)言

1》Binder IPC通信機(jī)制

IPC 域 說(shuō)明
/dev/binder 框架/應(yīng)用進(jìn)程之間的 IPC,使用 AIDL 接口
/dev/hwbinder 框架/供應(yīng)商進(jìn)程之間的 IPC,使用 HIDL 接口
供應(yīng)商進(jìn)程之間的 IPC,使用 HIDL 接口
/dev/vndbinder 供應(yīng)商/供應(yīng)商進(jìn)程之間的 IPC,使用 AIDL 接口

2》JNI調(diào)用
就是Java與C/C++互相調(diào)用,這不是Android系統(tǒng)所獨(dú)有的,而是Java所有。Android表現(xiàn):frameworks/baseframeworks/Native,以及其他SO庫(kù)調(diào)用。

3》AIDL、HIDL接口定義語(yǔ)言:是Android中binder機(jī)制的具體實(shí)現(xiàn),相應(yīng)的binder域/dev/binder、/dev/hwbinder/dev/vndbinder;Android規(guī)范的接口定義語(yǔ)言,按照規(guī)范aidl/hidl文件自動(dòng)生成相應(yīng)代碼文件。

Android 接口定義語(yǔ)言 相關(guān)Blog client端 / server端
AIDL Android 接口定義語(yǔ)言 (AIDL) 客戶端獲取proxy:asInterface(android.os.IBinder obj)
服務(wù)端實(shí)現(xiàn)Stub:class Stub extends android.os.Binder
(C++中客戶端對(duì)應(yīng)Bp端,服務(wù)端對(duì)應(yīng)Bn端)
HIDL Android 接口定義語(yǔ)言 (HIDL) hal 安卓,Android,android,HAL,Binder,JNI

hal 安卓,Android,android,HAL,Binder,JNI

1.2 參考

1》Binder IPC通信機(jī)制

序號(hào) 文章名 概述
0 為什么 Android 要采用 Binder 作為 IPC 機(jī)制? 【Android,在爭(zhēng)議中逃離 Linux 內(nèi)核的 GPL 約束】
0 使用 Binder IPC 多個(gè) Binder 域:/dev/binder、/dev/hwbinder/dev/vndbinder
1 Binder系列1-Binder Driver /dev/binder運(yùn)行在Linux kernel
2 Binder系列2-ServiceManager SM啟動(dòng),添加/獲取Service
3 Binder系列3-framework層 Zygote啟動(dòng)時(shí)AndroidRuntime::startReg中register_jni_procs(),JNI調(diào)用到Native
4 Binder 域 關(guān)注/dev/vndbinder與/dev/binder共用一套libbinder,defaultServiceManager()獲取前需要切換
5 Binder相關(guān)問(wèn)題

2》JNI調(diào)用
Android JNI原理、Java本地調(diào)用(JNI)

3》AIDL、HIDL接口定義語(yǔ)言

Android 接口定義語(yǔ)言 相關(guān)Blog
AIDL Android 接口定義語(yǔ)言 (AIDL)
HIDL Android 接口定義語(yǔ)言 (HIDL)

Android 8.0 重新設(shè)計(jì)了 Android 操作系統(tǒng)框架(在一個(gè)名為“Treble”的項(xiàng)目中),以便讓制造商能夠以更低的成本更輕松、更快速地將設(shè)備更新到新版 Android 系統(tǒng)。在這種新架構(gòu)中,HAL 接口定義語(yǔ)言(HIDL,發(fā)音為“hide-l”)指定了 HAL 和其用戶之間的接口,讓用戶無(wú)需重新構(gòu)建 HAL,就能替換 Android 框架。在 Android 10 中,HIDL 功能已整合到 AIDL 中。此后,HIDL 就被廢棄了,并且僅供尚未轉(zhuǎn)換為 AIDL 的子系統(tǒng)使用。

在 Android 11 中,還支持使用 AIDL 編寫(xiě)的 HAL。所有 AIDL HAL 都是綁定的。
- 綁定的 HAL 。 HAL 以 HAL 接口定義語(yǔ)言 (HIDL) 或 Android 接口定義語(yǔ)言 (AIDL) 表示。這些 HAL 取代了早期 Android 版本中使用的傳統(tǒng) HAL 和遺留 HAL。在 Binderized HAL 中,Android 框架和 HAL 使用 Binder 進(jìn)程間通信 (IPC) 調(diào)用相互通信。所有搭載 Android 8.0 或更高版本的設(shè)備必須僅支持綁定化 HAL。
-直通 HAL 。 HIDL 包裝的傳統(tǒng) HAL 或舊版 HAL這些 HAL 包裝現(xiàn)有的 HAL,并且可以在綁定和相同進(jìn)程(直通)模式下為 HAL 提供服務(wù)。升級(jí)到 Android 8.0 的設(shè)備可以使用直通 HAL。

2、拿SensorService舉例

2.1 Android Apps ==> Android Framework階段

Android Apps ==> Android Framework階段通過(guò)Android API調(diào)用,就是App編程調(diào)用的Android SDK。


Activity中調(diào)用
mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
獲取加速度傳感器Sensor.TYPE_ACCELEROMETER。


更多查看APP獲取Sensor對(duì)象-Android12;參考代碼如下

public class SensorActivity extends Activity implements SensorEventListener {
    private final SensorManager mSensorManager;
    private final Sensor mAccelerometer;

    public SensorActivity() {
        mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
        mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
    }

    protected void onResume() {
        super.onResume();
        mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);
    }

    protected void onPause() {
        super.onPause();
        mSensorManager.unregisterListener(this);
    }

    public void onAccuracyChanged(Sensor sensor, int accuracy) {
    }

    public void onSensorChanged(SensorEvent event) {
    }
}

2.2 Android Framework內(nèi)部階段

2.2.1 frameworks/base

Android Framework內(nèi)部階段:通過(guò)JNI調(diào)用Native層,如Android JNI原理、Java本地調(diào)用(JNI)中javac -h ./ xxx.java (javah是1.8及以前版本)生成相應(yīng)xxxNative.h文件,

SersorManager.java對(duì)應(yīng)相關(guān)代碼:(在SystemServer啟動(dòng)時(shí)System.loadLibrary("android_servers");加載so庫(kù)
frameworks/base/core/java/android/hardware/SensorManager.java
frameworks/base/core/java/android/hardware/SystemSensorManager.java
frameworks/base/core/jni/android_hardware_SensorManager.cpp
libnativehelper/include/nativehelper/JNIHelp.h
libnativehelper/include_jni/jni.h
frameworks/base/core/jni/core_jni_helpers.h

private static native boolean nativeGetSensorAtIndex(long nativeInstance,
		Sensor sensor, int index);

hal 安卓,Android,android,HAL,Binder,JNI

ssize_t count = mgr->getSensorList(&sensorList);

hal 安卓,Android,android,HAL,Binder,JNI

2.2.2 frameworks/native

通過(guò)binder IPC跨進(jìn)程通信機(jī)制defaultServiceManager()獲取到對(duì)應(yīng)服務(wù)調(diào)用。如調(diào)用到服務(wù)frameworks/native/services/sensorservice

SersorManager.cpp對(duì)應(yīng)相關(guān)代碼:(SensorService.cpp 繼承BinderService、BnSensorServer、Thread,初始化時(shí)添加到defaultServiceManager()中,更多查看SensorService啟動(dòng)-Android12
frameworks/native/libs/sensor/SensorManager.cpp
frameworks/native/libs/binder/include/binder/IServiceManager.h
frameworks/native/libs/binder/IServiceManager.cpp
frameworks/native/services/sensorservice/SensorService.cpp


這里的Bp端Bn端(BpSensorServer/BnSensorServer)手動(dòng)擼代碼,不是自動(dòng)生成,所以這里關(guān)注transact()/onTransact()
frameworks/native/libs/sensor/include/sensor/ISensorServer.h
frameworks/native/libs/sensor/ISensorServer.cpp

NativeSensorService::NativeSensorService(JNIEnv* env, jobject listener)
      : mProximityActiveListenerDelegate(new ProximityActiveListenerDelegate(env, listener)) {
    if (base::GetBoolProperty("system_init.startsensorservice", true)) {
        sp<IServiceManager> sm(defaultServiceManager());
        mService = new SensorService();
        sm->addService(String16(SensorService::getServiceName()), mService,
                       false /* allowIsolated */, IServiceManager::DUMP_FLAG_PRIORITY_CRITICAL);
    }
}
Vector<Sensor> SensorService::getSensorList(const String16& opPackageName) {
    char value[PROPERTY_VALUE_MAX];
    property_get("debug.sensors", value, "0");
    const Vector<Sensor>& initialSensorList = (atoi(value)) ?
            mSensors.getUserDebugSensors() : mSensors.getUserSensors();
    Vector<Sensor> accessibleSensorList;

    bool isCapped = isRateCappedBasedOnPermission(opPackageName);
    for (size_t i = 0; i < initialSensorList.size(); i++) {
        Sensor sensor = initialSensorList[i];
        if (isCapped && isSensorInCappedSet(sensor.getType())) {
            sensor.capMinDelayMicros(SENSOR_SERVICE_CAPPED_SAMPLING_PERIOD_NS / 1000);
            sensor.capHighestDirectReportRateLevel(SENSOR_SERVICE_CAPPED_SAMPLING_RATE_LEVEL);
        }
        accessibleSensorList.add(sensor);
    }
    makeUuidsIntoIdsForSensorList(accessibleSensorList);
    return accessibleSensorList;
}

SensorService服務(wù) 通過(guò)frameworks/native/services/sensorservice/SensorService.cpp獲取

SensorDevice& dev(SensorDevice::getInstance());
ssize_t count = dev.getSensorList(&list);

SensorDevice.cpp連接HAL層,如connectHidlServiceV2_1()

SensorDevice::HalConnectionStatus SensorDevice::connectHidlServiceV2_1() {
   HalConnectionStatus connectionStatus = HalConnectionStatus::UNKNOWN;
   sp<V2_1::ISensors> sensors = V2_1::ISensors::getService();

   if (sensors == nullptr) {
       connectionStatus = HalConnectionStatus::DOES_NOT_EXIST;
   } else {
       mSensors = new ISensorsWrapperV2_1(sensors);
       connectionStatus = initializeHidlServiceV2_X();
   }

   return connectionStatus;
}

2.3 Android Framework ==> HAL 階段

通過(guò)HIDL (Android 接口定義語(yǔ)言 (HIDL))文件hidl-gen 編譯器自動(dòng)生成,如繼承實(shí)現(xiàn)#include <android/hardware/sensors/2.1/ISensors.h>
了解實(shí)例參考 HAL服務(wù)整編錯(cuò)誤處理

hal 安卓,Android,android,HAL,Binder,JNIhal 安卓,Android,android,HAL,Binder,JNI

2.3.1 舊版 HAL

hardware/libhardware/include/hardware/sensors.h
hardware/libhardware/modules/sensors/dynamic_sensor/sensors.cpp

舊版 HAL:HAL 可定義一個(gè)標(biāo)準(zhǔn)接口以供硬件供應(yīng)商實(shí)現(xiàn),這可讓 Android 忽略較低級(jí)別的驅(qū)動(dòng)程序?qū)崿F(xiàn)。借助 HAL,您可以順利實(shí)現(xiàn)相關(guān)功能,而不會(huì)影響或更改更高級(jí)別的系統(tǒng)。本頁(yè)面介紹了自 Android 8.0 開(kāi)始已不再支持的舊版架構(gòu)。對(duì)于 Android 8.0 及更高版本,請(qǐng)參閱 HAL 概覽。

HAL 模塊代表打包的 HAL 實(shí)現(xiàn),這種實(shí)現(xiàn)存儲(chǔ)為共享庫(kù) (.so file)。hardware/libhardware/include/hardware/hardware.h 頭文件可定義一個(gè)代表模塊的結(jié)構(gòu)體 (hw_module_t),其中包含模塊的版本、名稱和作者等元數(shù)據(jù)。Android 會(huì)根據(jù)這些元數(shù)據(jù)來(lái)找到并正確加載 HAL 模塊。

另外,hw_module_t 結(jié)構(gòu)體還包含指向另一個(gè)結(jié)構(gòu)體 hw_module_methods_t 的指針,后面這個(gè)結(jié)構(gòu)體包含指向相應(yīng)模塊的 open 函數(shù)的指針。此 open 函數(shù)用于與相關(guān)硬件(此 HAL 是其抽象形式)建立通信。每個(gè)硬件專用 HAL 通常都會(huì)使用該特定硬件的附加信息來(lái)擴(kuò)展通用的 hw_module_t 結(jié)構(gòu)體。

實(shí)現(xiàn) HAL 并創(chuàng)建模塊結(jié)構(gòu)體時(shí),您必須將其命名為 HAL_MODULE_INFO_SYM。

struct sensors_module_t HAL_MODULE_INFO_SYM = {
   .common = {
           .tag = HARDWARE_MODULE_TAG,
           .version_major = 1,
           .version_minor = 0,
           .id = SENSORS_HARDWARE_MODULE_ID,
           .name = "Google Dynamic Sensor Manager",
           .author = "Google",
           .methods = &sensors_module_methods,
           .dso  = NULL,
           .reserved = {0},
   },
   .get_sensors_list = get_sensors_list,
   .set_operation_mode = set_operation_mode,
};

hal 安卓,Android,android,HAL,Binder,JNI文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-695745.html

到了這里,關(guān)于Android 應(yīng)用層 到 HAL 層的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 安卓應(yīng)用層抓包通殺腳本r0capture

    安卓應(yīng)用層抓包通殺腳本r0capture

    安卓應(yīng)用層抓包通殺腳本r0capture r0ysue: https://github.com/r0ysue/r0capture Spawn 模式: python r0capture.py -U -f 包名 僅限安卓平臺(tái),測(cè)試安卓7、8、9、10、11 可用 ; 無(wú)視所有證書(shū)校驗(yàn)或綁定,不用考慮任何證書(shū)的事情; 通殺TCP/IP四層模型中的應(yīng)用層中的全部協(xié)議; 通殺協(xié)議包括:Http,

    2024年02月12日
    瀏覽(18)
  • Android相機(jī)-HAL-Rockchip-hal3

    Android相機(jī)-HAL-Rockchip-hal3

    對(duì)于Android相機(jī)的 HAL層而言 對(duì)上實(shí)現(xiàn)一套Framework的API接口,對(duì)下通過(guò)V4L2框架實(shí)現(xiàn)與kernel的交互。 不同的平臺(tái)會(huì)有不同的實(shí)現(xiàn)方案。主要是對(duì)Android HAL3的接口的實(shí)現(xiàn)??纯磖ockchip是怎么支持hal3的? hardware/rockchip/camera/ hardware/rockchip/camera_engine_rkisp/ ? 3A控制則是通過(guò)control?loop接

    2024年02月11日
    瀏覽(19)
  • Android10.0 hal層添加自定義hal模塊功能實(shí)現(xiàn)

    在10.0的系統(tǒng)rom定制化開(kāi)發(fā)中,在 對(duì)hal模塊進(jìn)行開(kāi)發(fā)時(shí),需要通過(guò)添加自定義的hal模塊來(lái)實(shí)現(xiàn)某些 功能時(shí),就需要添加hal模塊的相關(guān)功能,接下來(lái)就來(lái)實(shí)現(xiàn)一個(gè)案例來(lái)供參考 HAL是硬件抽象層,它向下屏蔽了硬件的實(shí)現(xiàn)細(xì)節(jié),向上提供了抽象接口, HAL是底層硬件和上層框架直

    2024年02月15日
    瀏覽(24)
  • Android HAL層淺析

    Android HAL層淺析

    1)、HAL層是上層應(yīng)用對(duì)底層硬件操作屏蔽的一個(gè)軟件層次,就是上層應(yīng)用不必關(guān)心底層硬件具體是如何工作的,只需要調(diào)用底層提供的統(tǒng)一接口即可。HAL層對(duì)接具體的硬件bsp接口,比如視頻接口、收音機(jī)接口、網(wǎng)絡(luò)接口、spi接口等。 HAL層就是為了把操作系統(tǒng)和硬件解耦。 Li

    2023年04月18日
    瀏覽(16)
  • Android HAL深入探索(5): 調(diào)試HAL報(bào)錯(cuò)與解決方案

    Android HAL深入探索(5): 調(diào)試HAL報(bào)錯(cuò)與解決方案

    在我們學(xué)習(xí)Android HAL開(kāi)發(fā)時(shí),可能會(huì)遇到一些編譯或運(yùn)行時(shí)的錯(cuò)誤,這些錯(cuò)誤可能會(huì)影響探索腳本。為了有效地定位和解決這些錯(cuò)誤,需要了解Android HAL的架構(gòu)、工具和方法。本文將介紹一些我自己在學(xué)習(xí)Android HAL的調(diào)試技巧和常見(jiàn)錯(cuò)誤的解決方案,希望能幫助到大家。 網(wǎng)上其

    2024年01月24日
    瀏覽(19)
  • Android Audio HAL 服務(wù)

    Android Audio HAL 服務(wù)

    在 Android 系統(tǒng)中,Audio HAL 服務(wù)用于管理對(duì)音頻硬件的訪問(wèn),AudioFlinger 通過(guò) Audio HAL 服務(wù)訪問(wèn)音頻硬件。這里以 Android Automotive (AAOS) 版模擬器為例,來(lái)看 Audio HAL 服務(wù)的設(shè)計(jì)、實(shí)現(xiàn)和訪問(wèn),代碼分析基于 android-12.1.0_r27 進(jìn)行。 AAOS 版模擬器的 Audio HAL 服務(wù)的實(shí)現(xiàn)位于 device/generi

    2024年02月15日
    瀏覽(21)
  • Android相機(jī)-HAL子系統(tǒng)

    Android相機(jī)-HAL子系統(tǒng)

    應(yīng)用框架要通過(guò)拍照預(yù)覽攝像獲得照片或者視頻,就需要向相機(jī)子系統(tǒng)發(fā)出請(qǐng)求, 一個(gè)請(qǐng)求對(duì)應(yīng)一組結(jié)果 一次可發(fā)起多個(gè)請(qǐng)求,并且提交請(qǐng)求是非阻塞的,始終按照接收的順序以隊(duì)列的形式先進(jìn)先出地進(jìn)行順序處理 一個(gè)請(qǐng)求包含了拍攝和拍照配置的所有信息,以及處理這些的

    2024年02月11日
    瀏覽(17)
  • Android圖形-Hardware Composer HAL

    Android圖形-Hardware Composer HAL

    目錄 一、引言 二、概覽 三、實(shí)現(xiàn)HWC 3.1 為什么是HWC? 3.2 HWC的支持需求 3.3 HWC的實(shí)現(xiàn)思路 3.4 HWC的基元 3.5 HIDL接口 3.6 函數(shù)指針 3.7 圖層和屏幕句柄 3.8 屏幕合成操作 3.9 多個(gè)屏幕 3.10 虛擬屏幕合成 3.10.1 模式 3.10.2 輸出格式 3.11 同步fence 3.12 熱插拔處理 3.12.1 概念理解 3.12.2 更新

    2024年02月09日
    瀏覽(16)
  • Android HAL - hidl-gen

    ????????hidl-gen 編譯器會(huì)將 .hal 文件編譯成一組 .h 和 .cpp 文件,這些 自動(dòng)生成的文件用于編譯客戶端 / 服務(wù)端實(shí)現(xiàn)鏈接到的共享庫(kù),同 時(shí)也可以生成 Android.bp 編譯文件。 ????????HIDL 軟件包中自動(dòng)生成的文件會(huì)關(guān)聯(lián)到與該軟件包同名的單個(gè) 共享庫(kù)(例如 android.hardwa

    2024年02月09日
    瀏覽(19)
  • 【計(jì)算機(jī)網(wǎng)絡(luò)概述】第二章:應(yīng)用層:2.1 應(yīng)用層原理

    【計(jì)算機(jī)網(wǎng)絡(luò)概述】第二章:應(yīng)用層:2.1 應(yīng)用層原理

    客戶端/服務(wù)器模式 peer to peer 模式(對(duì)等模式) ???????在第一章的內(nèi)容中,我們學(xué)習(xí)了計(jì)算機(jī)網(wǎng)絡(luò)的大體輪廓,因?yàn)樵谟?jì)算機(jī)網(wǎng)絡(luò)中,我們需要記住非常多的專有名詞,所以在第一章中,我們需要進(jìn)行非常多的記憶。第一章還是非常重要的。 ???????比如,我們所使用

    2024年01月18日
    瀏覽(57)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包