文章目录

  • 一、前期准备
  • 二、底层配置
  • 三、添加厂商提供的ril.so库
  • 四、添加对应的配置
  • 五、对应的报错解决
    • 5.1 状态栏里面没有对应的 Mobile data SIM图标
    • 5.2重复打印启动ril-daemon
    • 5.3 重复打印Could not find 'android.hardware.radio@1.0::IRadio/slot1
    • 5.4 查看log中是否有对应的pppd拨号
    • 5.5 ppp拨号失败
    • 5.6 无法获取APN

最近在android11上调试一款移远的4G模块(EG25-G)第一次调试4G,做个笔记记录。

一、前期准备

一款新的4G模块,我们需要厂商提供对应的so库,否则无法进行后期的工作,也一并要求厂商提供一定的移植文档。

二、底层配置

厂商提供的一般都是对应的上层配置,我们需要自己去调试底层。

  1. 首先需要确定供电正确,这和需要你的硬件工程师进行配合,然后你需要注意4G模块的商店时序,可能需要重复的改变一个供电gpio的状态。
  2. 打开4G模块的通信端口,我使用的usb进行通信,在android的标准代码中,其实已经做好了对应的驱动,我们只需要打开对应的宏就可以了。对应的驱动文件为kernel/drivers/usb/serial/option.c,对应的宏为:CONFIG_USB_SERIAL_OPTION=y
  3. 这个宏需要在对应的defconfig文件中进行打开,这样才能编译驱动。如果成功则可以在对应的目录看到相关的节点 如:/dev/ttyUSB 0-3
  4. 通过 ls -l /dev/ttyUSB* 查看所属组和读写权限
mek_8q:/ # ls -l /dev/ttyUSB*
crw-rw-rw- 1 radio radio 188,   0 1970-01-01 08:02 /dev/ttyUSB0
crw-rw-rw- 1 radio radio 188,   1 1970-01-01 08:02 /dev/ttyUSB1
crw-rw-rw- 1 radio radio 188,   2 1970-01-01 08:02 /dev/ttyUSB2
crw-rw-rw- 1 radio radio 188,   3 1970-01-01 08:02 /dev/ttyUSB3
  1. 通过AT指令对USB口进行通讯
mek_8q:/ # microcom -s 115200 /dev/ttyUSB3
AT
OK
/*对应的命令可以自己去网上找这里*/
  1. 对应的比较明显的LOG
[   18.834421] usb 2-1.2: new high-speed USB device number 3 using xhci-hcd
[   18.948485] usb 2-1.2: New USB device found, idVendor=2c7c, idProduct=0125, bcdDevice= 3.18
[   18.957056] usb 2-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[   18.964508] usb 2-1.2: Product: EG25-G   /*对应的模块*/
[   18.968387] usb 2-1.2: Manufacturer: Quectel
[   18.978784] option 2-1.2:1.0: GSM modem (1-port) converter detected
[   18.985925] usb 2-1.2: GSM modem (1-port) converter now attached to ttyUSB0
[   18.993877] option 2-1.2:1.1: GSM modem (1-port) converter detected
[   19.000973] usb 2-1.2: GSM modem (1-port) converter now attached to ttyUSB1
[   19.008924] option 2-1.2:1.2: GSM modem (1-port) converter detected
[   19.016128] usb 2-1.2: GSM modem (1-port) converter now attached to ttyUSB2
[   19.024266] option 2-1.2:1.3: GSM modem (1-port) converter detected
[   19.031566] usb 2-1.2: GSM modem (1-port) converter now attached to ttyUSB3
  1. 解决wwan占用串口
-CONFIG_USB_NET_QMI_WWAN=y+# CONFIG_USB_NET_QMI_WWAN is not set

修改你对应的defconfig文件,不然你的android界面会一直显示sim卡的图标是灰色的
剩下的就是需要你检查上电时序,模块供电是否正确,如果都没问题你的AT指令应该是可以通的。

三、添加厂商提供的ril.so库

  1. 首先关闭源码中的对应的ril.so库,通过这种宏定义的方式去屏蔽源码中的ril.so库
    修改目录 hardware/ril / reference-ril/Android.mk
diff --git a/reference-ril/Android.mk b/reference-ril/Android.mk
index 6afdbd3..e22c827 100644
--- a/reference-ril/Android.mk
+++ b/reference-ril/Android.mk
@@ -2,6 +2,7 @@# XXX using libutils for simulator build only...#
+ifneq ($(BOARD_HAVE_EG25_G),) LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)@@ -50,3 +51,4 @@ elseLOCAL_MODULE:= reference-rilinclude $(BUILD_EXECUTABLE)endif
+endif

修改 device/nxp/imx8q/mek_8q/BoardConfig.mk b/imx8q/mek_8q/BoardConfig.mk

diff --git a/imx8q/mek_8q/BoardConfig.mk b/imx8q/mek_8q/BoardConfig.mk
index 65772d44..48b286be 100644
--- a/imx8q/mek_8q/BoardConfig.mk
+++ b/imx8q/mek_8q/BoardConfig.mk
@@ -257,3 +251,14 @@ endifPRODUCT_COPY_FILES +=    \device/nxp/imx8q/mek_8q/TP/goodix_911_cfg.bin:vendor/firmware/goodix_911_cfg.bin+# -------@4G modem-------
+# for 4G modem
+BOARD_HAVE_EG25_G := true
  1. 添加厂家自己ril.so库
diff --git a/imx8q/mek_8q/BoardConfig.mk b/imx8q/mek_8q/BoardConfig.mk
index 65772d44..48b286be 100644
--- a/imx8q/mek_8q/BoardConfig.mk
+++ b/imx8q/mek_8q/BoardConfig.mk
@@ -102,12 +102,6 @@ BOARD_WPA_SUPPLICANT_PRIVATE_LIB        := lib_driver_cmd_$(BOARD_WLAN_DEVICE)
+# -------@4G modem-------
+# for 4G modem
+BOARD_HAVE_EG25_G := true /*刚才的宏*/
+PRODUCT_COPY_FILES +=  \
+    device/nxp/imx8q/mek_8q/modem/chat:system/bin/chat \
+    device/nxp/imx8q/mek_8q/modem/ip-up:system/etc/ppp/ip-up \
+    device/nxp/imx8q/mek_8q/modem/ip-down:system/etc/ppp/ip-down \
+    device/nxp/imx8q/mek_8q/4G_modem/libreference-ril.so:vendor/lib64/hw/libreference-ril.so \
/*添加ppp拨号工具以及对应的so库*/

添加了库,就要指定你库的路径让别人知道

/* 添加一个prop类型文件,用于指定路径*/
device/nxp/imx8q/mek_8q/system.prop
/*内容如下*/
vendor.rild.libpath=/vendor/lib64/hw/libreference-ril.so

在对应的.mk文件里面去添加这个文件

device/nxp/imx8q/mek_8q/mek_8q.mk
#----------4g modem-------------
TARGET_PRODUCT_PROP := $(IMX_DEVICE_PATH)/system.prop

四、添加对应的配置

  1. 修改上网权限
    在对应的新建立一个文件
    device/nxp/imx8q/sepolicy/rild.te
    内容如下
allow rild usb_serial_device:chr_file { read write open ioctl };
allow rild rild:packet_socket { create bind write read };
/*这两个应该是对应的上网相关的,我是试过如果不添加后面是无法上网的*/
  1. 修改对应的服务

修改文件
device/nxp/imx8q/mek_8q/sepolicy/file_contexts
添加如下内容

#4G
/dev/ttyUSB[0-9]                u:object_r:radio_device:s0
/dev/ttyACM[0-9]                u:object_r:radio_device:s0
/dev/cdc-wdm[0-9]               u:object_r:radio_device:s0
/dev/qcqmi[0-9]                 u:object_r:radio_device:s0
/vendor/bin/hw/rild             u:object_r:rild_exec:s0
/dev/socket/rildOemHook         u:object_r:rild_socket:s0
#PCIe
/dev/mhi_DUN                    u:object_r:radio_device:s0
/dev/mhi_DIAG                   u:object_r:radio_device:s0
/dev/mhi_BHI                    u:object_r:radio_device:s0
/dev/mhi_LOOPBACK               u:object_r:radio_device:s0
/dev/mhi_QMI0                   u:object_r:radio_device:s0/*这些都是对应的4G厂商提供的一些修改,具体作用不知,应该是将对应的权限修改为radio的吧*/

添加对应的apn配置,不然后面无法获得apn,无法上网
添加文件
device/nxp/imx8q/mek_8q/apns-conf.xml
不知道为啥复制不了,可能源码比较长。
这个我会上传到资源里面,需要的可以私信我。

将这个配置文件拷贝到对应的目录

+PRODUCT_COPY_FILES +=  \
+    device/nxp/imx8q/mek_8q/modem/chat:system/bin/chat \
+    device/nxp/imx8q/mek_8q/modem/ip-up:system/etc/ppp/ip-up \
+    device/nxp/imx8q/mek_8q/modem/ip-down:system/etc/ppp/ip-down \
+    device/nxp/imx8q/mek_8q/4G_modem/libreference-ril.so:vendor/lib64 \
+   device/nxp/imx8q/mek_8q/apns-conf.xml:system/etc/apns-conf.xml
  1. 修改selinux的权限
    修改/system/core/init/selinux.cpp
diff --git a/init/selinux.cpp b/init/selinux.cpp
index 5a0255acd..ae6f1fce9 100644
--- a/init/selinux.cpp
+++ b/init/selinux.cpp
@@ -104,6 +104,7 @@ EnforcingStatus StatusFromCmdline() {}bool IsEnforcing() {+    return false;if (ALLOW_PERMISSIVE_SELINUX) {return StatusFromCmdline() == SELINUX_ENFORCING;}

直接返回,不需要去加载权限

  1. 修改系统的配置权限
    同样是/system/core目录
    如果这里不添加对应的配置,他不能上网,而且会报错,是关于ueventd.rc这个文件的,大家可以注意下log
diff --git a/rootdir/ueventd.rc b/rootdir/ueventd.rc
index 9c2cdf27f..50d6a091f 100644
--- a/rootdir/ueventd.rc
+++ b/rootdir/ueventd.rc
@@ -41,6 +41,18 @@ subsystem sound/dev/pmsg0                0222   root       log# kms driver for drm based gpu
+#quectel port
+/dev/ttyUSB*              0666   radio       radio
+/dev/cdc-wdm*             0666   radio       radio
+/dev/qcqmi*               0666   radio       radio
+/dev/cdc-acm*             0666   radio       radio
+#PCIe
+/dev/mhi_DUN                           0666   radio       radio
+/dev/mhi_DIAG                          0666   radio       radio
+/dev/mhi_BHI                           0666   radio       radio
+/dev/mhi_LOOPBACK                      0666   radio       radio
+/dev/mhi_QMI0                          0666   radio       radio
+/dev/dri/*                0666   root       graphics# these should not be world writable

五、对应的报错解决

5.1 状态栏里面没有对应的 Mobile data SIM图标

对应的设置里面也没有 Mobile network的选项
修改device/nxp/imx8q/mek_8q/overlay/frameworks/base/core/res/res/values/config.xml

diff --git a/imx8q/mek_8q/overlay/frameworks/base/core/res/res/values/config.xml b/imx8q/mek_8q/overlay/frameworks/base/core/res/res/values/config.xml
index be3cd041..34c62208 100755
--- a/imx8q/mek_8q/overlay/frameworks/base/core/res/res/values/config.xml
+++ b/imx8q/mek_8q/overlay/frameworks/base/core/res/res/values/config.xml
@@ -61,21 +61,27 @@<!-- An Array of "[ConnectivityManager connectionType],[# simultaneous connection types]"  -->
+<!--<string-array translatable="false" name="radioAttributes"><item>"1,1"</item><item>"9,1"</item></string-array>
-
+-->
/*注释这里*/

5.2重复打印启动ril-daemon

log为

init: starting service 'ril-daemon'...
init: Untracked pid 14226 exited with status 0
init: Service 'ril-daemon' (pid 14222) received signal 11
init: Sending signal 9 to service 'ril-daemon' (pid 14222) process group...
libprocessgroup: Successfully killed process cgroup uid 1001 pid 14222 in 5ms
init: Untracked pid 14228 exited with status 0

这是你指定的ril库有问题,请检查你的ril.so是否有拷贝,你的ril库是否指定正确
通过命令查看

mek_8q:/ # getprop | grep ril
[init.svc.vendor.ril-daemon]: [running]
[init.svc_debug_pid.vendor.ril-daemon]: [491]
[ro.boottime.vendor.ril-daemon]: [15576768000]
[ro.radio.noril]: [no]
[vendor.rild.libargs]: [-d /dev/ttyUSB3]                /*指定的通讯端口,这个可以不用指定 一般来说 对应的so库里面会指定*/
[vendor.rild.libpath]: [/vendor/lib64/hw/libreference-ril.so]   /*这是你指定的库的路径,你对应的so库是不是这个*/

请检查你的so库是否有拷贝到你的指定路径下
或则你的vendor.rild.libpath在其余地方有指定
比如 hardware/ril/rild/rild.rc
请修改为这样

service ril-daemon /vendor/bin/hw/rild  -l /vendor/lib64/hw/libreference-ril.so /*这个路径和device下的要一样,其余的不变*/class mainuser radiogroup radio cache inet misc audio sdcard_rw logcapabilities BLOCK_SUSPEND NET_ADMIN NET_RAW

一般来说就不会报错了,如果还有报错,请检查是否有多个so库冲突。

5.3 重复打印Could not find 'android.hardware.radio@1.0::IRadio/slot1

首先检查你的模块供电是否正常,完全掉电再次重启看看,如果还有报错请检查你配置的服务。
如果移植在打印,那么就需要修改软件的xml配置文件
修改
device/nxp/imx8q/mek_8q/manifest.xml

/*添加下面的代码*/<hal format="hidl"><name>android.hardware.radio</name><transport>hwbinder</transport>/*这个对应的版本可修改,我这里默认1.1可以改为 1.0 - 1.5,如果版本不对也会报类似的错误,告诉你找不到对应的版本*/<version>1.1</version> <interface><name>IRadio</name><instance>slot1</instance></interface></hal>

如果你添加了这里的代码,编译有问题,告诉你 android.hardware.radio 最少为1.4 请修改下面的地方
源码目录:hardware/interfaces/

compatibility_matrices/compatibility_matrix.5.xml
+++ b/compatibility_matrices/compatibility_matrix.5.xml
@@ -371,6 +371,7 @@</hal><hal format="hidl" optional="true"><name>android.hardware.radio</name>
+        <version>1.0</version><version>1.4</version><version>1.5</version><interface>

请在这里添加对应的服务版本,这样就能修改对应的报错了。

5.4 查看log中是否有对应的pppd拨号

通过logcat抓取完整的log,可以看到这些对应的log,那么4g应该就是ok的了

05-16 15:14:24.772   484  2062 D RIL PPPD: chat --> AT
05-16 15:14:24.877   484  2062 D RIL PPPD: chat 6 <--
05-16 15:14:24.877   484  2062 D RIL PPPD: OK
05-16 15:14:24.877   484  2062 D RIL PPPD: chat --> AT+CGREG?
05-16 15:14:24.981   484  2062 D RIL PPPD: chat 40 <--
05-16 15:14:24.981   484  2062 D RIL PPPD: +CGREG: 2,1,"EA10","9BB3303",7
05-16 15:14:24.981   484  2062 D RIL PPPD:
05-16 15:14:24.981   484  2062 D RIL PPPD: OK
05-16 15:14:25.012  2064  2064 E pppd    : Couldn't open the /dev/ppp device: Permission denied
05-16 15:14:25.012  2064  2064 E pppd    : Sorry - this system lacks PPP kernel support
05-16 15:14:25.013   484  2062 D RIL PPPD: *** pppd: Exit code 4 (EXIT_NO_KERNEL_SUPPORT) retval = 4

pppd拨号成功后,可以在通过ifconfig -a 看到对应的ppp节点

ppp0      Link encap:Point-to-Point Protocol  inet addr:10.86.22.184  P-t-P:10.64.64.64  Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1RX packets:27 errors:0 dropped:0 overruns:0 frame:0 TX packets:39 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:3 RX bytes:6842 TX bytes:3194

没有这个节点就是你对应的pppd拨号没有成功,请检查是否有什么步骤漏掉,或者有其余的配置出现错误等。

5.5 ppp拨号失败

是否有添加 apns-config.xml文件
对应的so库是否正确,是否是匹配的。

5.6 无法获取APN

log:

05-14 19:39:32.458   792   980 E DCT-C-0 : getPreferredApnSetId: cursor is null
05-14 19:39:32.458   792   980 D DCT-C-0 : hasMatchedTetherApnSetting: APNs=[]
05-14 19:39:33.087   792   792 D DCT-C-0 : shouldRestrictDataForEcbm: isInEcm=false isInImsEcm=false
05-14 19:39:33.098   792   792 D DCT-C-0 : shouldRestrictDataForEcbm: isInEcm=false isInImsEcm=false
05-14 19:39:33.601   792   825 E DCT-C-0 : getPreferredApnSetId: cursor is null
05-14 19:39:33.602   792   825 D DCT-C-0 : hasMatchedTetherApnSetting: APNs=[]
05-14 19:39:33.608   792   792 D DCT-C-0 : shouldRestrictDataForEcbm: isInEcm=false isInImsEcm=false
05-14 19:39:33.859   792   792 D DCT-C-0 : onSimStateUpdated: state=LOADED

出现这个问题可能是你的模块还没有完全起来,你可以等一等,如果一直都是这样,其余的配置已经正确,可以尝试修改下面的内容:

--- a/frameworks/opt/telephony/src/java/com/android/internal/telephony/dataconnection/DcTracker.java
+++ b/frameworks/opt/telephony/src/java/com/android/internal/telephony/dataconnection/DcTracker.javapublic class DcTracker extends Handler {if (!isCarrierConfigApplied()) {log("onCarrierConfigChanged: Carrier config is not ready yet.");
-            return;
+            //return;}
@@ -2430,7 +2430,8 @@ public class DcTracker extends Handler {if (mSimState == TelephonyManager.SIM_STATE_ABSENT) {onSimAbsent();} else if (mSimState == TelephonyManager.SIM_STATE_LOADED){/*这里我改与每改都可以,应该不会影响*/
-            if (mConfigReady) {+//            if (mConfigReady) { //rpdzkj jeff
+            if (true) {createAllApnList();setDataProfilesAsNeeded();setInitialAttachApn();

剩下的就没啥改的了。
以上内容都是自己的调试经验,希望对大家有帮助。

对应的资源我放在了这里:点击这里
如果没有积分可以私信我。

NXP(imx8qxp)上android11的EG25-G(4G)模块调试记录相关推荐

  1. RK3588 Android12 广和通L716 4G模块调试记录

    调试前先找模块厂获取相关资料 Kernel修改: 可用RK的参考配置来控制,把原理图对应角位配置上就行. rk_modem: rk-modem { compatible="4g-modem- ...

  2. 4G模块使用记录移远EC20、BC20

    目录 0. 概述 硬件连接 -- UART 休眠管脚的使用 硬件连接 -- USB USB线序定义 驱动安装 抓取模组log 模组型号和SIM卡 模组区别 本地卡和漫游卡 SIM卡和APN 1. EC ...

  3. ROS上同时预览depth,IR,RGB 调试记录

    ROS上同时预览depth,IR,RGB 调试记录 用rviz同时显示RGB,IR,DEPTH(验证设备:astraprosm,canglong2,deeyea) 1.编译libuvc库 cd lib ...

  4. 【RK356X Android11】开发之4G模块(广和通模块NL668)

    目录 前言 一.Kernel调试 二.Android层调试 三.移植过程 四.问题与解决 前言   4G模块主要利用于无线上网和通话功能的移动设备,或者用以没有WIFI或者以太网的地方:这篇文章主要以 ...

  5. 4g模块注册上网 移远_Openwrt支持移远4G模块过程记录

    参考了不少教程,也做了不少尝试,最后记录下整个过程以便自己和坛友们参考 我所用的4G模块是Quectel EC20 R2.0,对于这个型号以下的操作前半部分修改USB Serial驱动应该是不需要的, ...

  6. 移远4G模块调试笔记

    前言: 在项目中集成 4G 网络模块,便可远程实时监控仪器运行状态.收集仪器数据等功能.EC20的USB接口符合USB2.0规范,支持高速(480Mbps)和全速(12Mbps)模式.该接口可用于AT ...

  7. 龙尚U9507 4G模块调试小结

    最近在调U9507模块,调试一个模块,其主要步骤如下: 1.首先要查看其数据手册,看其工作电压,该模块工作电压为3.3~4.2V,要先用万用表测其供电电压是否正常(注要一定要达3.3V以上,因为有些模 ...

  8. EC20 4G模块调试注意事项调试说明

    注意: (1)要持续对EC20固件版本进行升级,要保证远程升级方法&工具: 争取使用最新的固件版本 [参考下面"OTA升级"] (2)三网通是自动注网的,无需手动设置APN ...

  9. 4G模块使用记录SIMCOM7070

    目录 一.概述 二.AT指令流程 2.1 上电 2.2 MQTT 2.3 HTTP 三.遇到的问题 3.1. AT+CREG?查询注网状态返回ERROR 3.2. 注册网络被拒绝 4. 连接成功后,数 ...

最新文章

  1. 文本查找查找命令的grep 、egrep、fgrep用法的详解
  2. DLL返回自定义结构的数组
  3. GDB调试:观察点(数据断点)【GDB调试】
  4. Python语法点滴
  5. 为什么程序员总是把圣诞节与万圣夜搞混
  6. asp.net mvc 用Redis实现分布式集群共享Session。
  7. 用jQuery插件jVectorMap制作中国省份区域图
  8. jQuery版三级联动案例
  9. 深度学习——夏侯南溪的深度神经网络的调参日志
  10. 面试题:把字符串转换为整数
  11. 国产物联网操作系统崛起!
  12. 按键精灵定义全局变量_按键精灵全局环境变量
  13. 微信小程序圣诞帽_完成圣诞快乐Web应用程序界面
  14. 机器人视觉系统分为哪几种,主要包括哪些关键技术?
  15. 2017,知识与财富
  16. 什么是大数据及其背后的关键技术
  17. 中序遍历二叉树的非递归实现(利用栈)
  18. 简述面向过程与面向过程的思想
  19. javascript运算符_双重否定运算符是什么! 用JavaScript做?
  20. 一个被放大43亿倍的DDoS数据包会产生怎样的结果?

热门文章

  1. 电影院选座的座位写法
  2. JQuery Mobile 样式刷新
  3. Windows更新+中间人=远程命令执行
  4. 字节跳动、小米、吉利汽车、同程艺龙、沙特阿美等公司高管变动
  5. Java小白入门第十五弹 酒店管理系统(实例一)
  6. 刚刚出新的Kubernetes 却曝出了“高危”安全漏洞;亚马逊将推免费新闻视频服务,对标苹果 | 极客头条...
  7. 千万级用户产品更名为“亿图脑图 MindMaster”背后:脑图软件市场高速增长
  8. 高泽龙:河北省石家庄市打造中国元宇宙示范城区的规划和建议
  9. 企业即时沟通软件有哪些?要如何选择?
  10. 2009年“中国安防10大品牌”榜