展锐8541E配置USB ACM

1、kernel config 参考如下修改
cd bsp
source build/envsetup.sh
lunch 34
kuconfig -> Device Drivers  ---> USB support  ---> USB Gadget Support  --->  [*]     Abstract Control Model (CDC ACM)

--- kernel/kernel4.14/arch/arm/configs/sprd_sharkle_defconfig   (revision 226)
+++ kernel/kernel4.14/arch/arm/configs/sprd_sharkle_defconfig   (working copy)
@@ -2987,6 +2996,7 @@
 # CONFIG_USB_GADGET_XILINX is not set
 # CONFIG_USB_DUMMY_HCD is not set
 CONFIG_USB_LIBCOMPOSITE=y
+CONFIG_USB_F_ACM=y
 CONFIG_USB_U_SERIAL=y
 CONFIG_USB_U_ETHER=y
 CONFIG_USB_F_SERIAL=y
@@ -3001,7 +3011,7 @@
 CONFIG_USB_F_VSERIAL=y
 CONFIG_USB_CONFIGFS=y
 CONFIG_USB_CONFIGFS_SERIAL=y
-# CONFIG_USB_CONFIGFS_ACM is not set
+CONFIG_USB_CONFIGFS_ACM=y
 # CONFIG_USB_CONFIGFS_OBEX is not set
 # CONFIG_USB_CONFIGFS_NCM is not set
 # CONFIG_USB_CONFIGFS_ECM is not set


2、为了不占用基线已有的USB串口,增大USB串口支持的最大数目
--- bsp/kernel/kernel4.14/drivers/usb/gadget/function/u_serial.h        (revision 226)
+++ bsp/kernel/kernel4.14/drivers/usb/gadget/function/u_serial.h        (working copy)
@@ -15,7 +15,7 @@
 #include <linux/usb/composite.h>
 #include <linux/usb/cdc.h>

-#define MAX_U_SERIAL_PORTS     8
+#define MAX_U_SERIAL_PORTS     10

 struct f_serial_opts {
        struct usb_function_instance func_inst;


3、init.common.usb.rc 参考如下修改(完整路径以sharkle为例:device/sprd/sharkle/common/rootdir/root/init.common.usb.rc)
on init
...
    mkdir /config/usb_gadget/g1/functions/mass_storage.gs6 0770 shell shell
    mkdir /config/usb_gadget/g1/functions/gser.gs0 0770 shell shell
    mkdir /config/usb_gadget/g1/functions/gser.gs1 0770 shell shell
    mkdir /config/usb_gadget/g1/functions/gser.gs2 0770 shell shell
    mkdir /config/usb_gadget/g1/functions/gser.gs3 0770 shell shell
    mkdir /config/usb_gadget/g1/functions/gser.gs4 0770 shell shell
    mkdir /config/usb_gadget/g1/functions/gser.gs5 0770 shell shell
    mkdir /config/usb_gadget/g1/functions/gser.gs6 0770 shell shell
    mkdir /config/usb_gadget/g1/functions/gser.gs7 0770 shell shell
+    mkdir /config/usb_gadget/g1/functions/acm.gs0 0770 shell shell
+    mkdir /config/usb_gadget/g1/functions/acm.gs1 0770 shell shell

    setprop sys.usb.mode normal

+ # 新增 sys.usb.config=acm
+on property:sys.usb.config=acm && property:sys.usb.configfs=1
+ # 注意不同的sys.usb.config,idProduct不同。
+    write /config/usb_gadget/g1/idVendor 0x18d1
+    write /config/usb_gadget/g1/idProduct 0x9999
+    write /config/usb_gadget/g1/bcdDevice 0x0404
+    write /config/usb_gadget/g1/bDeviceClass 0
+    write /config/usb_gadget/g1/os_desc/use 1
+    rm /config/usb_gadget/g1/configs/b.1/f1
+    rm /config/usb_gadget/g1/configs/b.1/f2
+    rm /config/usb_gadget/g1/configs/b.1/f3
+    rm /config/usb_gadget/g1/configs/b.1/f4
+    rm /config/usb_gadget/g1/configs/b.1/f5
+    rm /config/usb_gadget/g1/configs/b.1/f6
+    rm /config/usb_gadget/g1/configs/b.1/f7
+    rm /config/usb_gadget/g1/configs/b.1/f8
+    rm /config/usb_gadget/g1/configs/b.1/f9
+    rm /config/usb_gadget/g1/configs/b.1/f10
+    rm /config/usb_gadget/g1/configs/b.1/f11
+    symlink /config/usb_gadget/g1/functions/acm.gs0 /config/usb_gadget/g1/configs/b.1/f1
+    symlink /config/usb_gadget/g1/functions/acm.gs1 /config/usb_gadget/g1/configs/b.1/f2
+    write /config/usb_gadget/g1/UDC ${sys.usb.controller}
+    setprop sys.usb.state ${sys.usb.config}

3、验证方法:进设备shell,执行setprop sys.usb.config acm 可切换到新增的acm配置。
4、注意以上示例是新增了sys.usb.config=acm,Android上层默认并没有设置sys.usb.config为acm的逻辑。
实际项目中,如果是在特定业务场景下新增acm,可以考虑参考以上示例,然后修改Android上层代码,根据实际需要去设置sys.usb.config为acm。

=============================================================================================

5、如果要依附于Android已有的设置来新增acm端口,那么可以考虑在已有的sys.usb.config下新增acm端口。
如果这样做,那么就需要考虑新增的acm端口该加在哪些已有的sys.usb.config下,并且注意不要改变原有的端口次序。
比如在adb设置下(userdebug版本,连接USB后的缺省设置)新增acm端口:
on property:sys.usb.ffs.ready=1 && property:sys.usb.config=adb && property:sys.usb.mode=normal && property:persist.vendor.sys.modem.diag=none
    write /config/usb_gadget/g1/idVendor 0x18d1
    write /config/usb_gadget/g1/idProduct 0x4EE8
    write /config/usb_gadget/g1/bcdDevice 0x0404
    write /config/usb_gadget/g1/bDeviceClass 0
    rm /config/usb_gadget/g1/configs/b.1/f1
    rm /config/usb_gadget/g1/configs/b.1/f2
    rm /config/usb_gadget/g1/configs/b.1/f3
    rm /config/usb_gadget/g1/configs/b.1/f4
    rm /config/usb_gadget/g1/configs/b.1/f5
    rm /config/usb_gadget/g1/configs/b.1/f6
    rm /config/usb_gadget/g1/configs/b.1/f7
    rm /config/usb_gadget/g1/configs/b.1/f8
    rm /config/usb_gadget/g1/configs/b.1/f9
    rm /config/usb_gadget/g1/configs/b.1/f10
    rm /config/usb_gadget/g1/configs/b.1/f11
    symlink /config/usb_gadget/g1/functions/ffs.adb /config/usb_gadget/g1/configs/b.1/f1
    symlink /config/usb_gadget/g1/functions/gser.gs0 /config/usb_gadget/g1/configs/b.1/f2
    symlink /config/usb_gadget/g1/functions/gser.gs1 /config/usb_gadget/g1/configs/b.1/f3
    symlink /config/usb_gadget/g1/functions/gser.gs2 /config/usb_gadget/g1/configs/b.1/f4
+ # 为了不改变原有的端口次序,所以在尾部添加新的端口,f值要依次递增
+    symlink /config/usb_gadget/g1/functions/acm.gs0 /config/usb_gadget/g1/configs/b.1/f5
+    symlink /config/usb_gadget/g1/functions/acm.gs1 /config/usb_gadget/g1/configs/b.1/f6
    write /config/usb_gadget/g1/UDC ${sys.usb.controller}
    setprop sys.usb.state ${sys.usb.config}

6、切换USB配置是Android上层发起,通过设置一些property来触发Android init rc中对应的Action。比如切到MTP,切到USB网络共享等。
调试过程中如果不清楚具体场景下触发了哪个Action,可以通过kernel log观察;当然也可以用 getprop 来查看相应的property值,再去找满足条件的Action。
log示例:
init: processing action (sys.usb.config=mtp && sys.usb.configfs=1) from (/vendor/etc/init/hw/init.sl8541e_1h10_32b.usb.rc:156)
init: processing action (sys.usb.config=mtp && sys.usb.configfs=1) from (/init.usb.configfs.rc:26)
表示触发了init.sl8541e_1h10_32b.usb.rc 第156行的Action和init.usb.configfs.rc 第26行的Action。

7、源码中涉及USB配置的rc文件,除了 init.common.usb.rc,还有 system/core/rootdir/init.usb.configfs.rc。
所以如果在 init.common.usb.rc 没有发现对应的Action,或者发现某个Action的实现不全,可以到init.usb.configfs.rc去找。
如果两个文件中如果有相同的Action,那么都会被执行,见上述第6点的log。
注意 init.common.usb.rc 经过编译打包后,在镜像中的文件名是 init.{board}.usb.rc,{board}取决于编译时选择的工程,比如上述第6点的init.sl8541e_1h10_32b.usb.rc。

8、如果是参考第5点,在已有的USB配置下新增ACM串口,那么在Windows PC下有可能出现新增的ACM串口被命名为SPRD XXXX的情况,这是因为展锐发布的PC Driver匹配到了这个串口。
PC Driver是按照USB VID+PID+MI 来匹配串口的,如果不想被匹配到,或者想改串口名字,需要修改PC driver。详见unisupport文档:PC侧修改VID_PID流程V1.0.pdf
查看某个USB串口的VID+PID+MI的信息,可以通过Windows设备管理器 - 选择某个USB串口 - 右键“属性”- 详细信息,在“详细信息”这个选项卡中查看“设备实例路径”的值。

9、修改了USB配置后,必须要做全场景USB功能测试,包括但不限于下载、校准、写License、用LOGEL工具抓取log和sysdump、ADB等,确保不影响已有的功能。

附件端口

Index: device/sprd/sharkle/common/rootdir/root/init.common.usb.rc
===================================================================
--- device/sprd/sharkle/common/rootdir/root/init.common.usb.rc	(revision 226)
+++ device/sprd/sharkle/common/rootdir/root/init.common.usb.rc	(working copy)
@@ -38,6 +38,8 @@
     mkdir /config/usb_gadget/g1/functions/gser.gs5 0770 shell shell
     mkdir /config/usb_gadget/g1/functions/gser.gs6 0770 shell shell
     mkdir /config/usb_gadget/g1/functions/gser.gs7 0770 shell shell
+    mkdir /config/usb_gadget/g1/functions/acm.gs0 0770 shell shell
+    mkdir /config/usb_gadget/g1/functions/acm.gs1 0770 shell shell
 
     setprop sys.usb.mode normal
 
@@ -127,6 +129,9 @@
     symlink /config/usb_gadget/g1/functions/gser.gs0 /config/usb_gadget/g1/configs/b.1/f2
     symlink /config/usb_gadget/g1/functions/gser.gs1 /config/usb_gadget/g1/configs/b.1/f3
     symlink /config/usb_gadget/g1/functions/gser.gs2 /config/usb_gadget/g1/configs/b.1/f4
+    # 为了不改变原有的端口次序,所以在尾部添加新的端口,f值要依次递增
+    symlink /config/usb_gadget/g1/functions/acm.gs0 /config/usb_gadget/g1/configs/b.1/f5
+    symlink /config/usb_gadget/g1/functions/acm.gs1 /config/usb_gadget/g1/configs/b.1/f6
     write /config/usb_gadget/g1/UDC ${sys.usb.controller}
     setprop sys.usb.state ${sys.usb.config}
     

新增端口

Index: device/sprd/sharkle/common/rootdir/root/init.common.usb.rc
===================================================================
--- device/sprd/sharkle/common/rootdir/root/init.common.usb.rc	(revision 226)
+++ device/sprd/sharkle/common/rootdir/root/init.common.usb.rc	(working copy)
@@ -38,6 +38,8 @@
     mkdir /config/usb_gadget/g1/functions/gser.gs5 0770 shell shell
     mkdir /config/usb_gadget/g1/functions/gser.gs6 0770 shell shell
     mkdir /config/usb_gadget/g1/functions/gser.gs7 0770 shell shell
+    mkdir /config/usb_gadget/g1/functions/acm.gs0 0770 shell shell
+    mkdir /config/usb_gadget/g1/functions/acm.gs1 0770 shell shell
 
     setprop sys.usb.mode normal
 
@@ -1064,3 +1066,27 @@
     symlink /config/usb_gadget/g1/functions/ffs.adb /config/usb_gadget/g1/configs/b.1/f2
     write /config/usb_gadget/g1/UDC ${sys.usb.controller}
     setprop sys.usb.state ${sys.usb.config}
+
+# 新增 sys.usb.config=acm
+on property:sys.usb.config=acm && property:sys.usb.configfs=1
+    # 注意不同的sys.usb.config,idProduct不同。
+    write /config/usb_gadget/g1/idVendor 0x18d1
+    write /config/usb_gadget/g1/idProduct 0x9999
+    write /config/usb_gadget/g1/bcdDevice 0x0404
+    write /config/usb_gadget/g1/bDeviceClass 0
+    write /config/usb_gadget/g1/os_desc/use 1
+    rm /config/usb_gadget/g1/configs/b.1/f1
+    rm /config/usb_gadget/g1/configs/b.1/f2
+    rm /config/usb_gadget/g1/configs/b.1/f3
+    rm /config/usb_gadget/g1/configs/b.1/f4
+    rm /config/usb_gadget/g1/configs/b.1/f5
+    rm /config/usb_gadget/g1/configs/b.1/f6
+    rm /config/usb_gadget/g1/configs/b.1/f7
+    rm /config/usb_gadget/g1/configs/b.1/f8
+    rm /config/usb_gadget/g1/configs/b.1/f9
+    rm /config/usb_gadget/g1/configs/b.1/f10
+    rm /config/usb_gadget/g1/configs/b.1/f11
+    symlink /config/usb_gadget/g1/functions/acm.gs0 /config/usb_gadget/g1/configs/b.1/f1
+    symlink /config/usb_gadget/g1/functions/acm.gs1 /config/usb_gadget/g1/configs/b.1/f2
+    write /config/usb_gadget/g1/UDC ${sys.usb.controller}
+    setprop sys.usb.state ${sys.usb.config}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 展锐ResearchDownload是一款用于展锐芯片设备的刷机工具。展锐是一家中国的半导体公司,其芯片广泛应用于手机、平板电脑、智能家居等领域。展锐ResearchDownload支持展锐芯片设备的刷机、升级、修复等操作。用户可以通过该工具将新的固件刷入设备中,以达到优化系统、修复Bug、增加新功能的目的。展锐ResearchDownload不仅支持展锐芯片设备,还支持MTK、Spreadtrum等芯片平台的设备。在使用该工具时,需要注意备份好重要数据,同时确认固件为官方固件,避免使用非官方来源的固件造成设备损坏。总的来说,展锐ResearchDownload是展锐芯片设备的重要工具之一,为用户提供了方便、快捷的刷机和升级服务,是值得信赖和使用的软件。 ### 回答2: 展锐researchdownload是一个专门用于展锐处理器的刷机工具,可以将展锐处理器的固件刷入到手机等设备中。展锐researchdownload具有简单易用、速度快、可靠稳定等特点。它支持的刷机操作包括刷入系统和刷入BootLoader,同时也支持底层配置。使用展锐researchdownload刷机可以解决一些系统问题,提升设备运行速度,更换新的功能和特性等。在操作时,用户需要将手机等设备连接到计算机上,并较详细地设置好参数和选项,如串口号、Baudrate、CPU/Flash型号等。展锐researchdownload也具有校验和修复功能,可以检测和修复制作过程中产生的缺陷。总之,展锐researchdownload是刷机必备的重要工具之一,对于展锐处理器的用户来说,熟练掌握和使用它可以更好地提升设备性能和体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值