发布时间:2025-06-24 18:53:58  作者:北方职教升学中心  阅读量:763


本文以rk3588 android13平台调试移远EC20模块所遇到的问题做出记录。ifconfig查看相应的网卡也没有自动获取到IP。
在这里插入图片描述
将系统下vendor/libril.so替换为移远提供的libril.so,如果出现previously defined at build/make/core/base_rules.mk等报错可以查找第4点添加对应的宏做出修改
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/35853da7ae604dea98141f83eff71c20.png
d.查找系统所支持的依赖库是否存在

find -name android.hardware.radio* 2>/dev/null
看看如下的依赖库是否存在
libhidlbase.so
libhwbinder.so
android.hardware.radio.deprecated@1.0.so
android.hardware.radio@1.3.so
android.hardware.radio@1.4.so
android.hardware.radio@1.5.so 此文件从安卓11开始才有
android.hardware.radio@1.6.so 此文件从安卓12开始才有
android.hardware.radio.config@1.0.so
android,hardware.radio.config@1.1.so
android,hardware.radio.config@1.2.so


Soc: rk3588
Os: android13

1.sdk支持4g modem功能

打开device/rockchip/common下BoardConfig.mkBOARD_HAS_RK_4G_MODEM ?=true

2.修改ro.boot.noril为false

因为vendor/rockchip/common/phone/phone.mk和device/rockchip/common/modules/4g_modem.mk都有定义将ro.boot.noril属性修改为false

3.修改dhcpcd和rk所支持的librk-ril.so

device/rockchip/common/4g_modem路径下存放4g模块相关的ril库但是拿到sdk中device/rockchip/common/modules/4g_modem.mk定义了dhcpcd和librk-ril.so的拷贝因为我们拿到的是EC20模块所以将rk提供的ril库注释掉,改动如下所示:--- a/modules/4g_modem.mk+++ b/modules/4g_modem.mk@@ -17,15 +17,29 @@PRODUCT_PACKAGES += \     CarrierDefaultApp \     CarrierConfig \+    TelephonyProvider \+    TeleService \+    Telecom \     rild \-    librk-ril \     dhcpcdifeq ($(strip $(TARGET_ARCH)), arm64)-PRODUCT_PROPERTY_OVERRIDES += \+#PRODUCT_PROPERTY_OVERRIDES += \     vendor.rild.libpath=/vendor/lib64/librk-ril.soPRODUCT_COPY_FILES += \-    $(LOCAL_PATH)/4g_modem/bin64/dhcpcd:$(TARGET_COPY_OUT_VENDOR)/bin/dhcpcd \-    $(LOCAL_PATH)/4g_modem/lib64/librk-ril.so:$(TARGET_COPY_OUT_VENDOR)/lib64/librk-ril.so+    $(LOCAL_PATH)/../4g_modem/bin64/dhcpcd:$(TARGET_COPY_OUT_VENDOR)/bin/dhcpcd \+    #$(LOCAL_PATH)/../4g_modem/lib64/libril.so:$(TARGET_COPY_OUT_VENDOR)/lib64/libril.soelse-PRODUCT_PROPERTY_OVERRIDES += \+#PRODUCT_PROPERTY_OVERRIDES += \     vendor.rild.libpath=/vendor/lib/librk-ril.soPRODUCT_COPY_FILES += \-    $(LOCAL_PATH)/4g_modem/bin32/dhcpcd:$(TARGET_COPY_OUT_VENDOR)/bin/dhcpcd \-    $(LOCAL_PATH)/4g_modem/lib32/librk-ril.so:$(TARGET_COPY_OUT_VENDOR)/lib/librk-ril.so+    $(LOCAL_PATH)/../4g_modem/bin32/dhcpcd:$(TARGET_COPY_OUT_VENDOR)/bin/dhcpcd \+    #$(LOCAL_PATH)/../4g_modem/lib32/libril.so:$(TARGET_COPY_OUT_VENDOR)/lib/libril.so

4.增加EC20模块lib库并编译进系统

我们拿到移远所提供的ril库等文件之后,可以在device/rockchip/rk3588/rk3588_box下面的.mk文件做以下修改:如rk3588_box.mk+BOARD_HAVE_VENDOR_RIL := true+#$(warning zhuhua BUILD_BROKEN_ELF_PREBUILT_PRODUCT_COPY_FILES : $(BUILD_BROKEN_ELF_PREBUILT_PRODUCT_COPY_FILES))+PRODUCT_COPY_FILES += \+       device/rockchip/common/4g_modem/EC20/ip-down:system/etc/ppp/ip-down \+       device/rockchip/common/4g_modem/EC20/ip-up:system/etc/ppp/ip-up \+       device/rockchip/common/4g_modem/EC20/chat:system/bin/chat \+       device/rockchip/common/4g_modem/EC20/apns-full-conf.xml:system/etc/apns-conf.xml \+       device/rockchip/common/4g_modem/EC20/ql-ril.conf:system/etc/ql-ril.conf \+       device/rockchip/common/4g_modem/EC20/ql-ril.conf:vendor/etc/ql-ril.conf \+       device/rockchip/common/4g_modem/EC20/lib/libreference-EC20-ril.so:vendor/lib/libreference-EC20-ril.so \+       device/rockchip/common/4g_modem/EC20/lib64/libreference-EC20-ril.so:vendor/lib64/libreference-EC20-ril.so \+       device/rockchip/common/4g_modem/EC20/lib64/libril.so:vendor/lib/libril.so \+       device/rockchip/common/4g_modem/EC20/lib64/libril.so:vendor/lib64/libril.so如果copy失败的话可以在同级目录下Boardconfig.mk做出以下修改+BUILD_BROKEN_ELF_PREBUILT_PRODUCT_COPY_FILES :=true+BUILD_BROKEN_DUP_RULES := true

5.配置4g相关的hidl

根据kernel的版本来选择compatibility_matrix.*.xml的文件,android13选择compatibility_matrix.7.xml做出改动如下:修改android13所支持的so库:PRODUCT_PACKAGES += \-    android.hardware.radio@1.2-radio-service \-    android.hardware.radio.config@1.0-service+    android.hardware.secure_element@1.0 \+    android.hardware.secure_element@1.1 \+    android.hardware.secure_element@1.2 \+    android.hardware.secure_element@1.0.vendor \+    android.hardware.secure_element@1.1.vendor \+    android.hardware.secure_element@1.2.vendor+PRODUCT_PACKAGES += \+    android.hardware.radio@1.5-radio-service \+    android.hardware.radio.config@1.2-service \+    android.hardware.radio.config@1.0-service \+    android.hardware.radio.config@1.0.vendor \+    android.hardware.radio.config@1.2.vendor \+    android.hardware.radio@1.5.vendor \+    libhwbinder.vendor修改4g_modem目录下的manifest.xml--- a/4g_modem/manifest.xml+++ b/4g_modem/manifest.xml@@ -2,8 +2,7 @@     <hal format="hidl">         <name>android.hardware.radio</name>         <transport>hwbinder</transport>-        <fqname>@1.1::IRadio/slot1</fqname>-        <fqname>@1.1::IRadio/slot2</fqname>+        <fqname>@1.5::IRadio/slot1</fqname>         <fqname>@1.2::ISap/slot1</fqname>     </hal>     <hal format="hidl">修改hardware/interfaces目录下的compatibility_matrix.7.xml--- a/compatibility_matrices/compatibility_matrix.7.xml+++ b/compatibility_matrices/compatibility_matrix.7.xml@@ -516,9 +516,17 @@             <instance>default</instance>         </interface>     </hal>-    <hal format="aidl" optional="true">+    <hal format="hidl" optional="true">         <name>android.hardware.radio.config</name>-        <version>1</version>+        <!--+        Note: Devices launching with target-level 4, if implementing the+        radio config HAL, must provide an implementation of 1.1 IRadioConfig+        that can handle version 1.2 of IRadioConfigResponse and+        IRadioConfigIndication.+        -->+       <version>1.0</version>+        <version>1.1</version>+        <version>1.2</version>         <interface>             <name>IRadioConfig</name>             <instance>default</instance>@@ -573,6 +581,28 @@             <instance>slot2</instance>             <instance>slot3</instance>         </interface>+     </hal>+    <hal format="hidl" optional="true">+        <name>android.hardware.radio</name>+       <version>1.1</version>+       <version>1.2</version>+       <version>1.3</version>+        <version>1.4</version>+        <version>1.5</version>+        <interface>+             <name>IRadio</name>+             <instance>slot1</instance>+             <instance>slot2</instance>+             <instance>slot3</instance>+         </interface>+    </hal>+    <hal format="hidl" optional="true">+       <name>android.hardware.radio.deprecated</name>+        <version>1.0</version>+        <interface>+        <name>IOemHook</name>+        <instance>slot1</instance>+        </interface>     </hal>     <hal format="aidl" optional="true">         <name>android.hardware.radio.voice</name>

6.增加rild服务

hardware/ril/rild/rild.rc文件中service ril-daemon /vendor/bin/hw/rild    class main    user root    group radio cache inet misc audio log readproc wakelock    capabilities BLOCK_SUSPEND NET_ADMIN NET_RAW

7.apn相关配置文件如下路径:

vendor/rockchip/common/phone/etc/apns-full-conf.xml

8.内核增加模块vid和pid及宏配置

kernel-5.10/drivers/usb/serial/option.c文件增加id添加options驱动支持:CONFIG_USB_SERIAL=yCONFIG_USB_SERIAL_WWAN=yCONFIG_USB_SERIAL_OPTION=y如果需要ppp拨号的情况下:CONFIG_PPP=yCONFIG_PPP_BSDCOMP=yCONFIG_PPP_DEFLATE=yCONFIG_PPP_FILTER=yCONFIG_PPP_MPPE=yCONFIG_PPP_MULTILINK=yCONFIG_PPPOE=yCONFIG_PPPOLAC=yCONFIG_PPPOPNS=yCONFIG_PPP_ASYNC=yCONFIG_PPP_SYNC_TTY=yCONFIG_SLIP=yCONFIG_SLHC=y如果需要rndis或者ecm拨号情况下:CONFIG_USB_USBNET=yCONFIG_USB_NET_CDCETHER=yCONFIG_USB_NET_RNDIS_HOST=y

9.添加4g图标,信号图标

device/rockchip/common目录下overlay_wifi_only/frameworks/base/core/res/res/values/config.xmlconfig_mobile_data_capable属性修改为truedevice/rockchip/rk3588--- a/overlay/frameworks/base/core/res/res/values/config.xml+++ b/overlay/frameworks/base/core/res/res/values/config.xml@@ -31,6 +31,14 @@     <!-- the 6th element indicates boot-time dependency-met value. -->     <string-array translatable="false" name="networkAttributes">         <item>"wifi,1,1,2,-1,true"</item>+       <item>"mobile,0,0,0,-1,true"</item>+        <item>"mobile_mms,2,0,2,60000,false"</item>+        <item>"mobile_supl,3,0,2,60000,true"</item>+        <item>"mobile_dun,4,0,2,60000,true"</item>+        <item>"mobile_hipri,5,0,3,60000,true"</item>+        <item>"mobile_fota,10,0,2,60000,true"</item>+        <item>"mobile_ims,11,0,2,60000,true"</item>+        <item>"mobile_cbs,12,0,2,60000,true"</item>         <item>"bluetooth,7,7,0,-1,true"</item>         <item>"ethernet,9,9,9,-1,true"</item>     </string-array>

10.拨号命令执行

setprop ctl.stop ril-daemonsetprop ctl.start ril-daemon

调试过程中遇到的问题

a.遇到AIDL packages are not found in any compatibility matrix
在这里插入图片描述
打开system/libvintf目录下做如下改动:
在这里插入图片描述
b. logcat -b radio查看ril没有正确加载,dlopen打开库失败
在这里插入图片描述
先去系统的"/system/lib64"和"/vendor/lib64"目录下找一些看有没有响应的库,如果没有在device/rockchip/common/modules/4g_modules.mk

android.hardware.secure_element@1.0 \ android.hardware.secure_element@1.1 \ android.hardware.secure_element@1.2如果还提示错误,参照下面的修改复制到vendor/lib64android.hardware.secure_element@1.0.vendor \android.hardware.secure_element@1.1.vendor \android.hardware.secure_element@1.2.vendor

c.系统提示找不到android.hardware.radio@1.5::IRadio/slot1
调试过程中遇到这个错误的时候系统的4G图标不能显示,"logcat -b radio"查看log,发现ril库已经跑起来了,有AT命令的输出结果,但是就是无法上网。