最近在调试Quectel(移远)的4G 模块 ,刚开始真是毫无头绪,毕竟第一次搞。
使用的是 EG25-G 的模,我的系统是64 位的系统
了解了这个是通过USB设备进行工作的,知道了这个,是个关键。那就在USB 的对应驱动里搞事情。
首先看框架图
从框架图可知,这需要添加 USB 的驱动,也需要添加网卡驱动。
移远会提供一些资料,指导性文档以及 .c文件。
1、参考《Quectel_LTE&5G_Linux_USB_Driver_User_Guide_V2.0.pdf》 该指导文件,修改USB 中的代码的内容。
(1)在kernel/msm-4.19/drivers/usb/serial/option.c 文件中添加 VID 、PID 等
(2)在kernel/msm-4.19/drivers/usb/serial/option.c 以及 kernel/msm-4.19/drivers/usb/serial/usb_wwan.c 文件中添加零包机制
(3)在kernel/msm-4.19/drivers/usb/serial/option.c 文件中添加重置恢复机制
在kernel/msm-4.19/drivers/usb/serial/usb-serial.c 中添加 .reset_resume = usb_serial_resume,
(4)看是否需要 Use MBIM, GobiNet or QMI_WWAN Driver ,根据文档中的提示按需处理
2、参考《Quectel_LTE&5G_Linux_USB_Driver_User_Guide_V2.0.pdf》 该指导文件,修改usb网卡的内容
移远会提供一个 qmi_wwan_q.c 的文件,将该文件复制到 kernel/msm-4.19/drivers/net/usb/ 该目录下,然后修改 该目录下的Makefile 文件。
然后 make bootimage 看是否报错,有报错就修改错误。
无误后,进行全编译看是否会报错。能全编译过后,将软件烧录。
3、然后根据《Quectel_Android_RIL_Driver_User_Guide_V1.9.pdf》指导文件,将移远提供的库文件 libreference-ril.so adb push到 /vendor/lib64/目录下,然后试试看能否上网或者拨打电话了(得看你所使用的模块是否能够支持打电话或者使用数据)。
如果是拨号的方式,应该还会使用到提供的库文件中的 chat ip-down ip-up 这几个,也根据指导文件,push到对应的目录下。然后重启设备。
4、如果在第三步中,验证可以上网了,也就说明改模块可用了。那就将第三步中的手动操作的部分,写成代码,然后编译的时候就会自动打包进安装包中了。
首先在 system/core/roodir/init.rc 文件中 添加以下代码
#此处的是Android10 的,低于 Android 8 版本的有另外的指令
service flash_recovery /system/bin/install-recovery.sh
class main
oneshot
#Android 10
service ril-daemon /vendor/bin/hw/rild -l /vendor/lib64/libreference-ril.so
class main
user root
group radio cache inet misc audio sdcard_rw log
capabilities BLOCK_SUSPEND NET_ADMIN NET_RAW
#低于Android 8,则写入以下代码
service ril-daemon /vendor/bin/hw/rild -l /vendor/lib64/libreference-ril.so
class main
socket rild stream 660 root radio
socket rild-debug stream 660 radio system
如果找不到该文件,可以使用 godir init.rc 命令试试看。如果存在多个,可以都看看,以确保做了无效的代码输入。
然后将 移远提供的库文件 libreference-ril.so 复制 hardware/ril/extr_reference-ril/ 该目录下。然后进行全编译。
可能会发现,全编译之后,hardware/ril/extr_reference-ril/ 的文件并没有打包安装包中,因为刷机之后并不能上网。那可能是原先存在的文件,没有被编译进去,使用以下命令删除,再重新全编译。
find out/target/product/ -name *ril* | xargs rm -rf
rm -rf out/target/product/kona/system*
rm -rf out/target/product/kona/vendor*
rm -rf out/target/product/kona/super*
rm -rf out/target/product/kona/product*
rm -rf out/target/product/qssi/ve*
rm -rf out/target/product/qssi/system*
然后刷机,是不可以在系统设置中看到了运营商名称?看到了IP 地址?看到了网络的图标?恭喜你,该模块功能调通了。
总结:
1、移植USB 部分的代码,添加VID 、PID
2、移植网卡驱动代码
3、移植 libreference-ril.so 到指令路径
4、全编译,刷机
调试方法:
在开发过程当中,需要知道自己的调试步骤到哪了,哪一步是否OK
一、在第1部的调试过程中,如何知道 USB 设备已经找到?
开机完成后,adb shell 进设备, 输入 dmesg (消息太多的话,也可以 dmesg | grep usb)
其中框红的地方,就是你所添加模块的 VID 、PID 部分
如果有这个打印了,说明USB 设备是找到的。接下来就可以进行 AT 指令的测试
打开一个命令行窗口
xxxx# adb shell
root# cat /dev/ttyUSB2
然后多开一个命令行窗口
xxx # adb shell
root# echo "AT+ GMI \r\n" > /dev/ttyUSB2
在cat的窗口上有对应的回应,那就说明是OK
二、怎样知道网卡添加成功了?
通过 dmesg 命令查看 有 qmi_wwan_q 这样的关键字 打印,那就说明网卡也是添加成功的类。
三、adb push 文件的是否,返回失败,没法push 文件进系统,咋搞?
执行这几行命令后,再push 试试
adb disable-verity
adb reboot
adb remount
所需的几个文件,在我的博客下载页中 Quectel4GFiles.tar.gz