当前位置:   article > 正文

【随笔记】T507 Android10 EC200U-CN 4G Cat1 移植_ec200u qmi

ec200u qmi

基本信息

硬件信息

硬件平台:T507 (Android 10 Linux 4.9)

模组型号:EC200U-CN(Cat1)(展讯芯片)

相关文件

代理提供

longan/kernel/linux-4.9/drivers/net/usb/qmi_wwan_q.c
android/vendor/aw/public/prebuild/lib/librild/lib/lib32/libquectel-ril.so
android/vendor/aw/public/prebuild/lib/librild/lib/lib64/libquectel-ril.so
  • 1
  • 2
  • 3

内核驱动

longan/kernel/linux-4.9/drivers/net/usb/Makefile
longan/kernel/linux-4.9/drivers/net/usb/qmi_wwan_q.c
longan/kernel/linux-4.9/drivers/usb/serial/option.c
longan/kernel/linux-4.9/drivers/usb/serial/usb_wwan.c
  • 1
  • 2
  • 3
  • 4

系统适配

android/hardware/ril/rild/rild.rc
android/hardware/ril/rild/radio.xml
android/device/softwinner/common/sepolicy/vendor/rild.te
android/vendor/aw/public/prebuild/lib/librild/radio_common.mk
android/vendor/aw/public/prebuild/lib/librild/lib/lib32/libquectel-ril.so
android/vendor/aw/public/prebuild/lib/librild/lib/lib64/libquectel-ril.so
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

驱动类型

  • GobiNet Driver

    会生成 /dev/qcqmiX 设备节点和虚拟的 ethX 网卡(2.6.39 以下版本为 usbX)。

    内核配置 驱动文件
    CONFIG_USB_NET_DRIVERS
    CONFIG_USB_USBNET
    linux-4.9/drivers/net/usb/GobiNet/GobiUSBNet.c
    linux-4.9/drivers/net/usb/GobiNet/QMIDevice.c
    linux-4.9/drivers/net/usb/GobiNet/QMI.c
  • qmi_wwan_q Driver

    会生成 /dev/cdc-wdmX 设备节点和虚拟的 wwanX 网卡。

    内核配置 驱动文件
    CONFIG_USB_NET_DRIVERS
    CONFIG_USB_USBNET
    CONFIG_USB_NET_QMI_WWAN
    CONFIG_USB_WDM
    linux-4.9/drivers/net/usb/qmi_wwan.c
    linux-4.9/drivers/net/usb/qmi_wwan_q.c
  • ACM/ECM/RNDIS/NCM/MBIM Driver

    会生成 /dev/ttyUSB0 ~ /dev/ttyUSB6 和虚拟的 usbX 网卡。

    驱动类型 内核配置 驱动文件
    ACM CONFIG_USB_ACM linux-4.9/drivers/usb/serial/option.c
    linux-4.9/drivers/usb/serial/usb_wwan.c
    linux-4.9/drivers/net/usb/cdc-acm.c
    ECM CONFIG_USB_NET_DRIVERS
    CONFIG_USB_USBNET
    CONFIG_USB_NET_CDCETHER
    linux-4.9/drivers/usb/serial/option.c
    linux-4.9/drivers/usb/serial/usb_wwan.c
    linux-4.9/drivers/net/usb/cdc-ether.c
    RNDIS CONFIG_USB_NET_DRIVERS
    CONFIG_USB_USBNET
    CONFIG_USB_NET_CDCETHER
    linux-4.9/drivers/usb/serial/option.c
    linux-4.9/drivers/usb/serial/usb_wwan.c
    linux-4.9/drivers/net/usb/rndis_host.c
    NCM CONFIG_USB_NET_DRIVERS
    CONFIG_USB_USBNET
    CONFIG_USB_NET_CDCETHER
    linux-4.9/drivers/usb/serial/option.c
    linux-4.9/drivers/usb/serial/usb_wwan.c
    linux-4.9/drivers/net/usb/cdc_ncm.c
    MBIM CONFIG_USB_NET_DRIVERS
    CONFIG_USB_USBNET
    CONFIG_USB_NET_CDCETHER
    linux-4.9/drivers/usb/serial/option.c
    linux-4.9/drivers/usb/serial/usb_wwan.c
    linux-4.9/drivers/net/usb/cdc_mbim.c

驱动适配

这里使用 ECM 的驱动方式,参考《Quectel_UMTS_LTE_5G_Linux_USB_Driver_User_Guide_V3.0.pdf》

驱动移植

未涉及到电源控制,调试时使用的是开发板,手动给模组开机,因此下列会缺少电源控制的步骤。

  • 涉及文件列表

    // 需要修改的内核配置
    longan/kernel/linux-4.9/.config
    
    // 需要修改的驱动文件
    longan/kernel/linux-4.9/drivers/usb/serial/option.c
    longan/kernel/linux-4.9/drivers/usb/serial/usb_wwan.c
    
    // 需要用到的驱动文件
    longan/kernel/linux-4.9/drivers/net/usb/cdc-acm.c
    longan/kernel/linux-4.9/drivers/net/usb/cdc-ether.c
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
  • 在 option_ids 列表内增加 EC200U-CN 的 PID\VID, 这样才能识别到该 USB 设备为串口设备,文档内可查。

    // linux-4.9/drivers/usb/serial/option.c
    static const struct usb_device_id option_ids[] = {
         
    #ifdef SUPPORT_QUECTEL
    	{
          USB_DEVICE(0x2C7C, 0x0901) }, // support EC200U/EG915U
    #endif
        ......
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
  • 一个 USB 设备可以有多个功能不同的接口,在 option_ids 添加该设备的 PID\VID 后,会导致该设备的所有接口都会绑定到 USB Serial Option 驱动上,导致 USBNet 驱动接口无法正常工作,因此需要在 option_probe 中根据类码、接口索引、端点数量、子类码将 USBNet 的接口排除出来。

    // linux-4.9/drivers/usb/serial/option.c
    static int option_probe(struct usb_serial *serial, const struct usb_device_id *id)
    {
         
    	......	
    #ifdef SUPPORT_QUECTEL 
    	if (serial->dev->descriptor.idVendor == cpu_to_le16(0x2C7C)) {
         
    		__u16 idProduct = le16_to_cpu(serial->dev->descriptor.idProduct);
    		struct usb_interface_descriptor *intf = &serial->interface->cur_altsetting->desc;
    		if (intf->bInterfaceClass != 0xFF || intf->bInterfaceSubClass == 0x42) {
         
    			//ECM, RNDIS, NCM, MBIM, ACM, UAC, ADB
    			return -ENODEV;
    		
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/602275
推荐阅读
相关标签
  

闽ICP备14008679号