RK3568 安卓11 集成开源库的动态库到super

RK3568 安卓11 集成开源库的动态库到super.img

一、在hardware/rockchip/

1.创建编译

d3@d3-X99:~/rk3568_android_11_sdk$ ls hardware/rockchip/i2ctools2/
Android.bp.bak  Android.mk.bak  COPYING       eeprog  include  Makefile  README  tools
Android.mk      CHANGES         COPYING.LGPL  eeprom  lib      py-smbus  stub    version.h

2.Android.mk

LOCAL_PATH := $(call my-dir)

i2c_includes := $(LOCAL_PATH) $(LOCAL_PATH)/include

#libi2c-tools.so
include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := optional
LOCAL_C_INCLUDES += $(LOCAL_PATH) $(LOCAL_PATH)/$(KERNEL_DIR)/include
LOCAL_SRC_FILES := tools/i2cbusses.c tools/util.c
LOCAL_MODULE := libi2ctools2
LOCAL_PRELINK_MODULE := false
LOCAL_PROPRIETARY_MODULE := true
# LOCAL_MODULE_RELATIVE_PATH := 
include $(BUILD_SHARED_LIBRARY)

3..修改device/rockchip/common/device.mk

d3@d3-X99:~/rk3568_android_11_sdk/device/rockchip/common$ git diff  
diff --git a/device.mk b/device.mk
index 138363e..5f89117 100644
--- a/device.mk
+++ b/device.mk
@@ -607,6 +607,9 @@ else
 BUILD_IEP := false
 endif
 
+PRODUCT_PACKAGES += \
+    libi2ctools2
+
 # charge
 PRODUCT_PACKAGES += \
     charger \
d3@d3-X99:~/rk3568_android_11_sdk/device/rockchip/common$

device/rockchip/common/sepolicy/vendor/file_contexts 可以不用修改

d3@d3-X99:~/rk3568_android_11_sdk$ 
d3@d3-X99:~/rk3568_android_11_sdk$ grep -nr i2ctools device/                                   
device/rockchip/common/device.mk:611:    libi2ctools2
device/rockchip/common/sepolicy/vendor/file_contexts:160:#/vendor/lib(64)?/libi2ctools2.so                 u:object_r:same_process_hal_file:s0
d3@d3-X99:~/rk3568_android_11_sdk$

4.编译super.img

make -j72

5.确认结果

d3@d3-X99:~/rk3568_android_11_sdk$ find -name libi2ctools2.so                 
./out/target/product/rk3568_r/vendor/lib64/libi2ctools2.so
./out/target/product/rk3568_r/vendor/lib/libi2ctools2.so
./out/target/product/rk3568_r/obj/SHARED_LIBRARIES/libi2ctools2_intermediates/libi2ctools2.so
./out/target/product/rk3568_r/obj/SHARED_LIBRARIES/libi2ctools2_intermediates/LINKED/libi2ctools2.so
./out/target/product/rk3568_r/obj_arm/SHARED_LIBRARIES/libi2ctools2_intermediates/libi2ctools2.so
./out/target/product/rk3568_r/obj_arm/SHARED_LIBRARIES/libi2ctools2_intermediates/LINKED/libi2ctools2.so
./out/target/product/rk3568_r/symbols/vendor/lib64/libi2ctools2.so
./out/target/product/rk3568_r/symbols/vendor/lib/libi2ctools2.so
d3@d3-X99:~/rk3568_android_11_sdk$ 

库的文件夹名可以与库名不同,但是device/rockchip/common/device.mk与Android.mk里面的库名一定要相同才能编译出动态库。

device/rockchip/common/device.mk:611:    libi2ctools2
与
LOCAL_MODULE := libi2ctools2
一定要匹配。

二.在external/

d3@d3-X99:~/rk3568_android_11_sdk$ ls external/libmyyi2ctools
Android.bp.bak  Android.mk.bak  COPYING       eeprog  include  Makefile  README  tools
Android.mk      CHANGES         COPYING.LGPL  eeprom  lib      py-smbus  stub    version.h
d3@d3-X99:~/rk3568_android_11_sdk$

2.Android.mk

LOCAL_PATH := $(call my-dir)

i2c_includes := $(LOCAL_PATH) $(LOCAL_PATH)/include

# Base modules and settings for the system partition.
# 在build/make/target/product/base_system.mk
#PRODUCT_PACKAGES += libmyi2ctools
#libi2c-tools.so
include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := optional
LOCAL_C_INCLUDES += $(LOCAL_PATH) $(LOCAL_PATH)/$(KERNEL_DIR)/include
LOCAL_SRC_FILES := tools/i2cbusses.c tools/util.c
LOCAL_MODULE := libmyi2c-tools

LOCAL_PRELINK_MODULE := false

#安装在默认路径:/system/lib64/
#./out/target/product/rk3568_r/system/lib64/libmyi2c-tools.so
#./out/target/product/rk3568_r/system/lib/libmyi2c-tools.so

#/vendor/lib64/
#./out/target/product/rk3568_r/vendor/lib64/libmyi2c-tools.so
#./out/target/product/rk3568_r/vendor/lib/libmyi2c-tools.so
LOCAL_PROPRIETARY_MODULE := true
#指定相对路径安装
# LOCAL_MODULE_RELATIVE_PATH := 
include $(BUILD_SHARED_LIBRARY)

3.修改build/make/target/product/base_system.mk

d3@d3-X99:~/rk3568_android_11_sdk/build/make/target/product$ git diff
diff --git a/target/product/base_system.mk b/target/product/base_system.mk
index 4569bce..6f70dbb 100644
--- a/target/product/base_system.mk
+++ b/target/product/base_system.mk
@@ -201,6 +201,7 @@ PRODUCT_PACKAGES += \
     lpdump \
     lshal \
     mdnsd \
+    libmyi2c-tools\
     mediacodec.policy \
     mediaextractor \
     mediametrics \
d3@d3-X99:~/rk3568_android_11_sdk/build/make/target/product$

4.编译super.img

make -j72

5.确认结果

d3@d3-X99:~/rk3568_android_11_sdk$ find -name libmyi2c-tools.so
./out/target/product/rk3568_r/vendor/lib64/libmyi2c-tools.so
./out/target/product/rk3568_r/vendor/lib/libmyi2c-tools.so
./out/target/product/rk3568_r/obj/SHARED_LIBRARIES/libmyi2c-tools_intermediates/libmyi2c-tools.so
./out/target/product/rk3568_r/obj/SHARED_LIBRARIES/libmyi2c-tools_intermediates/LINKED/libmyi2c-tools.so
./out/target/product/rk3568_r/obj_arm/SHARED_LIBRARIES/libmyi2c-tools_intermediates/libmyi2c-tools.so
./out/target/product/rk3568_r/obj_arm/SHARED_LIBRARIES/libmyi2c-tools_intermediates/LINKED/libmyi2c-tools.so
./out/target/product/rk3568_r/symbols/vendor/lib64/libmyi2c-tools.so
./out/target/product/rk3568_r/symbols/vendor/lib/libmyi2c-tools.so
d3@d3-X99:~/rk3568_android_11_sdk$ 

同理:build/make/target/product/base_system.mk的库名和Android.mk的库名要相同,才能编译出动态库。

build/make/target/product/base_system.mk:205:    libmyi2c-tools\
与
LOCAL_MODULE := libmyi2c-tools

参考学习:

Android.bp - 码农教程 - http://www.manongjc.com/detail/42-jbdshchstzkkeis.html

Android.bp学习笔记 - Hello-World3 - 博客园 - https://www.cnblogs.com/hellokitty2/p/10595618.html

Android.bp解析与使用看这篇就够了 - 知乎 - https://zhuanlan.zhihu.com/p/680171333

【Android】Automotive开发之BP文件_platform_apis-CSDN博客 - https://blog.csdn.net/qq_23825391/article/details/125143390

Android 编译的配置文件:android.mk 和android.bp_android系统定制之android.mk和android.bp语法详解(精通版)-CSDN博客 - https://blog.csdn.net/z755924843/article/details/134551207

Android Build 系统-CSDN博客 - https://blog.csdn.net/weixin_44826221/article/details/109801253

END!

posted @ 2024-04-16 17:49  Yaction  阅读(65)  评论(0)    收藏  举报