七 rk3568 android 11 ec20 4G驱动移植

一 内核驱动集成 

参考:Quectel_LTE&5G_Linux_USB_Driver_V1.0.zip

EC20 内核驱动有两个版本 ,一个是 qmi_wwan, 一个是 GOBNet , 这里用的是 qmi_wwan版本

1.1 添加 USBNET 驱动文件 

将驱动包里的 qmi_wwan_q.c  拷到 kernel/driver/net/usb/ 下

修改  kernel/driver/net/usb/Makefile, 增加

obj-$(CONFIG_USB_NET_QMI_WWAN) += qmi_wwan_q.o

修改 kernel/.config 

CONFIG_USB_NET_QMI_WWAN=y

1.2 修改 usb转串口

--- a/kernel/drivers/usb/serial/option.c

+++ b/kernel/drivers/usb/serial/option.c

@@ -596,9 +596,12 @@ static const struct usb_device_id option_ids[] = {

  { USB_DEVICE(0x2C7C, 0x0191) }, /* Quectel EG91 */

  { USB_DEVICE(0x2C7C, 0x0195) }, /* Quectel EG95 */

  { USB_DEVICE(0x2C7C, 0x0306) }, /* Quectel EG06/EP06/EM06 */

- { USB_DEVICE(0x2C7C, 0x0296) }, /* Quectel BG96 */

+ { USB_DEVICE(0x2C7C, 0x0512) }, /* Quectel EG12/EM12/EG18 */

+ { USB_DEVICE(0x2C7C, 0x0296) }, /* Quectel BG95 */

+ { USB_DEVICE(0x2C7C, 0x0700) }, /* Quectel BG96 */

  { USB_DEVICE(0x2C7C, 0x0435) }, /* Quectel AG35 */

  { USB_DEVICE(0x2C7C, 0x6002) }, /* Quectel EC200s */

+ { USB_DEVICE(0x2C7C, 0x0620) }, /* Quectel EG20 */

  { USB_DEVICE(0x2c7c, 0x6026) }, //EC200T

         { USB_DEVICE(0x2dee, 0x4d20) },  //for meige SLM790

         { USB_DEVICE(0x05c6, 0xf601) },  //for meige SLM730

@@ -2175,6 +2178,9 @@ static struct usb_serial_driver option_1port_device = {

 #ifdef CONFIG_PM

  .suspend           = usb_wwan_suspend,

  .resume           = usb_wwan_resume,

+ #if 1 //Added by Quectel

+        .reset_resume = usb_wwan_resume,

+       #endif

 #endif

 };



@@ -2217,6 +2223,19 @@ static int option_probe(struct usb_serial *serial,

  */

  if (device_flags & NUMEP2 && iface_desc->bNumEndpoints != 2)

  return -ENODEV;

+       #if 1 //Added by Quectel

+        //Quectel modules鈥檚 interface 4 can be used as USB network device

+       if (serial->dev->descriptor.idVendor == cpu_to_le16(0x2C7C)) {

+            //some interfaces can be used as USB Network device (ecm, rndis, mbim)

+             if (serial->interface->cur_altsetting->desc.bInterfaceClass != 0xFF) {

+                 return -ENODEV;

+             }

+            //interface 4 can be used as USB Network device (qmi)

+             else if (serial->interface->cur_altsetting->desc.bInterfaceNumber >= 4) {

+               return -ENODEV;

+             }

+         }

+#endif

修改 usb_wwan zero_packet 配置 

 /* Store the device flags so we can use them during attach. */

  usb_set_serial_data(serial, (void *)device_flags);

diff --git a/kernel/drivers/usb/serial/usb_wwan.c b/kernel/drivers/usb/serial/usb_wwan.c

index c604ff4546..752bb7f133 100644

--- a/kernel/drivers/usb/serial/usb_wwan.c

+++ b/kernel/drivers/usb/serial/usb_wwan.c

@@ -506,6 +506,7 @@ static struct urb *usb_wwan_setup_urb(struct usb_serial_port *port,

    usb_sndbulkpipe(serial->dev, endpoint) | dir,

    buf, len, callback, ctx);



+

  if (intfdata->use_zlp && dir == USB_DIR_OUT)

  urb->transfer_flags |= URB_ZERO_PACKET;



@@ -513,6 +514,9 @@ static struct urb *usb_wwan_setup_urb(struct usb_serial_port *port,

  if ((desc->idVendor == cpu_to_le16(0x1286) &&

      desc->idProduct == cpu_to_le16(0x4e3c)))

  urb->transfer_flags |= URB_ZERO_PACKET;

+

+ if (desc->idVendor == cpu_to_le16(0x2C7C))

+ urb->transfer_flags |= URB_ZERO_PACKET;

  }

  return urb;

 }

重新 编译烧写后 板子下应该能看到 EC20的 网络接口以及 AT 拨号串口

二 FIRMWARE 层驱动集成

2.1 AT 串口文件  /dev/cdc-wdm0

--- a/system/core/init/devices.cpp

+++ b/system/core/init/devices.cpp

@@ -492,7 +492,15 @@ void DeviceHandler::HandleUevent(const Uevent& uevent) {

            int device_id = uevent.minor % 128 + 1;

            devpath = StringPrintf("/dev/bus/usb/%03d/%03d", bus_id, device_id);

         }

-   } else if (StartsWith(uevent.subsystem, "usb")) {

+   }

+   

+#if 1 //add by quectel for mknod /dev/cdc-wdmo

+     else if (uevent.subsystem == "usbmisc" && !uevent.device_name.empty()) {

+       devpath = "/dev/" + uevent.device_name;

+   }

+#endif 

+                       

+   else if (StartsWith(uevent.subsystem, "usb")) {

        // ignore other USB events

         return;

     } else {

2.2 cdc-wdm 文件权限

--- a/device/rockchip/common/ueventd.rockchip.rc

+++ b/device/rockchip/common/ueventd.rockchip.rc

@@ -87,6 +87,8 @@

 /dev/ttyUSB8              0660  radio radio

 /dev/ttyUSB9              0660  radio radio



+#for cdc-wdm0

+/dev/cdc-wdm*   0660 radio radio

2.2 4G 拨号服务

4G 拨号服务由 libreference-ril.so android 标准服务以及一堆配置和脚本 组成

libreference-ril.so  由移远提供的 Quectel_Android_RIL_Driver_V3.5.49.zip 包中包含,选择 andriod10 64bit 即可, 这里为不跟别的4G模块冲突,改为 librefernce-ril-ec20.so 

2.2.1 添加 librefernce-ril-ec20.so 开机 服务 

--- a/device/rockchip/common/rootdir/init.rk30board.rc

+++ b/device/rockchip/common/rootdir/init.rk30board.rc

@@ -347,7 +347,7 @@ on property:flash.success=1

    setprop vendor.flash.success 1

   

 #hardware/ril/rild/rild.rc

-service vendor.ril-daemon /vendor/bin/hw/rild -l /vendor/lib64/libquectel-ril.so

+service vendor.ril-daemon /vendor/bin/hw/rild -l /vendor/lib64/libreference-ril-ec20.so 

        class main

        user root

        group radio vpn cache inet misc audio log readproc wakelock



index f6beb5468f..f3e4682483 100644

--- a/hardware/ril/rild/rild.rc

+++ b/hardware/ril/rild/rild.rc

@@ -1,4 +1,10 @@

-service vendor.ril-daemon /vendor/bin/hw/rild

+#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 vendor.ril-daemon /vendor/bin/hw/rild -l  /vendor/lib64/libreference-ril-ec20.so 

2.2.2 添加 librefernce-ril-ec20.so 拨号配置

添加 vendor/rockchip/common/phone/etc/ql-ril.conf , 内容如下

#This file is in a state of unavailability.

#In most cases, there is no need to open any option.

#In special cases, please use it under the guidance of FAE.



#LTE_SignalStrength=-1

#LTE_Is_Report_SignalStrength=1

#At_Cmds_For_Customer_Initialize=at+csq;at+cgreg?;at+cops?;at+qcfg="nwscanmodeex"

#At_Cmds_For_Customer_Initialize=AT+QSIMDET=1,1;AT+QCFG="usbcfg",0x2C7C,0x0125,1,1,1,1,1,1,1

At_Cmds_For_Customer_Initialize=AT+QCFG="usbcfg",0x2C7C,0x0125,1,1,1,1,1,0,1;

#Icc_Constants=EF_ICCID

#support_CDMPhone=1

#URC_delay_mseconds=2000

#Query_Available_Networks=1

#0-not support; 1-support low level; 2-support high level

Sim_Hot_Plugging=2

LTE_Is_Report_SignalStrength=1  # 不打开没有信号 指示

2.2.3 其余 FIRMWARE 配置 (适配 EC20)

--- a/device/rockchip/common/5g_modem/manifest.xml

+++ b/device/rockchip/common/5g_modem/manifest.xml

@@ -17,12 +17,12 @@

     </hal> -->

   

     <hal format="hidl">

-       <name>android.hardware.radio.config</name>

+       <name>android.hardware.radio</name>

         <transport>hwbinder</transport>

         <version>1.0</version>

         <interface>

-           <name>IRadioConfig</name>

-           <instance>default</instance>

+           <name>IRadio</name>

+    <instance>slot1</instance>

         </interface>

     </hal>





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

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

@@ -437,7 +437,7 @@ BOARD_BLUETOOTH_LE_SUPPORT ?= true

 BOARD_WIFI_SUPPORT ?= true



 #for rk 4g modem

-BOARD_HAS_RK_4G_MODEM ?= false

+BOARD_HAS_RK_4G_MODEM ?= true

--- a/device/rockchip/common/init.rk30board.rc

+++ b/device/rockchip/common/init.rk30board.rc

@@ -256,9 +256,9 @@ on property:persist.internet_adb_enable=0

    restart adbd



 # for telephony function

-on property:ro.boot.noril=true

-    setprop ro.radio.noril true

-    stop ril-daemon

+#on property:ro.boot.noril=true

+#    setprop ro.radio.noril true

+#    stop ril-daemon



--- a/device/rockchip/common/manifest.xml

+++ b/device/rockchip/common/manifest.xml

@@ -73,15 +73,6 @@

         <fqname>@1.1::IRadio/slot2</fqname>

         <fqname>@1.2::ISap/slot1</fqname>

     </hal>

-   <hal format="hidl">

-       <name>android.hardware.radio.deprecated</name>

-       <transport>hwbinder</transport>

-       <version>1.0</version>

-       <interface>

-           <name>IOemHook</name>

-           <instance>slot1</instance>

-       </interface>

-   </hal>

     <kernel target-level="5"/>

 </manifest>

2.3  COPY FIRMWARE 文件到生产系统

--- a/device/rockchip/common/device.mk

+++ b/device/rockchip/common/device.mk

@@ -271,7 +271,7 @@ PRODUCT_PACKAGES += \

    CarrierDefaultApp \

    CarrierConfig \

    rild \

-    librk-ril \

+    libreference-ril-ec20 \

    dhcpcd



@@ -286,14 +286,14 @@ PRODUCT_PROPERTY_OVERRIDES += \



 ifeq ($(strip $(TARGET_ARCH)), arm64)

 PRODUCT_PROPERTY_OVERRIDES += \

- vendor.rild.libpath=/vendor/lib64/librk-ril.so

+ vendor.rild.libpath=/vendor/lib64/libreference-ril-ec20.so





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

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

@@ -59,13 +59,13 @@ $(call inherit-product, device/rockchip/common/rootdir/rootdir.mk)

 $(call inherit-product, device/rockchip/common/modules/5g_modem.mk)

 PRODUCT_COPY_FILES += \

        device/rockchip/common/5g_modem/ql-ril.conf:vendor/etc/ql-ril.conf \

-      device/rockchip/common/5g_modem/lib64/libreference-ril.so:vendor/lib64/libquectel-ril.so \

        kernel/drivers/pcie_mhi/pcie_mhi.ko:vendor/lib/modules/pcie_mhi.ko \

        device/rockchip/common/5g_modem/pcie_modem.sh:vendor/bin/pcie_modem.sh \

        device/rockchip/common/5g_modem/lib64/chat:system/bin/chat \

        device/rockchip/common/5g_modem/lib64/call-pppd:system/etc/ppp/call-pppd \

        device/rockchip/common/5g_modem/lib64/ip-down:system/etc/ppp/ip-down \

        device/rockchip/common/5g_modem/lib64/ip-up:system/etc/ppp/ip-up \

+      device/rockchip/common/5g_modem/manifest.xml:/vender/manifest.xml \

        out/soong/.intermediates/system/core/libcutils/libcutils/android_arm64_armv8-a_cortex-a55_shared/libcutils.so:vendor/lib64/libcutils.so \

        out/soong/.intermediates/system/core/libnetutils/libnetutils/android_arm64_armv8-a_cortex-a55_shared_cfi/libnetutils.so:vendor/lib64/libnetutils.so 

 #      device/rockchip/common/5g_modem/switch-card1.sh:vendor/bin/switch-card1.sh \

@@ -99,12 +99,13 @@ PRODUCT_COPY_FILES += \

 #4G

 PRODUCT_PACKAGES += rild  

 PRODUCT_COPY_FILES += \

-        $(LOCAL_PATH)/libquectel-ril/arm64-v8a/libreference-ril.so:vendor/lib64/libquectel-ril.so \

         $(LOCAL_PATH)/libquectel-ril/arm64-v8a/chat:system/bin/chat \

         $(LOCAL_PATH)/libquectel-ril/arm64-v8a/ip-up:system/bin/ip-up \

         $(LOCAL_PATH)/libquectel-ril/arm64-v8a/ip-down:system/bin/ip-down \

-        $(LOCAL_PATH)/libquectel-ril/ql-ril.conf:/system/etc/ql-ril.conf \

-        $(LOCAL_PATH)/libquectel-ril/apns-conf.xml:system/etc/apns-conf.xml

+        $(LOCAL_PATH)/libquectel-ril/apns-conf.xml:system/etc/apns-conf.xml \

+       vendor/rockchip/common/phone/lib/libreference-ril-ec20.so:vendor/lib64/libreference-ril-ec20.so \

+       vendor/rockchip/common/phone/etc/ql-ril.conf:system/etc/ql-ril.conf \

+



 PRODUCT_PACKAGES += \

        messaging

@@ -117,7 +118,7 @@ PRODUCT_PROPERTY_OVERRIDES += \

                ro.opengles.version=196610 \

                wifi.interface=wlan0 \

                ro.telephony.default_network=9 \

-                vendor.rild.libpath=/vendor/lib64/libquectel-ril.so \

+                vendor.rild.libpath=/vendor/lib64/libreference-ril-ec20.so \

                vendor.rild.libargs=-d/dev/ttyUSB2 \

                ro.audio.monitorOrientation=true \

                debug.nfc.fw_download=false \

三 问题诊断

可以通过 LOGCAT 看到  AT 拨号及日志, (略)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

walletiger

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值