从零到一:在RK3568 Android 11上集成移远EC20 4G模块的完整实践
2026/5/16 14:31:25 网站建设 项目流程

1. 硬件准备与基础环境搭建

拿到RK3568开发板和移远EC20模块后,我做的第一件事就是检查硬件兼容性。EC20采用Mini PCIe接口,但实际走的是USB协议,这个细节很重要。我用万用表测量了开发板供电电压,确认3.3V和1.8V电平正常后,插入模块时听到了明显的"咔嗒"声——这是硬件接触良好的第一个信号。

开发环境我选择了Ubuntu 20.04 LTS,这是RK官方推荐的编译系统。安装完基础工具链后,需要特别注意两个依赖:

sudo apt-get install repo git-core gitk git-gui gcc-multilib flex bison gperf build-essential sudo apt-get install libncurses5-dev libssl-dev zlib1g-dev libelf-dev

编译Android 11源码时遇到第一个坑:JDK版本。RK3568的Android 11需要OpenJDK 8,但Ubuntu 20.04默认是OpenJDK 11。解决方法很经典:

sudo update-alternatives --config java sudo update-alternatives --config javac

2. Linux内核驱动配置

驱动配置的核心在于DTS文件的修改。在kernel/arch/arm64/boot/dts/rockchip/rk3568-evb.dts中添加以下关键节点:

&usb_host0_xhci { status = "okay"; ec20_modem: usb-device { compatible = "usb-serial,option"; reg = <0>; product = "EC20"; idVendor = <0x2c7c>; idProduct = <0x0125>; }; };

这里有几个容易出错的地方:

  1. idVendoridProduct必须与lsusb查看到的实际值一致
  2. 如果模块被识别为ttyUSB0-3但无法通信,可能需要添加options参数:
echo 1 > /sys/bus/usb-serial/drivers/option1/new_id

编译内核时我遇到了make[1]: *** No rule to make target 'dtbs'. Stop.错误,这是因为RK3568的dtb需要单独指定:

make ARCH=arm64 rockchip/rk3568-evb.dtb

3. Android HAL层适配

移远提供的libreference-ril-ec20.so需要替换到vendor/lib64/目录。这里有个隐藏陷阱:某些版本会与系统原有的libril.so冲突。我的解决方案是:

  1. 备份原厂RIL库
  2. 修改device.mk确保只加载EC20专用库:
PRODUCT_PACKAGES += \ rild \ libreference-ril-ec20

RIL守护进程的启动配置在ril.rc中需要精确指定USB端口:

service ril-daemon /vendor/bin/hw/rild -l /vendor/lib64/libreference-ril-ec20.so class main user radio group radio cache inet misc audio sdcard_rw log capabilities BLOCK_SUSPEND NET_ADMIN NET_RAW

实测发现EC20在冷启动时需要特殊初始化序列,我在init.rc中添加了延迟启动:

on property:sys.boot_completed=1 exec -- /system/bin/sleep 10 start ril-daemon

4. 网络与通话功能调试

下拉菜单没有SIM卡图标?这个问题困扰了我两天。最终发现需要修改两处关键配置:

  1. frameworks/base/core/res/res/values/config.xml中添加移动网络属性:
<string-array 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,true"</item> </string-array>
  1. 修改TelephonyProvider的数据库权限:
UPDATE carriers SET type='default,mms,supl' WHERE name='4GNET';

上网速度慢的问题通过修改RILConstants.java得到改善:

int PREFERRED_NETWORK_MODE = NETWORK_MODE_LTE_GSM_WCDMA;

5. 典型问题排查指南

现象:模块识别但无信号

  1. 检查天线阻抗是否匹配(EC20需要50Ω天线)
  2. 用AT命令测试基础功能:
adb shell echo "AT+CSQ" > /dev/ttyUSB2 cat < /dev/ttyUSB2

正常应返回+CSQ: 24,99格式的信号强度

现象:能上网不能打电话

  1. 确认DialerTeleService已编译进系统
  2. 检查APN配置中的语音承载标识:
<apn carrier="VoLTE" bearer="13" />

编译错误:tidy检查失败临时解决方案是关闭严格模式:

LOCAL_TIDY_FLAGS := -warnings-as-errors=* 改为 LOCAL_TIDY_FLAGS := -warnings-as-errors=none

6. 性能优化实战

通过修改build.prop提升网络切换速度:

ro.telephony.ril.config=simactivation persist.radio.add_power_save=1

EC20的USB吞吐量优化(在init.usb.rc中添加):

write /sys/class/net/wwan0/queues/rx-0/rps_cpus f write /sys/class/net/wwan0/queues/tx-0/xps_cpus 1

最后分享一个实用技巧:当模块异常发热时,可以通过AT命令降低发射功率:

AT+QSCLK=1 //开启节能模式 AT+QCFG="band",0,4000000,1 //限制频段

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询