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}
參考: