ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

将HIDL服务添加到系统镜像(七)

2022-01-19 21:02:37  阅读:231  来源: 互联网

标签:flagstaff product x86 HIDL aosp 添加 64 镜像 target


1.添加自定义makefile文件到产品

  前面几章介绍的方法一般用于开发阶段,在功能开发完成后,则需要集成到系统镜像中去。我们使用的产品则是aosp_x86_64

TARGET_PRODUCT=aosp_x86_64

  所以需要将自定义的makefile文件添加到产品的配置makefile中去,

--- a/target/product/aosp_x86_64.mk
+++ b/target/product/aosp_x86_64.mk
@@ -63,6 +63,7 @@ $(call inherit-product, $(SRC_TARGET_DIR)/board/generic_x86_64/device.mk)
 ifeq (aosp_x86_64,$(TARGET_PRODUCT))
 $(call inherit-product, $(SRC_TARGET_DIR)/product/gsi_release.mk)
 endif
+$(call inherit-product, test/flagstaffTest/device.mk)

  aosp_x86_64的配置位置比较特别并非位于device下,一般产品的配置文件多会被放置到device下

flagstaff@flagstaff-pc:~/aosp_r.lns$ tree  -L 1 device/google/cuttlefish
device/google/cuttlefish
├── Android.bp
├── Android.mk
├── AndroidProducts.mk
├── CleanSpec.mk
├── common
├── default-permissions.xml
...

  此处的Android.mk文件其实和每个模块的Android.bp/mk也是一样的,用来描述对应设备的构成以及如何构成,一般产品的顶层makefile了,其内部再会包含各个模块的makefile

flagstaff@flagstaff-pc:~/aosp_r.lns$ cat device/google/cuttlefish/Android.mk 
ifneq ($(filter vsoc_arm64 vsoc_x86 vsoc_x86_64, $(TARGET_BOARD_PLATFORM)),)
LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)
include $(LOCAL_PATH)/fetcher.mk

include $(CLEAR_VARS)
include $(LOCAL_PATH)/host_package.mk

include $(call first-makefiles-under,$(LOCAL_PATH))
endif

  可见只有在 TARGET_BOARD_PLATFORM 中包含字段vsoc_arm64 vsoc_x86 vsoc_x86_64的时候该模块才会被包含。
  其中AndroidProduct.mk会包含lunch时供选择的产品名称以及其对应的makefile路径

flagstaff@flagstaff-pc:~/aosp_r.lns$ cat device/google/cuttlefish/AndroidProducts.mk 
PRODUCT_MAKEFILES := \
	aosp_cf_arm64_auto:$(LOCAL_DIR)/vsoc_arm64/auto/aosp_cf.mk \
    ...

COMMON_LUNCH_CHOICES := \
	aosp_cf_arm64_auto-userdebug \
    ...

2.添加 hidl service

//file:test/flagstaffTest/device.mk
PRODUCT_PACKAGES += \
	flagstaff.hardware.custom_hardware@1.0-service

  名字被添加到PRODUCT_PACKAGES变量中的模块,在整编译的时候会被包含到系统镜像中去。模块名字则来自于对应模块的name字段

flagstaff@flagstaff-pc:~/aosp_r.lns$ cat test/flagstaffTest/hardware/interfaces/custom_hardware/1.0/default/Android.bp 
cc_binary {
    name: "flagstaff.hardware.custom_hardware@1.0-service",
    ...
    vendor: true,
}

3.编译

~/aosp_r.lns$ source build/envsetup.sh
~/aosp_r.lns$ lunch 30
~/aosp_r.lns$ make

  待编译好后,模块内容则会被包含在vendor.img中,因为hidl service的bp文件中指定了放置到vendor中去。

flagstaff@flagstaff-pc:~/aosp_r.lns$ ls out/target/product/generic_x86_64/*.img
out/target/product/generic_x86_64/cache.img
out/target/product/generic_x86_64/dtb.img
out/target/product/generic_x86_64/encryptionkey.img
out/target/product/generic_x86_64/ramdisk.img
out/target/product/generic_x86_64/super.img
out/target/product/generic_x86_64/system.img
out/target/product/generic_x86_64/userdata.img
out/target/product/generic_x86_64/vbmeta.img
out/target/product/generic_x86_64/vendor_boot.img
out/target/product/generic_x86_64/vendor.img

  实际上system.img/vendor.img都被打包进了surper.img了。
  当然在使用镜像前,也可以确认下hidlservice是否被正确包含,此时看下vendor目录即可,其内容和vendor.img是一致的,当然前提是全编译前删除了vendor目录。

flagstaff@flagstaff-pc:~/aosp_r.lns$ find  out/target/product/generic_x86_64/vendor -name "*flagstaff*"
out/target/product/generic_x86_64/vendor/etc/vintf/manifest/flagstaff.hardware.custom_hardware@1.0.xml
out/target/product/generic_x86_64/vendor/etc/init/flagstaff.hardware.custom_hardware@1.0-service.rc
out/target/product/generic_x86_64/vendor/bin/hw/flagstaff.hardware.custom_hardware@1.0-service
out/target/product/generic_x86_64/vendor/lib64/flagstaff.hardware.custom_hardware@1.0.so

  另外如果有问题,欢迎留言或者email(836190520@qq.com)我,技术升级在于交流~~

标签:flagstaff,product,x86,HIDL,aosp,添加,64,镜像,target
来源: https://blog.csdn.net/u014787262/article/details/122589710

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有