RK3588 Android12调试移远EC20模块(外挂小板)

平台:RK3588&Android12

内容:外挂小板调试EC20

通过主板的usb口外接一个小板调试移远的4G模块EC20,实现4G上网。

=========================================================================

一、内核

因为是外挂小板,所以dts不用调,usb口可以用就行。

1、驱动

用的驱动是kernel-5.10\drivers\net\lte\lte_rm310.c;

SDK\kernel-5.10\arch\arm64\configs\rockchip_defconfig;     
+	CONFIG_LTE=y
+	CONFIG_LTE_RM310=y 

SDK\kernel-5.10\drivers\net\Kconfig
	source "drivers/net/hyperv/Kconfig"
+	source "drivers/net/lte/Kconfig"

SDK\kernel-5.10\drivers\net\Makefile
	obj-$(CONFIG_FUJITSU_ES) += fjes/
+	obj-$(CONFIG_LTE) += lte/

同理增加qmi_wwan_q驱动,把kernel-5.10\drivers\net\usb\qmi_wwan_q.c编进来

二、系统

1、首先打开4G

device/rockchip/common/BoardConfig.mk
	#TWRP
	BOARD_TWRP_ENABLE ?= false
	
++	#for rk 4g modem                                                                                                                                               |    BOARD_OPENGL_AEP
++	BOARD_HAS_RK_4G_MODEM ?= true

打开BOARD_HAS_RK_4G_MODEM选项后会有一些报错,添加如下补丁:

/vendor/rockchip/common:
--- a/phone/phone.mk
+++ b/phone/phone.mk
@@ -26,8 +26,8 @@ PRODUCT_PACKAGES += \
     chat
 
 PRODUCT_PROPERTY_OVERRIDES +=ro.boot.noril=false
-else
-PRODUCT_PROPERTY_OVERRIDES +=ro.boot.noril=true
+# else
+# PRODUCT_PROPERTY_OVERRIDES +=ro.boot.noril=true
 endif
/device/rockchip/common:
--- a/modules/4g_modem.mk
+++ b/modules/4g_modem.mk
@@ -38,8 +38,8 @@ PRODUCT_PROPERTY_OVERRIDES += \
     vendor.rild.libpath=/vendor/lib64/librk-ril.so
 
 PRODUCT_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/librk-ril.so:$(TARGET_COPY_OUT_VENDOR)/lib64/librk-ril.so 
hardware/interfaces:
--- a/compatibility_matrices/compatibility_matrix.6.xml (或者hardware_interfaces_compatibility_matrices.patch两选一)
+++ b/compatibility_matrices/compatibility_matrix.6.xml
@@ -434,6 +434,11 @@
     </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>
         <version>1.6</version>
         <interface>
             <name>IRadio</name>
@@ -450,11 +455,20 @@
             <instance>slot1</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="hidl" optional="true">
         <name>android.hardware.radio.config</name>
         <!--
         See compatibility_matrix.4.xml on versioning of radio config HAL.
         -->
+        <version>1.0</version>
         <version>1.1</version>
         <interface>
             <name>IRadioConfig</name>

2、RIL库文件

把相应模块的RIL库文件放在device\rockchip\common\4g_modem\lib64\下,

并且更改为librk-ril.so

3、RIL库加载到相应位置

/device/rockchip/common:
--- a/modules/4g_modem.mk
+++ b/modules/4g_modem.mk
@@ -38,8 +38,8 @@ PRODUCT_PROPERTY_OVERRIDES += \
     vendor.rild.libpath=/vendor/lib64/librk-ril.so
 
 PRODUCT_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 \ 

4、添加cdc-wdmo节点

system\core\init\devices.cpp 
            // Minors are broken up into groups of 128, starting at "001"
            int bus_id = uevent.minor / 128 + 1;
            int device_id = uevent.minor % 128 + 1;
            devpath = StringPrintf("/dev/bus/usb/%03d/%03d", bus_id, device_id);
        }
+#if 1 //add by quectel for mknod /dev/cdc-wdmo
+    } else if (uevent.subsystem == "usbmisc" && !uevent.device_name.empty()) {
+		       devpath = "/dev/" + uevent.device_name;
+#endif
    } else if (StartsWith(uevent.subsystem, "usb")) {
        // ignore other USB events

还要添加权限

device\rockchip\common\rootdir\ueventd.rockchip.rc   
/dev/ttyUSB0              0660   radio		radio
/dev/ttyUSB1              0660   radio		radio
/dev/ttyUSB2              0660   radio		radio
/dev/ttyUSB3              0660   radio		radio
/dev/ttyUSB4              0660   radio		radio
+/dev/cdc-wdm*             0660   radio		radio    
+/dev/qcqmi*               0660   radio		radio
+/dev/cdc-acm*             0660   radio		radio

5、加入APN

vendor\rockchip\common\phone\etc\apns-full-conf.xml
  <apn carrier="China Telecom" mcc="460" mnc="11" apn="ctnet" type="default,supl" />
  <apn carrier="中国移动物联网4G" mcc="460" mnc="04" apn="cmiot" type="default,supl" />
  <apn carrier="中国移动物联网2G" mcc="460" mnc="04"  apn="cmmtm" type="default,supl" />
  <apn carrier="中国联通物联网gzm2mapn" mcc="460" mnc="06" apn="unim2m.gzm2mapn" port="80" type="default,supl" />
  <apn carrier="中国联通物联网njm2mapn" mcc="460" mnc="06" apn="unim2m.njm2mapn"  type="default,supl" />
  <apn carrier="中国电信物联网m2m" mcc="460" mnc="03" apn="CTNET" user="m2m" password="vnet.mobi" type="default" />

三、遇到的问题:

1、RIL库文件不适配,用以前RK3568&Android 11的库文件发现会重复报错:

[ 2492.292235][    T1] init: starting service 'vendor.ril-daemon'...
11-23 07:57:31.041     1     1 I init    : starting service 'vendor.ril-daemon'...
11-23 07:57:29.385  6433  6433 D RIL RILC: Quectel RIL Version: Quectel_Android_RIL_Driver_V3.3.47
11-23 07:57:29.385  6433  6433 D RIL RILC: Compiled date: Jul 26 2021 time: 17:31:18
11-23 07:57:29.385  6433  6433 D RIL RIL_READ_CONF: original conf line: LTE_Is_Report_SignalStrength=1
11-23 07:57:29.385  6433  6433 D RIL RIL_READ_CONF: LTE_Is_Report_SignalStrength = 1
11-23 07:57:29.385  6433  6433 E RIL RILC: '/vendor/manifest.xml' not exist.
11-23 07:57:29.385  6433  6433 D RIL RILC: 1.0</version>
11-23 07:57:29.385  6433  6433 E linker  : library "/system/lib64/libnetutils.so" ("/system/lib64/libnetutils.so") needed or dlopened by "/vendor/lib64/librk-ril.so" is not accessible for the namespace: [name="vndk", ld_library_paths="", default_library_paths="/vendor/lib64/vndk-sp:/apex/com.android.vndk.v32/lib64:/vendor/lib64", permitted_paths="/odm/lib64/hw:/odm/lib64/egl:/vendor/lib64/hw:/vendor/lib64/egl:/system/vendor/lib64/hw:/system/vendor/lib64/egl:/apex/com.android.vndk.v32/lib64/hw"]
11-23 07:57:29.385  6433  6433 E RIL NDK : dlopen /system/lib64/libnetutils.so failed: dlopen failed: library "/system/lib64/libnetutils.so" needed or dlopened by "/vendor/lib64/librk-ril.so" is not accessible for the namespace "(default)"
11-23 07:57:29.385  6433  6433 F libc    : Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0 in tid 6433 (rild), pid 6433 (rild)
11-23 07:57:29.409  6437  6437 I crash_dump64: obtaining output fd from tombstoned, type: kDebuggerdTombstoneProto
11-23 07:57:29.409   347   347 I tombstoned: received crash request for pid 6433
11-23 07:57:29.410  6437  6437 I crash_dump64: performing dump of process 6433 (target tid = 6433)
[ 2492.407351][  T287] logd: logdr: UID=1001 GID=1001 PID=6437 n tail=0 logMask=8 pid=6433 start=0ns deadline=0ns
11-23 07:57:31.156   287   287 I logd    : logdr: UID=1001 GID=1001 PID=6437 n tail=0 logMask=8 pid=6433 start=0ns deadline=0ns
[ 2492.410231][  T287] logd: logdr: UID=1001 GID=1001 PID=6437 n tail=0 logMask=1 pid=6433 start=0ns deadline=0ns
11-23 07:57:31.159   287   287 I logd    : logdr: UID=1001 GID=1001 PID=6437 n tail=0 logMask=1 pid=6433 start=0ns deadline=0ns
11-23 07:57:29.477  6437  6437 F DEBUG   : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
11-23 07:57:29.477  6437  6437 F DEBUG   : Build fingerprint: 'rockchip/rk3588_s/rk3588_s:12/SQ3A.220705.003.A1/eng.androi.20231123.140227:userdebug/release-keys'
11-23 07:57:29.477  6437  6437 F DEBUG   : Revision: '0'
11-23 07:57:29.477  6437  6437 F DEBUG   : ABI: 'arm64'
11-23 07:57:29.477  6437  6437 F DEBUG   : Timestamp: 2023-11-23 07:57:29.412324998+0000
11-23 07:57:29.477  6437  6437 F DEBUG   : Process uptime: 0s
11-23 07:57:29.477  6437  6437 F DEBUG   : Cmdline: /vendor/bin/hw/rild
11-23 07:57:29.477  6437  6437 F DEBUG   : pid: 6433, tid: 6433, name: rild  >>> /vendor/bin/hw/rild <<<
11-23 07:57:29.477  6437  6437 F DEBUG   : uid: 1001
11-23 07:57:29.478  6437  6437 F DEBUG   : tagged_addr_ctrl: 0000000000000001
[ 2492.423678][    T1] init: Untracked pid 6437 exited with status 0
11-23 07:57:29.478  6437  6437 F DEBUG   : signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0
[ 2492.424951][    T1] init: Service 'vendor.ril-daemon' (pid 6433) received signal 11
11-23 07:57:29.478  6437  6437 F DEBUG   : Cause: null pointer dereference
[ 2492.424978][    T1] init: Sending signal 9 to service 'vendor.ril-daemon' (pid 6433) process group...
11-23 07:57:29.478  6437  6437 F DEBUG   :     x0  0000007c45e85bc8  x1  0000007fec02c118  x2  0000000000000000  x3  0000007fec02c17a
11-23 07:57:29.478  6437  6437 F DEBUG   :     x4  0000000000000000  x5  0000000000000000  x6  726b68737473646d  x7  7f7f7f7f7f7f7f7f
11-23 07:57:29.478  6437  6437 F DEBUG   :     x8  938dbdbe855922a3  x9  938dbdbe855922a3  x10 0000007fec02b958  x11 fffffffffffffffd
[ 2492.430351][    T1] libprocessgroup: Successfully killed process cgroup uid 1001 pid 6433 in 5ms
11-23 07:57:29.478  6437  6437 F DEBUG   :     x12 0000007fec02ba70  x13 00000000000000c6  x14 0000007fec02bbf8  x15 0000000ded4c9e9a
[ 2492.431119][    T1] init: Untracked pid 6439 exited with status 0
11-23 07:57:29.478  6437  6437 F DEBUG   :     x16 0000007c45f31530  x17 0000007c42a14510  x18 0000007c4ed7e000  x19 0000007fec02c178
11-23 07:57:29.478  6437  6437 F DEBUG   :     x20 0000007c45e81000  x21 0000007c45ea8000  x22 0000007fec02c118  x23 0000000000000003
11-23 07:57:29.478  6437  6437 F DEBUG   :     x24 00000058e4a75368  x25 0000007c45eaa000  x26 b400007b72826d18  x27 0000000000000000
11-23 07:57:29.478  6437  6437 F DEBUG   :     x28 0000007c45e85b90  x29 0000007fec02c5e0
11-23 07:57:29.478  6437  6437 F DEBUG   :     lr  0000007c45e5a3bc  sp  0000007fec02c050  pc  0000000000000000  pst 0000000060001000
11-23 07:57:29.478  6437  6437 F DEBUG   : backtrace:
11-23 07:57:29.478  6437  6437 F DEBUG   :       #00 pc 0000000000000000  <unknown>
11-23 07:57:29.478  6437  6437 F DEBUG   :       #01 pc 000000000001a3b8  /vendor/lib64/librk-ril.so (RIL_Init+500)
11-23 07:57:29.478  6437  6437 F DEBUG   :       #02 pc 0000000000002378  /vendor/bin/hw/rild (main+804) (BuildId: b8fc2a47b5b5a92dc929e54ab9d144ab)
11-23 07:57:29.478  6437  6437 F DEBUG   :       #03 pc 00000000000487dc  /apex/com.android.runtime/lib64/bionic/libc.so (__libc_init+96) (BuildId: cd7952cb40d1a2deca6420c2da7910be)
11-23 07:57:29.482   585   797 W NativeCrashListener: Couldn't find ProcessRecord for pid 6433
11-23 07:57:29.483   347   347 E tombstoned: Tombstone written to: tombstone_39
11-23 07:57:31.172     1     1 I init    : Untracked pid 6437 exited with status 0
11-23 07:57:29.486   585   663 I BootReceiver: Copying /data/tombstones/tombstone_39 to DropBox (SYSTEM_TOMBSTONE)
11-23 07:57:29.486   585   663 I DropBoxManagerService: add tag=SYSTEM_TOMBSTONE isTagEnabled=true flags=0x6
11-23 07:57:31.173     1     1 I init    : Service 'vendor.ril-daemon' (pid 6433) received signal 11
11-23 07:57:31.173     1     1 I init    : Sending signal 9 to service 'vendor.ril-daemon' (pid 6433) process group...
11-23 07:57:31.179     1     1 I libprocessgroup: Successfully killed process cgroup uid 1001 pid 6433 in 5ms
11-23 07:57:31.179     1     1 I init    : Untracked pid 6439 exited with status 0
11-23 07:57:29.492   585   663 E NativeTombstoneManager: Tombstone's UID (1001) not an app, ignoring
11-23 07:57:29.493   585   663 I DropBoxManagerService: add tag=SYSTEM_TOMBSTONE_PROTO isTagEnabled=true flags=0x4

后面换了Quectel_Android_RIL_Driver_V3.6.8的库就好了。

2、有信号强度的图标,没有4G那两个小字,也上不了网,但是sim卡已经检测到了,AT指令发送正常,往下分析发现是/dev/cdc-wdm0 节点权限不对

console:/ $ ls -l /dev/cdc-wdm0                                                
crw------- 1 root root 180, 176 2023-12-02 10:22 /dev/cdc-wdm0

但是明明已经给0660了

/dev/ttyUSB8              0660   radio		radio
/dev/ttyUSB9              0660   radio		radio
/dev/cdc-wdm*             0660   radio		radio    //目前用到的是这个
/dev/qcqmi*               0660   radio		radio
/dev/cdc-acm*             0660   radio		radio

搞了半天,发现居然是那个注释导致了,最后改成这样就好了

/dev/ttyUSB8              0660   radio		radio
/dev/ttyUSB9              0660   radio		radio
#目前用到的是这个/dev/cdc-wdm*
/dev/cdc-wdm*             0660   radio		radio    
/dev/qcqmi*               0660   radio		radio
/dev/cdc-acm*             0660   radio		radio

四、小结

内核方面的话因为是外挂小板,所以只要加载驱动就好了,dts打开个usb就行了,省了些事。在接上4G模块的时候/dev会出来四个USB设备(一般是ttyUSB0 1 2 3),这个时候就会通过ttyUSB2发AT指令,对sim卡进行一些操作。所以ril库一定要适配系统,最好还是有供应商配合,还有就是vendor.ril-daemon服务要正常跑起来,相关文件要给到。

五、参考文章

RK3568-ANDROID11-4G-EC20-(详细步骤)_rk3568 ec20_旋风旋风的博客-CSDN博客

RK3568 Android12 移远4G模块EM05-CE 调试心得_device manifest are not declared in fcm <= level 4_Terry.W的博客-CSDN博客

RK3588 Android12 广和通L716 4G模块调试记录 - 代码天地 (codetd.com)

在基于瑞芯微rk3568的android12上添加移远4G通信模块EC200A_java_csudxl801106-华为云开发者联盟 (csdn.net)

  • 31
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值