android USB端口切换

前言:有一个韩国客户,为了过认证需要调用rndis端口。这个功能在三星手机上可以查看到,但是一般的android设备都没有打开该功能,估计是三星自己加的。

话不多说,usb端口功能早就写好了,只是需要驱动分析是否支持再打开相应开关。实现是在文件init.qcom.usb.rc里,现在截取我们需要的功能:

on property:sys.usb.config=rndis,serial_smd,diag,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 90B6
    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/functions rndis,serial,diag,adb
    write /sys/class/android_usb/android0/enable 1
    start adbd
    setprop sys.usb.state rndis,adb

可以看到,只要属性sys.usb.config被设置了,下面的每条指令都会被执行一遍,05c6/90B6是不是很熟悉,这些我们都可以链接电脑通过设备管理器看到相应的端口。
这里还有一个小坑,就是设置完成后,系统会检查sys.usb.state和sys.usb.config是否相等,相等了才会设置下去,否则就还原。
所以我们实际设置的并不是这个属性值rndis,serial_smd,diag,adb,而是rndis,adb

on property:sys.usb.config=rndis,adb
    setprop sys.usb.config rndis,${persist.sys.usb.config.extra},adb

这里就需要添加另一个属性persist.sys.usb.config.extra,在里面添加相应的值,就能对应最上面的值了,即persist.sys.usb.config.extra=serial_smd,diag

你可能感兴趣的:(android_system)