Usb Host 主模式
USB Host,中文意思是USB主模式,是相对于USB Accessory(USB副模式)来说的。如果Android工作在USB Host模式下,则连接到Android上的USB设备把Android类似的看作是一台PC机,PC机能干的事儿,Android也能干,例如将鼠标、键盘插入则可以使用键盘、鼠标来操作Android系统,如果插入U盘则,通过Android可以读写U盘上的数据。
Accessory 副模式
USB Accessory模式表示将Android设备类似当作一个USB的键盘、鼠标、U盘插入到电脑主机上一样使用。
USB 属性设置ADB、RNDIS、MTP
1. 命令
设置属性:setprop persist.sys.usb.config
查看属性:getprop persist.sys.usb.config,可查看当前手机USB功能角色(adb,mtp,rndis等)
persist.sys.usb.config 在 /data/property目录下
2. 具体设置
1)打开adb功能:setprop persist.sys.usb.config adb
2)打开mtp功能:setprop persist.sys.usb.config mtp
3)同时打开adb和mtp:setprop persist.sys.usb.config adb,mtp
注:在设置某个功能的同时会将其它功能都关闭,
setprop persist.sys.usb.config adb 在打开adb功能的同时会将USB其它功能都关闭。
3. 打开rndis操作(USB网络共享)
3.1 方法1,步骤:
1)手机使用USB线接入Ubuntu,打开手机 terminal,执行su
2)手机执行:setprop persist.sys.usb.config rndis 启动rndis
3)手机执行:echo 0 > /sys/class/android_usb/android0/enable
echo 1 > /sys/class/android_usb/android0/enable
先关闭USB服务,再开启,即重启usb功能。
4)手机执行:busybox ifconfig -a 可发现新增rndis0网络接口
5)Ubuntu执行:ifconfig 可发现新增usb0接口
6)手机执行:busybox ifconfig rndis0 111.111.111.111 up 启用接口
7)Ubuntu执行:sudo ifconfig usb0 111.111.111.112 up
8)Ubuntu执行:ping 111.111.111.111 -c 3 ping成功
ok
3.2 方法2,步骤如下
手机端执行:
su
echo 0 > /sys/class/android_usb/android0/enable
echo rndis > /sys/class/android_usb/android0/functions
echo 1 > /sys/class/android_usb/android0/enable
busybox ifconfig rndis0 111.111.111.111 up
Ubuntu端执行:
同3.1步骤一致。
ping 测试,ok。
3.3 注:
1)配置成功后,插拔usb不需重新配置,Ubuntu能直接识别usb0接口,但需要重新up,手机端无需重新up。
2)打开其它USB功能步骤一致,如mtp,adb。
3)配置adb功能时,手机端需要再执行以下命令,重启adb服务。
stop adbd
start adbd
4. 注:
1)USB功能配置的开机启动脚本:/init.usb.rc
2)更改USB的某些功能后可能需要重启才能生效,如将USB改为mtp功能
3)setprop persist.sys.usb.config rndis 操作最终会写入 到/sys/class/android_usb/android0/functions,可以cat functions查看配置。
4)mtp功能:类似于u盘,一般Android手机都带这个功能。
5)除了可以配置USB device的功能,还可以配置USB相关属性,如VID,PID等,
往/sys/class/android_usb/android0/下的各个属性写入参数即可,然后重启USB功能或重启手机。配置的属性手机重启后会还原。
如修改PID:
echo 1111 > /sys/class/android_usb/android0/idProduct
echo 0 > /sys/class/android_usb/android0/enable
echo 1 > /sys/class/android_usb/android0/enable
6)华为Mate9配置rndis
由于未在 /sys/class/android_usb/android0/目录下找到functions,所以mate9只能使用方法1进行配置。
adb shell下执行:setprop persist.sys.usb.config rndis,adb 启动rndis和adb
手机shell(或adb shell)执行:ifconfig -a 可发现新增rndis0网络接口
Ubuntu执行:ifconfig 可发现新增usb0接口
手机执行:ifconfig rndis0 111.111.111.111 up 启用接口
Ubuntu执行:sudo ifconfig usb0 111.111.111.112 up
Ubuntu执行:ping 111.111.111.111 -c 3 ping成功
实测无需重启usb功能即可正常被Ubuntu识别。
另外在CMD下也可以直接进入adb shell,无需再rndis和adb功能间切换,但一次只能使用一种功能。
7)Android下初始化脚本有类似的语句:
on property:sys.usb.config=mtp,adb
write /sys/class/android_usb/android0/enable 0
write /sys/class/android_usb/android0/idVendor 18d1
write /sys/class/android_usb/android0/idProduct 4ee2
write /sys/class/android_usb/android0/functions ${sys.usb.config}
write /sys/class/android_usb/android0/enable 1
start adbd
setprop sys.usb.state ${sys.usb.config}
参考: