在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里。

 

 

 

 

連接金立手機 GiONEE GN9005 。最后通過文中的第二種方法

 

(1)先在插入usb之前和之后,運行lsusb,獲取設備VID

xxx@xxx:~$ lsusb
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 17ef:6019 Lenovo
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

xxx@xxx:~$ lsusb
Bus 002 Device 018: ID 271d:c011 
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 17ef:6019 Lenovo 
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

得到設備VID為271d

 

(2)然后在Home路徑下的 /.android 路徑下新建了文件adb_usb.ini

內容為: 

#for GiONEE GN9005
0x271d

 

(3)然后adb kill-server    adb start-server

成功連上


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM