作者简介: 一个平凡而乐于分享的小比特,中南民族大学通信工程专业研究生在读,研究方向无线联邦学习 擅长领域:驱动开发,嵌入式软件开发,BSP开发 作者主页:一个平凡而乐于分享的小比特的个人主页 文章收录专栏:RK3568_Android11_驱动开发,此专栏为RK3568开发板Android11系统开发,学习记录 欢迎大家点赞  收藏 ⭐ 加关注哦!

背景:

出现这个问题之前,4G模块EM05在Linux系统可以通过ECM模式上网,但是到了Android系统发现usb0网络无法获取到IP地址,从而无法上网。在Windows和Linux系统下会有后台进程帮我们自动获取IP,只需要我们把模块设置成ECM模式就可以了,但是Android下没有这个服务。

RILD介绍

Android系统带的RIL机制,Android RIL提供了Android电话服务和无线电硬件之间的抽象层。Android RIL在HAL(Hardware Abstract Layer)层(C++层)由三个部分组成:

RILD是系统的守护进程,主要用于初始化LIBRIL以及启动厂商自定义的Vendor RIL;LIBRIL被RILD初始化完成后,用于与Vendor RIL之间进行交互,负责接收、发送指令;Vendor RIL是第三方厂商自定义的一个库,用于向Modem发送指令或者接收来自LIBRIL或者Modem的指令。

三者之间的关系图如下所示: 从这里可以看到,RILD在启动时,负责将LibRil以及Vendor RIL进行初始化,将相应的回调函数以及调用接口进行注册,LibRIL向vendor RIL提供了接口RIL_Env,当Vendor有消息时,利用该回调返回;而Vendor RIL 同样提供了接口RIL_RadioFunctions,给LibRIl调用。 在Android系统下存在一个rild_damon这个守护进程,RILD(RIL Daemon)是系统的守护进程,系统已启动,就会一直运行。手机开机时,kernel完成初始化后,Android启动一个初始化进程Init用于加载系统基础服务,如文件系统,zygote进程,服务管家ServiceManager,以及RILD

解决方法:

在/home/android/rk3568/android11/hardware/ril/rild下存在一个rild.rc文件,在这个文件中配置了rild_damon这个服务,也是解决这个问题的关键。

获取移远公司提供的libreference-ril.so , 在系统执行rild可执行文件的时候会链接到这个动态库 将libreference-ril.so添到/home/android/rk3568/android11/vendor/rockchip/common/phone/lib目录下,并重命名为libreference-ril-em05.so 修改/home/android/rk3568/android11/vendor/rockchip/common/phone/phone.mk

(这里添加这个动态库的目的是让最后生成的根文件系统里的/vendor/lib64/下存在libreference-ril-em05.so,如果不存在这个动态库,rild_daemon守护进程会一直打印退出重启信息,直到/vendor/lib64/下存在该动态库)

修改/home/android/rk3568/android11/hardware/ril/rild/rild.rc

​ (从第一行可以看到,在启动ril-daemon这个服务的时候,系统会调用/vendor/bin/hw/rild程序,该程序需要链接到动态库)

修改好上面内容后,重新编译,烧录新的镜像到开发板中

测试结果:

将EM05上电(上电流程参考RK3568—4G模块驱动实验) 上电后会出现如下信息

(中间的denied信息是由于SELinux下权限问题,暂时先不用管)

我们通过ifconfig usb0查看usb0的信息

通过ping www.baidu.com测试上网功能

相关链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。