在Linux下adb連接不上android手機的終極解決方案

原文:http://blog.csdn.net/liuqz2009/article/details/7942569

1、做android開發的過程,碰到了Linux下adb識別不了android設備的問題,剛開始在網上google下,發現都是針對ubuntu下的一些說明:如google提供的方法:http://developer.android.com/tools/device.html,但發現通過做這些還是有些android設備連接不上,於是通過閱讀adb源碼,得出了一些方法,和大家一起共勉下:

 

a、google提到的修改/etc/udev/rules.d/51-android.rules的方法:

SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", MODE="0666", GROUP="plugdev"

其實這樣做的目的無非是爲了使adb對創建的usb節點有訪問權限,其實只要使用root來啓動adb server就不存在此問題。做法如下:在root終端上運行adb start-server ,如果已經有運行adb命令的則需要殺掉adb server,運行 ps aux | grep adb ,找到adb server的pid,然後kill掉,如我機器上:

root       2795  0.0      0.0         30556      1244          pts/2              sl          09:00  0:03           adb fork-server server

執行kill 2795殺掉adb server。

 

b、通過以上辦法還是無法識別android設備的,則可能你的android的VID未能加入adb中,你需要手動添加。

添加的文件位置與你第一次啓動adb server有關,如你在root上啓動adb server,則其位置在

/root/.android/adb_usb.ini,否則其位置在$HOME/.android/adb_usb.ini下,如果$HOME爲空,則在/tmp/.android/adb_usb.ini下。未有文件或目錄的請手動添加。以下是一份adb_usb.ini的示例:

#for OKWAP C900

0x14b4

#for K-Touch W606

0x0525

#for lenovo speic

0x2006

其中#開頭表註釋,其它則表示android的VID,每個VID需要單獨一行。

獲取VID的方法:插上設備前運行lsusb,插上設備後,再次運行lsusb,多出的那個就是你的設備,而VID就在其中如:

Bus 001 Device 034: ID 2006:5010

其中的2006即爲其VID。

在adb_usb.ini中添加好後,殺掉adb server,然後啓動adb server,(參考a中提到的方法)。

 

c、如果按以上執行完以上兩步還不行,那就碰到了令人頭痛的問題了。

現在有些usb設備叫做“免CD”設備。具體點來說,目前一些新的USB 設備在內部含有windows驅動,當你第一次插入的時候,它作爲一個閃存,並提示你安裝驅動。在安裝驅動之後,驅動會自動切換USB設備的模式,存儲設備將會消失(大多數情況),新的設備將會產生(如USB類型的Modem)。這種特徵被無線設備的製造商稱其爲“免CD”的設備。在Linux下是通過usb_modeswitch這個工具自動切換的。你讀到這裏說明你的設備肯定不在usb_modeswitch支持的列表中。此時你要麼等其支持,要麼就是自己動手支持了。

要自己手動支持,這是個複雜的過程,你可以參考:http://www.draisberghof.de/usb_modeswitch/

簡單的來講,如果你要自己支持,也就是要抓取Windows下驅動做了哪些事情,讓其進行了模式切換。然後你在/etc/usb_modeswitch.d/目錄下參照已有的文件,創建自己的配置文件如:2006:5010,在其中添加你抓取到得信息。

備註:windows下沒過多研究,一般裝上驅動,識別到了adb接口就可以識別到。平板上和Linux下比較類似,不過其$HOME爲空,所以添加的目錄在/tmp/.android/adb_usb.ini裏。

發佈了5 篇原創文章 · 獲贊 1 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章