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

这篇具有很好参考价值的文章主要介绍了【RK356X Android11】开发之4G模块(广和通模块NL668)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

  4G模块主要利用于无线上网和通话功能的移动设备,或者用以没有WIFI或者以太网的地方;这篇文章主要以广和通NL668为例,讲述调试4G上网过程,通话功能暂时不讲;4G上网模块一般是以USB接口呈现,所以也是个热插拔设备;

一、Kernel调试

1. 查看系统是否支持该4G NL668模块
  ls /dev/ttyUSB*
  看下是否有相对应的节点:
【RK356X Android11】开发之4G模块(广和通模块NL668)  没有找到设备虚拟串口节点,说明底层驱动需要移植NL668模块驱动,实际上是添加该模块的PID和VID,该模块走的是欢迎大家访问USB接口;
2.底层驱动调试
(1)第一步当然是找4G模块供应商提供一份调试资料和对应系统使用的RIL库;
(2)根据驱动一直的文档《Fibocom_RIL集成指南_Android_V2.2.pdf》进行调试;
(3)添加广和通NL668模块的PID和VID

路径:kernel/drivers/usb/serial/option.c
static const struct usb_device_id option_ids[] = {
+ 	{ USB_DEVICE(0x1508, 0x1001) }, /* Fibocom NL668 */

(4)过滤机制
  Android 11系统自带过滤机制,特殊情况下需要另行添加。
(5)配置串口驱动的Linux内核
  a,执行cd kernel命令,进入内核根目录。
  b,执行make menuconfig命令。
  c,在弹出来的界面中依次选择:Device Drivers > USB support > USB Serial Converter support。
【RK356X Android11】开发之4G模块(广和通模块NL668)
【RK356X Android11】开发之4G模块(广和通模块NL668)
【RK356X Android11】开发之4G模块(广和通模块NL668)
  d,选中如下USB driver for GSM and CDMA modems组件后,保存推出。
【RK356X Android11】开发之4G模块(广和通模块NL668)
  注意:关于Linux 内核配置以客户系统配置规则为准,本文描述的方法仅供参考。
(6)DTS配置,RM310的参考配置。

../../../dts/rockchip/rk**.dtsi:
rk_modem: rk-modem {
	compatible="4g-modem-platdata";
	pinctrl-names = "default";
	pinctrl-0 = <&lte_vbat &lte_power_en &lte_reset>;
	4G,vbat-gpio = <&gpio4 RK_PD0 GPIO_ACTIVE_HIGH>;
	4G,power-gpio = <&gpio4 RK_PC6 GPIO_ACTIVE_LOW>;
	4G,reset-gpio = <&gpio4 RK_PD4 GPIO_ACTIVE_LOW>;
	status = "okay";
 };

(7)4G模块的驱动控制,可以参考RM310。

kernel/drivers/net/lte/lte_rm310.c

(8)配置kernel支持ECM 网卡方式和模块交互(推荐使用 ECM 驱动);
  修改内核配置选项:

CONFIG_USB_NET_DRIVERS=y 
CONFIG_USB_USBNET=y 
CONFIG_NETDEVICES=y 
CONFIG_USB_NET_CDCETHER=y

    模块连接到目标板,主机会枚举出一个 ethx 的网络设备。RM310 模块,可以自动拨号上网,自动注册网络,并附着 PDP 业务。
3.设备加载检测
  NL668 4G 模块,PID:0x1508,VID:0x1001。模块成功上电后,枚举出 ttyUSB0~ttyUSB3,用于调试口、AT 口、上网口。拨号后,生成 lte0 网口设备。若加载成功,会有以下内容返回。
  ls /dev/  或者  ls /dev/yytUSB*
【RK356X Android11】开发之4G模块(广和通模块NL668)

二、Android层调试

1.在引入新库之前先将RK源码中,系统启动时启动RILD的进程关闭

--- a/hardware/ril/rild/init.rc
+++ b/hardware/ril/rild/init.rc

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

2.添加NL668模块的RIL库和相关组件,以及存放位置
  需要模组厂提供RIL库libreference-ril.so,另外需组件chat、ip-down、ip-up。若模组厂只提供RIL库,其余组件可使用RK自带的组件。
  注意:因为RK源码会编译生成RIL库,库名字也是libreference-ril.so,因此需要将模组厂的库修改名字:libreference-ril-nl668.so。
  存放位置:(一般存放位置,也可自行选择目录,最终也是拷贝到out目录下)

vendor/rockchip/common/phone/bin/chat
vendor/rockchip/common/phone/etc/ppp/ip-down
vendor/rockchip/common/phone/etc/ppp/ip-up
vendor/rockchip/common/phone/lib/libreference-ril-nl668.so

3.RIL库和相关组件,配置到编译文件中

--- a/vendor/rockchip/common/phone/phone.mk
+++ b/vendor/rockchip/common/phone/phone.mk

 CUR_PATH := vendor/rockchip/common
 
 #########################################################
 #   3G Dongle SUPPORT
 #########################################################
- PRODUCT_COPY_FILES += \
-    $(CUR_PATH)/phone/etc/ppp/ip-down:system/etc/ppp/ip-down \
-    $(CUR_PATH)/phone/etc/ppp/ip-up:system/etc/ppp/ip-up \
-    $(CUR_PATH)/phone/etc/ppp/ip-down:system/etc/ppp/ip-down \
-    $(CUR_PATH)/phone/etc/ppp/ip-up:system/etc/ppp/ip-up \
-    $(CUR_PATH)/phone/etc/ppp/call-pppd:system/etc/ppp/call-pppd \
-    $(CUR_PATH)/phone/etc/operator_table:system/etc/operator_table
 
+PRODUCT_COPY_FILES += \
+    $(CUR_PATH)/phone/etc/ppp/ip-down:system/etc/ppp/ip-down \
+    $(CUR_PATH)/phone/etc/ppp/ip-up:system/etc/ppp/ip-up \
+    $(CUR_PATH)/phone/etc/ppp/call-pppd:system/etc/ppp/call-pppd \
+    $(CUR_PATH)/phone/etc/operator_table:system/etc/operator_table \
+	 $(CUR_PATH)/phone/lib/libreference-ril-nl668.so:vendor/lib64/libreference-ril-nl668.so

4.radio配置
(1)库和组件加载好后,需要启动ril-daemon服务,可以在hardware/ril/rild/init.rc指定,

--- a/hardware/ril/rild/init.rc
+++ b/hardware/ril/rild/init.rc

-service vendor.ril-daemon /vendor/bin/hw/rild
-    class main
-    user radio
-    group radio cache inet misc audio log readproc wakelock
-    capabilities BLOCK_SUSPEND NET_ADMIN NET_RAW
+service ril-daemon /vendor/bin/hw/rild -l /vendor/lib64/libreference-ril-nl668.so -- -d /dev/ttyUSB0
+    class main
+    socket rild stream 660 root radio
+    socket rild-debug stream 660 radio system
+    user root
+    group radio cache inet misc audio sdcard_rw log

  也可以在/device/rockchip/目录指定:

- rild.libpath=/system/lib/libril-rk29-dataonly.so \ 
- rild.libargs=-d /dev/ttyACM0 \
+ vendor.rild.libpath=/vendor/lib64/libreference-ril-nl668.so \
+ vendor.rild.libargs=-d /dev/ttyUSB0 \

(2)配置使用网络类型和指定的RIL库

--- a/device/rockchip/rk356x/device.mk
+++ b/device/rockchip/rk356x/device.mk

PRODUCT_PROPERTY_OVERRIDES += \
          ro.ril.ecclist=112,911 \
          ro.opengles.version=196610 \
          wifi.interface=wlan0 \
+         rild.libpath=/vendor/lib64/libreference-ril-nl668.so \
+         rild.libargs=-d /dev/ttyUSB0 \
          ro.audio.monitorOrientation=true \
          debug.nfc.fw_download=false \
          debug.nfc.se=false \

5.打开BOARD_HAS_RK_4G_MODEM开关
  打开BOARD_HAS_RK_4G_MODEM开关,是系统开启4G服务功能。

--- a/device/rockchip/common/BoardConfig.mk
+++ b/device/rockchip/common/BoardConfig.mk

#for rk 4g modem
-BOARD_HAS_RK_4G_MODEM ?= false
+BOARD_HAS_RK_4G_MODEM ?= true

6.拨号方式
  根据模组厂提供的文档,修改拨号方式。

PRODUCT_PROPERTY_OVERRIDES += \
    ril.fibocom.dialmode=1 (ECM拨号方式) \
    ril.fibocom.dialmode=0 (PPP拨号方式) \  /*拨号方式二选一*/
    ril.fibocom.usbmode=18 (USB端口模式)

  串口下getprop可以查看当前添加的属性。
7.Android 11.0 注意事项
  device/rockchip/common 目录,打开宏 BOARD_HAS_RK_4G_MODEM,不需要打开
BOARD_HAVE_DONGLE。vendor.rild.libpath 修改为模组提供的库的路径。
  以 RK356x 为例,在/device/rockchip/rk356x 对应的配置文件中加入以下修改:

--- a/device/rockchip/rk356x/overlay/frameworks/base/core/res/res/values/config.xml
+++ b/device/rockchip/rk356x/overlay/frameworks/base/core/res/res/values/config.xml

     <!-- 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>

  该配置文件是修改设置应用和下拉框没有移动数据选项。
  设置->网络和互联网->"移动网络"
8.优选网络接入模式
  设置网络接入模式优选:ro.telephony.default_network
  (1)若需要支持 5G,请在/device/rockchip/……/device.mk,设置
ro.telephony.default_network = 33 即 NETWORK_MODE_NR_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA。
  (2)优选网络接入模式为 4G,设置
ro.telephony.default_network = 9 即 NETWORK_MODE_LTE_GSM_WCDMA。
9.编译Android升级
10.模块测试
  (1)查看RIL库是否加载成功
    在log中查看是否有以下打印信息:

.../hardware/ril/rild/rild.c

// ril/socket id received as -c parameter, otherwise set to 0
    const char *clientId = NULL;

    RLOGD("**RIL Daemon Started**");
    RLOGD("**RILd param count=%d**", argc);

    umask(S_IRGRP | S_IWGRP | S_IXGRP | S_IROTH | S_IWOTH | S_IXOTH);
    for (i = 1; i < argc ;) {

  (2)模块测试
    测试 AT 功能,查询网络驻留状态,SIM 卡状态,PDP 激活情况等。
【RK356X Android11】开发之4G模块(广和通模块NL668)

#microcom -s 115200 /dev/ttyUSB1

    SIM 卡是否正常识别:

AT+CPIN?
+CPIN: READY
OK

    查询 CS 域注册状态:

AT+CREG?
+CREG: 2,1,"27A3","2C3DE15",7
OK

    查询 EPS 域注册状态:

AT+CEREG? 
+CEREG: 1,"252C","0A26C916",7
OK

    确认 4G 系统状态:

AT^SYSINFO 
^SYSINFO: 2,3,0,17,1,7
OK

    查询 PDP 激活信息:

AT+CGDCONT?
+CGDCONT:1," IPV4V6 "," cmnet ","10.27.12.98",0,0,,,,
OK

    注意:AT指令的使用,例如查看USB端口号:

echo -e "AT+GTUSBMODE=18\n" > /dev/ttyUSB2
cat /dev/ttyUSB2 &

三、移植过程

1.获取 log 信息
  打开串口,输入以下命令,查看串口信息

logcat –b radio & //ril log
logcat –s pppd & //ppp 拨号 log
logcat –c –b radio & //清除以前 raido log
logcat -b system -b main -b radio -v time &// 完整的系统 logcat

四、问题与解决

1.ril_daemon服务不断在重启
  打印的kernel信息如下:

init: Control message: Could not find 'android.hardware.radio@1.1::IRadio/slot1' for ctl.interface_start from pid: 144 (/system/bin/hwservicemanager)
init: Control message: Could not find 'android.hardware.radio@1.1::IRadio/slot1' for ctl.interface_start from pid: 144 (/system/bin/hwservicemanager)
init: Control message: Could not find 'android.hardware.radio@1.1::IRadio/slot1' for ctl.interface_start from pid: 144 (/system/bin/hwservicemanager)
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

  然后查看logcat信息,发现系统加载/vendor/lib64/libreference-ril-nl668.so时会崩溃;查看这个RIL库是否适合在Android 11上使用,若不支持Android 11需找模组厂提供新的库。
  若只是单纯报错一下内容,则查看是否接入4G模块或于硬件接触是否良好。

[  103.991016] init: Control message: Processed ctl.interface_start for 'android.hardware.radio@1.1::IRadio/slot1' from pid: 144 (/system/bin/hwservicemanager)
[  104.992025] init: Control message: Processed ctl.interface_start for 'android.hardware.radio@1.1::IRadio/slot1' from pid: 144 (/system/bin/hwservicemanager)
[  105.992868] init: Control message: Processed ctl.interface_start for 'android.hardware.radio@1.1::IRadio/slot1' from pid: 144 (/system/bin/hwservicemanager)
[  106.993940] init: Control message: Processed ctl.interface_start for 'android.hardware.radio@1.1::IRadio/slot1' from pid: 144 (/system/bin/hwservicemanager)

2.获取APN数据为空,导致APN设置失败不注网
  报相关错误:

07-12 17:23:48.361 D/Phone   (  866): getImsRegistrationTechnology =-1
07-12 17:23:48.362 E/DCT-C-0 (  866): getPreferredApnSetId: cursor is null
07-12 17:23:48.362 D/DCT-C-0 (  866): hasMatchedTetherApnSetting: APNs=[]
07-12 17:23:48.380 D/DCT-C-0 (  866): shouldRestrictDataForEcbm: isInEcm=false isInImsEcm=false

  因系统获取不到APN数据,没法匹配SIM卡对应的APN,导致无法注网的解决办法:

--- 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.java

public class DcTracker extends Handler {
 
         if (!isCarrierConfigApplied()) {
             log("onCarrierConfigChanged: Carrier config is not ready yet.");
-            return;
+            //return;
         }

3.上网成功,但状态栏上移动信号图标显示只有空三角图标显示
  修改qi-ril.conf文件:LTE_ls_Report_SignalStrength=1


参考:[RK3568 Android11] 开发之4G模块(移远模块)
文章来源地址https://www.toymoban.com/news/detail-401569.html

到了这里,关于【RK356X Android11】开发之4G模块(广和通模块NL668)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • RK356x 在uboot下设置GPIO引脚默认电平

    在uboot启动的时候需要把某个CPU引脚拉高或者拉低,促使某个功能能正常运行。 思路一 首先打开RK356X的SDK软件包,查看一下uboot源码,这次我先在u-boot/common/board_f.c和board_r.c文件上添加GPIO口设置,虽然添加了gpio_direction_output()或者gpio_set_value()类似的GPIO设置的函数,但是用万用

    2024年02月10日
    浏览(44)
  • RK356X 解除UVC摄像头预览分辨率1080P限制

      RK3566 + Android 11     UVC: USB video class(又称为USB video device class or UVC)就是USB device class视频产品在不需要安装任何的驱动程序下即插即用,包括摄像头、数字摄影机、模拟视频转换器、电视卡及静态视频相机。 测试代码: 打印出来后显示支持的预览分辨率如下: 然而,把

    2023年04月22日
    浏览(54)
  • 广和通l610二次开发|广和通l610 CAT.1模组opencpu开发《三》阿里云物联网平台mqtt动态注册

    使用模组的IMEI作为设备的name,采用动态注册自动在案例云平台上注册设备 官网参考文档 硬件平台:广和通L610 opencpu模组 协议:mqtt支持TLS加密连接 平台:阿里物联网平台 平台中产品创建需要启用动态注册功能 说明 目前,动态注册只支持使用TLS建立连接,不支持TCP直连。动

    2024年02月11日
    浏览(46)
  • RK356x之HDMI显示出现输出信号不稳定、花屏、出现红条纹现象

    芯片:rk356x系列 显示器: HDMI接口显示器 HDMI显示器接到控制板上可以显示,但是会出现时不时出现闪烁,红条纹(就好像之前我们家里大块电视上的条纹)。 猜想1:HDMI显示器可能坏了 猜想2: 电路板上的某些器件影响了HDMI输出信号 猜想3:HDMI线的长度也有可能导致信号输出不

    2024年02月12日
    浏览(41)
  • 广和通AI解决方案“智”赋室外机器人迈向新天地!

    大模型趋势下,行业机器人将具备更完善的交互与自主能力,逐步迈向AI 2.0时代,成为人工智能技术全面爆发的重要基础。随着行业智能化, 更多机器人应用将从“室内”走向“室外”,承担更多高风险、高智能工作。 复杂的室外环境对机器人要求更高,这对应用于室外机

    2024年01月19日
    浏览(43)
  • Android 出现4G模块无法上网问题

    作者简介: 一个平凡而乐于分享的小比特,中南民族大学通信工程专业研究生在读,研究方向无线联邦学习 擅长领域:驱动开发,嵌入式软件开发,BSP开发 作者主页:一个平凡而乐于分享的小比特的个人主页 文章收录专栏:RK3568_Android11_驱动开发,此专栏为RK3568开发板And

    2024年04月23日
    浏览(40)
  • rk3588/rk356x/rv1109/rv1126 live555移植+mpp编译 rtsp拉流

    本文主要是为了记录一下rk板子的踩坑日记。 项目主要是rk3588 rtsp拉流。 1.下载MPP源码:https://github.com/rockchip-linux/mpp 2.rk3588/rk356x的板子进入Mpp源码目录 mpp/build/linux/aarch64 (rk3588/rk356x是64位板子)中,修改 arm.linux.cross.cmake 文件中的配置 修改 make-Makefiles.bash 的配置,主要改

    2023年04月19日
    浏览(43)
  • RK3588 Android 12 北斗模块调试

    北斗模块用的MTK RS1612M3 , http://www.sragps.com/web/down.html,可以查看相关资料,用串口和系统通讯 Android12中主要包括串口设备树修改,GPS2.0加载,gps.default.so编译和上层应用测试,以下主要记录测试中碰到的难点 板子上用的串口8,因此打开uart8的设备树配置 uart8 { status = “okay”;

    2024年02月15日
    浏览(45)
  • rk3568 安卓11 修改android id

    frameworksbasepackagesSettingsProvidersrccomandroidproviderssettingsSettingsProvider.java 系统应用获取的android id 直接写死 上层普通应用 android id跟着sn变化 android id跟着IMEI变化

    2024年04月28日
    浏览(49)
  • 使用4G通信模块和MQTT协议,完成物联网设备开发。

    (1)安装并使用4G模块通信模块,建立microPython开发环境; (2)使用提供的Demo开发例程,使用MQTT传输协议连接阿里或腾讯网站,完成物联网设备开发。 (3)将温湿度信息上传到网站; (4)手机APP查看数 这是第一步,在阿里云平台创建产品和设备,用来将实际的设备数据

    2024年02月04日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包