P6X第一版软件只支持adb,download功能。为了支持mass_storage功能,于是在./device/qcom/M9PLUS/M9PLUSOneSim/system.prop
里面添加
#Set composition for USB device
#persist.sys.usb.config=diag,serial_smd,rmnet_bam,adb
persist.sys.usb.config=diag,serial_smd,rmnet_bam,mass_storage,adb
#For frameworks compatible process between BCM & NXP — xiaoshengtao
ro.config.nfc_chip_model=BCM
#Set read only default composition for USB
#ro.sys.usb.default.config=diag,serial_smd,rmnet_bam,adb
ro.sys.usb.default.config=diag,serial_smd,rmnet_bam,mass_storage,adb
|
添加完成后,发现插入USB到电脑端后只显示充电,原来的adb也不支持了。
于是检查了./qcom/common/rootdir/etc/init.qcom.usb.rc,发现里面
on property:sys.usb.config=diag,serial_smd,rmnet_bam,adb
stop adbd
write /sys/class/android_usb/android0/enable 0
write /sys/class/android_usb/android0/idVendor 05C6
write /sys/class/android_usb/android0/idProduct 9091
write /sys/class/android_usb/android0/f_diag/clients diag
write /sys/class/android_usb/android0/f_serial/transports smd
write /sys/class/android_usb/android0/f_rmnet/transports smd,bam
write /sys/class/android_usb/android0/functions diag,serial,rmnet,adb
write /sys/class/android_usb/android0/enable 1
start adbd
setprop sys.usb.state ${sys.usb.config}
并没有on property:sys.usb.config=diag,serial_smd,rmnet_bam,mass_storage,adb
于是新增加了一个属性事件,同时添加了一个新的idProduct 9093
on property:sys.usb.config=diag,serial_smd,rmnet_bam,mass_storage,adb
stop adbd
write /sys/class/android_usb/android0/enable 0
write /sys/class/android_usb/android0/idVendor 05C6
write /sys/class/android_usb/android0/idProduct 9093
write /sys/class/android_usb/android0/f_diag/clients diag
write /sys/class/android_usb/android0/f_serial/transports smd
write /sys/class/android_usb/android0/f_rmnet/transports smd,bam
write /sys/class/android_usb/android0/functions diag,serial,rmnet,mass_storage,adb
write /sys/class/android_usb/android0/enable 1
start adbd
setprop sys.usb.state ${sys.usb.config}
编译下载后,mass_storage和adb都可以正常使用了。但是download功能不支持了。
后来和供应商沟通后,发现主要是download功能是和电脑端的驱动程序有关的,而驱动是和idProduct
相关联的,原来的ID是9091,所以把原来的属性事件on property:sys.usb.config=diag,serial_smd,rmnet_bam,adb
去掉,并将里面的idProduct值赋值给新添加的属性事件。这样就完成了修改。
在修改的过程中,还碰到过一个问题,就是当我把usb配置设置成
persist.sys.usb.config=diag,serial_smd,serial_tty,rmnet_bam,mass_storage,adb的时候,
因为属性事件在./qcom/common/rootdir/etc/init.qcom.usb.rc已经存在,
on property:sys.usb.config=diag,serial_smd,serial_tty,rmnet_bam,mass_storage,adb
stop adbd
write /sys/class/android_usb/android0/enable 0
write /sys/class/android_usb/android0/idVendor 05C6
write /sys/class/android_usb/android0/idProduct 9025
write /sys/class/android_usb/android0/f_diag/clients diag
write /sys/class/android_usb/android0/f_serial/transports smd,tty
write /sys/class/android_usb/android0/f_rmnet/transports smd,bam
write /sys/class/android_usb/android0/functions diag,adb,serial,rmnet,mass_storage
write /sys/class/android_usb/android0/enable 1
start adbd
setprop sys.usb.state ${sys.usb.config}
当编译下载后发现usb,adb等都不支持了,只有一个充电。后来听说,MSM8916的
USB的端点数不够引起的,无法在现有的端点上面支持过多的设备。据说其中的serial_tty
就用到了6路的端点数。
总结USB的配置必须要和属性事件完全一致,包括其中的功能的顺序。
另外idProduct对固件download的影响是通过电脑端的驱动完成的。
最后USB的功能不能超过芯片能支持的端点数。
合作联系邮箱:cofface#cofface.com(请将#替换为@)