RK3588-Android 12添加4G通信
文章目录
所使用3588开发板为临滴LCB3588开发板,根据其Android11源码进行修改添加
1. 相关驱动添加 — 挂载EC20硬件
添加 USB接口 EC20 进行 4G 通信需要先将硬件设备挂载到系统内核上。
1.1. qmi_wwan_q 驱动
qmi_wan
是 Linux 内核中的一个 USB 驱动程序,用于支持基于 QMI(Qualcomm MSM Interface)协议的 USB 无线宽带设备。驱动文件源码:Quectel_Linux_Android_QMI_WWAN_Driver_V1.2.6.zip
将 qmi_wwan_q.c
添加到 kernel-5.10/drivers/net/usb/qmi_wwan_q.c 目录下
-
对应 Makefile 修改
diff --git a/kernel-5.10/drivers/net/usb/Makefile b/kernel-5.10/drivers/net/usb/Makefile index 99fd12b..32228ef 100644 --- a/kernel-5.10/drivers/net/usb/Makefile +++ b/kernel-5.10/drivers/net/usb/Makefile @@ -37,7 +37,8 @@ obj-$(CONFIG_USB_NET_CX82310_ETH) += cx82310_eth.o obj-$(CONFIG_USB_NET_CDC_NCM) += cdc_ncm.o obj-$(CONFIG_USB_NET_HUAWEI_CDC_NCM) += huawei_cdc_ncm.o obj-$(CONFIG_USB_VL600) += lg-vl600.o -obj-$(CONFIG_USB_NET_QMI_WWAN) += qmi_wwan.o +#obj-$(CONFIG_USB_NET_QMI_WWAN) += qmi_wwan.o +obj-$(CONFIG_USB_NET_QMI_WWAN) += qmi_wwan_q.o obj-$(CONFIG_USB_NET_CDC_MBIM) += cdc_mbim.o obj-$(CONFIG_USB_NET_CH9200) += ch9200.o obj-$(CONFIG_USB_NET_AQC111) += aqc111.o
1.2. option.c 添加 EC20
向 option.c 中添加 EC20 相关信息并重新编入内核。 (重新提供修改后的option.c,见文未)
1.3. 验证 EC20 挂载
-
编译完成后使用 adb shell 验证驱动是否编入内核( wwan0 设备为 EC20 的网络设备 ):
evk_8mp:/ $ adb shell evk_8mp:/ $ ifconfig wwan0 wwan0 Link encap:UNSPEC Driver qmi_wwan_q NOARP MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 TX bytes:0
2. 添加RIL库
Android 12使用的RIL版本:Quectel_Android_RIL_Driver_V3.6.14_master_Release_ndk_20231013_10_54
-
RIL 编入 Android 系统:
将特定版本的 libreferece-ril.so 拷贝到SDK device/rockchip/common/libquectel-ril/arm64-v8a/libreferece-ril.so 目录下编译;
注:ndk版本只需要修改 libreferece-ril.so ,libril.so不需要修改。
2.1. RIL 服务声明
用于启动 RIL Daemon(Radio Interface Layer Daemon)。(RIL Daemon 是 Android 系统中用于处理与无线电通信(比如移动网络)相关的功能的后台进程。)在 device/rockchip/rk3588/init.rk3588.rc 目录下添加如下内容:
service ril-daemon /vendor/bin/hw/rild -l <libreference-ril path>
class main
user radio
group radio cache inet misc audio sdcard_rw log
capabilities BLOCK_SUSPEND NET_ADMIN NET_RAW
-
service
表明这是一个服务声明 -
vendor.ril-daemon
是服务的名称,表示这是供应商(vendor)提供的 RIL Daemon 服务 -
/vendor/bin/hw/rild
是服务的可执行文件路径,即 RIL Daemon 的二进制文件的位置 -
-l /vendor/lib64/libreference-ril.so
表示 RIL Daemon 将加载的库文件的路径,这里是libreference-ril.so
-
**
class main
**指定了服务的类别,这里是main
类别。main
类别通常表示这是一个主要的系统服务 -
**
user radio
**指定了服务的运行用户,这里是radio
用户 -
**
group radio cache inet misc audio log readproc wakelock
**指定了服务的运行组,这里列出了多个组,包括radio
、cache
、inet
、misc
、audio
、log
、readproc
和wakelock
-
**
capabilities BLOCK_SUSPEND NET_ADMIN NET_RAW
**指定了服务的 Linux 能力(Linux capabilities)。这些能力用于提供特定的权限。在这里,包括BLOCK_SUSPEND
、NET_ADMIN
和NET_RAW
2.2. 配置自动RILD拨号
Android系统中的 /vendor/etc/vintf/manifest.xml 文件一般是由SDK中 device/设备名/manifest.xml 进行导入,RK3588厂商对其进行了定制修改,由 device/rockchip/common/manifests/manifest_level_31.xml 进行配置。
在 device/rockchip/common/manifests/manifest_level_31.xml 中添加如下内容:
<hal format="hidl">
<name>android.hardware.radio</name>
<transport>hwbinder</transport>
<fqname>@1.1::IRadio/slot1</fqname>
<fqname>@1.1::ISap/slot1</fqname>
</hal>
修改后在 hardware/interfaces/compatibility_matrices/compatibility_matrice.6.xml 中查看是否兼容 @1.1::IRadio/slot1 和 @1.1::ISap/slot1 ,修改如下:
<hal format="hidl" optional="true">
<name>android.hardware.radio</name>
<version>1.6</version>
<version>1.5</version>
<version>1.4</version>
<version>1.3</version>
<version>1.2</version>
<version>1.1</version> <!-- 兼容添加:1.1::IRadio/slot1 -->
<interface>
<name>IRadio</name>
<instance>slot1</instance> <!-- 兼容添加:1.1::IRadio/slot1 -->
<instance>slot2</instance>
<instance>slot3</instance>
</interface>
</hal>
<hal format="hidl" optional="true">
<name>android.hardware.radio</name>
<version>1.1</version> <!-- 兼容添加:1.1::ISap/slot1 -->
<interface>
<name>ISap</name> <!-- 兼容添加:1.1::ISap/slot1 -->
<instance>slot1</instance>
</interface>
</hal>
<hal format="hidl" optional="true">
<name>android.hardware.radio.config</name>
<!--
See compatibility_matrix.4.xml on versioning of radio config HAL.
-->
<version>1.1</version>
<!-- <version>1.2</version> -->
<version>1.0</version>
<interface>
<name>IRadioConfig</name>
<instance>default</instance>
</interface>
</hal>
3. 设备文件权限和属性的设置
EC20设备会转出4个USB串口,若不修改设备权限会导致上层无法使用。
-
临时权限
chmod 777 /dev/ttyUSB* # 临时使用直接chmod进行权限开放
- **永久权限**
添加 **mkcombinedroot/vendor/ueventd.rc** 内容如下:
```sh
/dev/ttyUSB* 0660 radio radio
/dev/ttyACM* 0660 radio radio
/dev/cdc-wdm* 0660 radio radio
/dev/qcqmi* 0660 radio radio
/dev/cdc-acm* 0660 radio radio
/dev/ttyUSB* 0660 radio radio
# 设备文件 设备权限 设备所有者 设备所有者所在组
4. 验证
编译完成后烧写至开发板:
asu@asu:~$ adb root & adb remount & adb shell
rk3588_s: cat /vendor/etc/vintf/manifest.xml # 复制到本机修改内容如5.1
rk3588_s: adb push manifest.xml /vendor/etc/vintf/ # push到3588
rk3588_s: adb shell
rk3588_s: sync
rk3588_s: find -name "*.xml" 2>/dev/null | xargs grep IRadio
# 查看是否修改<fqname>@1.1::IRadio/slot</fqname>
rk3588_s: reboot # 重启更新修改
asu@asu:~$ adb root & adb remount & adb shell
rk3588_s: ifconfig -a # 查看是否有wwan0 网络设备(需要多等一会)
rk3588_s: ping www.baidu.com # ping通即通信成功
若通信失败,修改 vendor/etc/vintf/manifest.xml 中 android.hardware.radio 部分,如下:
<hal format="hidl">
<name>android.hardware.radio</name>
<transport>hwbinder</transport>
<fqname>@1.1::IRadio/slot1</fqname> #修改为1.1
<fqname>@1.1::ISap/slot1</fqname> #修改为1.1
</hal>
修改后再次重启测试。
5. 上述修改所需文件获取
相关文件存放在合肥服务器:192.168.10.100/upload/data/RK3588-Android12添加4G所需文件.zip
RK3588-Android12添加4G所需文件/
├── option.c
├── qmi_wwan_q.c
├── Quectel_Android_RIL_Driver_V3.6.14_master_Release.rar
└── Quectel_Linux_Android_QMI_WWAN_Driver_V1.2.6.zip
0 directories, 4 files
使用资源与IMX8MP通用
标签:USB,RK3588,RIL,添加,radio,EC20,4G,NET,1.1 From: https://blog.csdn.net/Fearlessness/article/details/140689827