rk3368 Android9.0 HIDL调试记录

rk3368 Android9.0 HIDL调试记录

Platform: RK3368
OS: Android 9.0
Kernel: 4.4.194

文章目录

  • rk3368 Android9.0 HIDL调试记录
    • 1. 使用hidl-gen工具生成接口
      • 1.1 hidl-gen使用方法
      • 1.2 创建HIDL文件
      • 1.3 使用hidl-gen工具生成HIDL相关文件
    • 2. 修改代码
      • 2.1 创建service代码
      • 2.2 修改Android.bp添加编译service
      • 2.3 添加启动service的init.rc文件
      • 2.4 修改生成的代码
      • 2.5 添加本地C++测试代码
    • 3. 编译测试
      • 3.1 mmm单独模块编译:
      • 3.2 Native测试
      • 3.3 Android APP java测试

在Android 8.0以后,低层已重新编写以采用更加模块化的新架构。必须支持使用 HIDL 语言编写的 HAL,下面列出了一些例外情况。这些 HAL 可以是绑定式 HAL 也可以是直通式 HAL.

绑定式 HAL 以 HAL 接口定义语言 (HIDL) 或 Android 接口定义语言 (AIDL) 表示的 HAL。这些 HAL 取代了早期 Android 版本中使用的传统 HAL 和旧版 HAL。在绑定式 HAL 中,Android 框架和 HAL 之间通过 Binder 进程间通信 (IPC) 调用进行通信。所有在推出时即搭载了 Android 8.0 或更高版本的设备都必须只支持绑定式 HAL。

直通式 HAL 以 HIDL 封装的传统 HAL 或旧版 HAL。这些 HAL 封装了现有的 HAL,可在绑定模式和 Same-Process(直通)模式下使用。升级到 Android 8.0 的设备可以使用直通式 HAL。

此调试记录为绑定式 HAL;

1. 使用hidl-gen工具生成接口

1.1 hidl-gen使用方法

$ hidl-gen -h
usage: hidl-gen [-p ] -o  -L  [-O ] (-r )+ [-v] [-d ] FQNAME...

Process FQNAME, PACKAGE(.SUBPACKAGE)*@[0-9]+.[0-9]+(::TYPE)?, to create output.

         -h: Prints this menu.
         -L : The following options are available:
            check           : Parses the interface to see if valid but doesn't write any files.
            c++             : (internal) (deprecated) Generates C++ interface files for talking to HIDL interfaces.
            c++-headers     : (internal) Generates C++ headers for interface files for talking to HIDL interfaces.
            c++-sources     : (internal) Generates C++ sources for interface files for talking to HIDL interfaces.
            export-header   : Generates a header file from @export enumerations to help maintain legacy code.
            c++-impl        : Generates boilerplate implementation of a hidl interface in C++ (for convenience).
            c++-impl-headers: c++-impl but headers only
            c++-impl-sources: c++-impl but sources only
            c++-adapter     : Takes a x.(y+n) interface and mocks an x.y interface.
            c++-adapter-headers: c++-adapter but helper headers only
            c++-adapter-sources: c++-adapter but helper sources only
            c++-adapter-main: c++-adapter but the adapter binary source only
            java            : (internal) Generates Java library for talking to HIDL interfaces in Java.
            java-constants  : (internal) Like export-header but for Java (always created by -Lmakefile if @export exists).
            vts             : (internal) Generates vts proto files for use in vtsd.
            makefile        : (removed) Used to generate makefiles for -Ljava and -Ljava-constants.
            androidbp       : (internal) Generates Soong bp files for -Lc++-headers, -Lc++-sources, -Ljava, -Ljava-constants, and -Lc++-adapter.
            androidbp-impl  : Generates boilerplate bp files for implementation created with -Lc++-impl.
            hash            : Prints hashes of interface in `current.txt` format to standard out.
         -O : The owner of the module for -Landroidbp(-impl)?.
         -o : Location to output files.
         -p : Android build root, defaults to $ANDROID_BUILD_TOP or pwd.
         -r : E.g., android.hardware:hardware/interfaces.
         -v: verbose output.
         -d : location of depfile to write to.

1.2 创建HIDL文件

  1. 新建目录vendor/sample/hardware/interfaces/helloworld/1.0
  2. 创建文件: IHelloWorld.hal IHelloWorldCal

你可能感兴趣的:(android,HIDL,hidl-gen,android,rk3368,rockchip)