从零到一:在RK3568 Android 11上集成移远EC20 4G模块的完整实践
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 javac2. 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; }; };这里有几个容易出错的地方idVendor和idProduct必须与lsusb查看到的实际值一致如果模块被识别为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 ARCHarm64 rockchip/rk3568-evb.dtb3. Android HAL层适配移远提供的libreference-ril-ec20.so需要替换到vendor/lib64/目录。这里有个隐藏陷阱某些版本会与系统原有的libril.so冲突。我的解决方案是备份原厂RIL库修改device.mk确保只加载EC20专用库PRODUCT_PACKAGES \ rild \ libreference-ril-ec20RIL守护进程的启动配置在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_completed1 exec -- /system/bin/sleep 10 start ril-daemon4. 网络与通话功能调试下拉菜单没有SIM卡图标这个问题困扰了我两天。最终发现需要修改两处关键配置在frameworks/base/core/res/res/values/config.xml中添加移动网络属性string-array namenetworkAttributes itemwifi,1,1,2,-1,true/item itemmobile,0,0,0,-1,true/item itemmobile_mms,2,0,2,60000,true/item /string-array修改TelephonyProvider的数据库权限UPDATE carriers SET typedefault,mms,supl WHERE name4GNET;上网速度慢的问题通过修改RILConstants.java得到改善int PREFERRED_NETWORK_MODE NETWORK_MODE_LTE_GSM_WCDMA;5. 典型问题排查指南现象模块识别但无信号检查天线阻抗是否匹配EC20需要50Ω天线用AT命令测试基础功能adb shell echo ATCSQ /dev/ttyUSB2 cat /dev/ttyUSB2正常应返回CSQ: 24,99格式的信号强度现象能上网不能打电话确认Dialer和TeleService已编译进系统检查APN配置中的语音承载标识apn carrierVoLTE bearer13 /编译错误tidy检查失败临时解决方案是关闭严格模式LOCAL_TIDY_FLAGS : -warnings-as-errors* 改为 LOCAL_TIDY_FLAGS : -warnings-as-errorsnone6. 性能优化实战通过修改build.prop提升网络切换速度ro.telephony.ril.configsimactivation persist.radio.add_power_save1EC20的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命令降低发射功率ATQSCLK1 //开启节能模式 ATQCFGband,0,4000000,1 //限制频段