联系管理员

开通文章发布权限

扫码 添加微信
微信图片
电话: QQ:1602036736

rk3588s android13 modem移植(仅参考)

(仅参考) 没有实物验证

rk3588s android13 modem移植

modem型号为移远EC20,内核版本5.10, radio服务版本为1.5

1.内核驱动移植

1.1 增加EC20 vid pid(补丁来自移远移植指导)
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
index b878f4c87fee..e3272eac4ead 100644
--- a/drivers/usb/serial/option.c
+++ b/drivers/usb/serial/option.c
@@ -2161,6 +2161,7 @@ static struct usb_serial_driver option_1port_device = {
        .suspend           = usb_wwan_suspend,
        .resume            = usb_wwan_resume,
 #endif
+       .reset_resume      = usb_wwan_resume,
 };
 
 static struct usb_serial_driver * const serial_drivers[] = {
@@ -2184,6 +2185,10 @@ static int option_probe(struct usb_serial *serial,
                                &serial->interface->cur_altsetting->desc;
        unsigned long device_flags = id->driver_info;
 
+        if (serial->dev->descriptor.idVendor == QUECTEL_VENDOR_ID && 
+            serial->dev->descriptor.idProduct == QUECTEL_PRODUCT_EC25 &&
+            serial->interface->cur_altsetting->desc.bInterfaceNumber >= 4)
+                return -ENODEV;
        /* Never bind to the CD-Rom emulation interface */
        if (iface_desc->bInterfaceClass == USB_CLASS_MASS_STORAGE)
                return -ENODEV;
--- a/drivers/usb/serial/usb_wwan.c
+++ b/drivers/usb/serial/usb_wwan.c
@@ -435,8 +435,7 @@ void usb_wwan_close(struct usb_serial_port *port)
 
        /*
         * Need to take susp_lock to make sure port is not already being
-        * resumed, but no need to hold it due to the tty-port initialized
-        * flag.
+        * resumed, but no need to hold it due to initialized
         */
        spin_lock_irq(&intfdata->susp_lock);
        if (--intfdata->open_ports == 0)
@@ -469,6 +468,7 @@ static struct urb *usb_wwan_setup_urb(struct usb_serial_port *port,
        struct usb_serial *serial = port->serial;
        struct usb_wwan_intf_private *intfdata = usb_get_serial_data(serial);
        struct urb *urb;
+       struct usb_device_descriptor *desc = &serial->dev->descriptor;
 
        urb = usb_alloc_urb(0, GFP_KERNEL);     /* No ISO */
        if (!urb)
@@ -481,6 +481,14 @@ static struct urb *usb_wwan_setup_urb(struct usb_serial_port *port,
        if (intfdata->use_zlp && dir == USB_DIR_OUT)
                urb->transfer_flags |= URB_ZERO_PACKET;
 
+       if (dir == USB_DIR_OUT) {
+                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;
 }
1.2 增加qmi_wwan_q驱动
--- a/drivers/net/usb/Makefile
+++ b/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.3 增加供电配置打开usb接口,根据硬件实际情况配置

注册成功后确保存在如下节点

crw-rw---- 1 radio radio 188,   0 2023-07-21 08:55 /dev/ttyUSB0
crw-rw---- 1 radio radio 188,   1 2023-07-21 08:55 /dev/ttyUSB1
crw-rw---- 1 radio radio 188,   3 2023-07-21 08:55 /dev/ttyUSB3
crw-rw---- 1 radio radio 188,   4 2023-07-21 08:55 /dev/ttyUSB4

2 添加uevent权限节点

2.1 uevent节点修改

device/rockchip/common

diff --git a/rootdir/ueventd.rockchip.rc b/rootdir/ueventd.rockchip.rc
index 6e98b92..f28d19e 100755
--- a/rootdir/ueventd.rockchip.rc
+++ b/rootdir/ueventd.rockchip.rc
@@ -54,9 +54,17 @@
 /dev/compassirq           0660   system     system
 
+/dev/ttyACM*             0666   radio          radio
+/dev/cdc-wdm*            0666   radio          radio
+/dev/qcqmi*              0660   radio          radio
2.2 修改usb节点名称

system/core

diff --git a/init/devices.cpp b/init/devices.cpp
index d4a3cb9d3..f7c99b626 100644
--- a/init/devices.cpp
+++ b/init/devices.cpp
@@ -550,6 +550,8 @@ 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 (uevent.subsystem == "usbmisc" && !uevent.device_name.empty()) {
+           devpath = "/dev/" + uevent.device_name;
     } else if (StartsWith(uevent.subsystem, "usb")) {
         // ignore other USB events
         return;

3 ril库移植与radio服务配置

默认的rk代码已经支持部分radio相关服务,但比较旧,需要修改

3.1 manifest配置

device/rockchip/common/4g_modem/manifest.xml

<manifest version="1.0" type="device">
    <hal format="hidl">
        <name>android.hardware.radio</name>
        <transport>hwbinder</transport>
        <fqname>@1.5::IRadio/slot1</fqname>
        <fqname>@1.2::ISap/slot1</fqname>
    </hal>
</manifest>
编译radio服务

device/rockchip/common/modules/4g_modem.mk

DEVICE_MANIFEST_FILE += device/rockchip/common/4g_modem/manifest.xml PRODUCT_PACKAGES += \     android.hardware.radio@1.5-radio-service \     android.hardware.radio.config@1.2-service \     android.hardware.radio.config@1.0-service \     android.hardware.radio.config@1.0.vendor \     android.hardware.radio.config@1.2.vendor \     android.hardware.radio@1.5.vendor \     libhwbinder.vendor
指定系统ril库路径

 

PRODUCT_PROPERTY_OVERRIDES += \     vendor.rild.libpath=/vendor/lib64/libquec-ril.so

图片#B #S #R #60% #auto

评论

快捷导航

把好文章收藏到微信

打开微信,扫码查看

关闭

还没有账号?立即注册