A. 如何在linux虛擬機上安裝adb,嵌入式底層菜
第一步:啟動開發板,進入android系統後,在linux終端輸入lsusb命令查詢USB匯流排上的設備,第二步:下載最新的android SDK並解壓到某目錄,第三步:修改~/.android/adb_usb.ini文件,注意,這時為root模式下的路徑,在普通許可權下,是不存在該目錄的,第四步:創建一個新的udev規則的文件,在/etc/udev/rules.d路徑下,新建名為imx-android.rules的文件,第五步在/etc/bash.bashrc中聲明adb的路徑,重啟,然後查找
B. linux系統下如何安裝android sdk
一、下載android sdk
下載SDK,下載地址:http://developer.android.com/sdk/index.html,選擇Linux(i386)。因為SDK只有32位的,如果裝的是64位系統,則要安裝ia32-libs,運行32位程序。
ubuntu安裝命令:sudo apt-get install ia32-libs(在Ubuntu中的命令)。
centos安裝命令:
yum install glibc.i686
下載完成後解壓,在終端進入到SDK的根目錄,然後執行:tools/android update sdk –no-ui即可開始和windows裡面一樣的更新。
二、配置環境變數
更新完成後配置環境變數。使用命令 vi /etc/profile 編輯文件profile,然後在下面增加下面內容:
export ANDROID_HOME=/opt/softwaretools/android-sdk-linux
export PATH=$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$PATH
/opt/softwaretools/android-sdk-linux為SDK的根目錄。
這個配置之後,以後要執行android裡面的命令,就不是需要進到這個目錄,直接可以在終端裡面輸入。
修改完成後,使用命令 :wq! 保存關閉文件,再執行命令 source /etc/profile 使配置生效一下。
在終端輸入:android,如果Android SDK Manager窗口出來了,就證明環境配置成功。
三、配置AVD
1、進入$SDK_HOME/toos目錄
2、命令窗口運行:./android avd
C. 如何在linux虛擬機上安裝adb
一般我們都是在windows系統下安裝adb調試工具和驅動,並在windows系統下使用,但有的時候也需要在Ubuntu下面是用adb,這樣就需要安裝ubuntu系統的adb驅動和調試環境,下面小編就來講述ubuntu系統下如何安裝adb驅動和調試環境
本經驗說明:
小編的這個建議只適合於10.10之前版本的ubuntu系統,後面的11.04,11.10。。。14.04系統因為採用的默認桌面不同,所以本經驗不適用,若要使用,那麼請安裝GNOME桌面
D. adb命令和linux命令
adb root 獲取 root 許可權。
adb sideload
adb shell ps 列印進程狀態。
adb shell top 展現上層 CPU 進程信息。
adb shell getprop 獲取 Android 系統服務屬性
adb shell setprop 設置服務屬性。
adb shell mpsys 獲取系統數據。
adb logcat 列印日誌文件
adb shell ip 主要用於顯示一些數據
adb shell netstat 主要用於網路統計。
adb shell ping 沒啥好說的,和 PC 的 ping 命令一樣的。
adb shell netcfg 通過配置文件配置和管理網路連接。
adb shell cp 字面意思,很好理解,復制。
adb shell pwd 定位當前的操作位置
adb shell mv 移動或者更名文件
adb shell mkdir 創建一個文件夾
adb shell rm 刪除文件或者目錄
adb shell ls 列出目錄內容。
adb shell pm clear 清除應用緩存。
adb shell pm path 列印 apk 的路徑。
adb usb 設置設備以 USB 形式連接 PC
adb kill-server 終止 adb 進程。
adb forward 埠映射,將 PC 端的某埠數據重定向到手機端的一個埠。
adb devices 主要是用於列印當前連接的所有模擬器或者設備。
shutdown -h now 關閉系統
init 0 關閉系統
telinit 0 關閉系統
shutdown -h hours:minutes & 按預定時間關閉系統
shutdown -c 取消按預定時間關閉系統
shutdown -r now 重啟
reboot 重啟
logout 注銷
文件和目錄
cd /home 進入 '/ home' 目錄'
cd .. 返回上一級目錄
cd ../.. 返回上兩級目錄
cd 進入個人的主目錄
cd ~user1 進入個人的主目錄
cd - 返回上次所在的目錄
pwd 顯示工作路徑
ls 查看目錄中的文件
ls -F 查看目錄中的文件
ls -l 顯示文件和目錄的詳細資料
ls -a 顯示隱藏文件
ls [0-9] 顯示包含數字的文件名和目錄名
tree 顯示文件和目錄由根目錄開始的樹形結構
lstree 顯示文件和目錄由根目錄開始的樹形結構
mkdir dir1 創建一個叫做 'dir1' 的目錄'
mkdir dir1 dir2 同時創建兩個目錄
mkdir -p /tmp/dir1/dir2 創建一個目錄樹
rm -f file1 刪除一個叫做 'file1' 的文件'
rmdir dir1 刪除一個叫做 'dir1' 的目錄'
rm -rf dir1 刪除一個叫做 'dir1' 的目錄並同時刪除其內容
rm -rf dir1 dir2 同時刪除兩個目錄及它們的內容
mv dir1 new_dir 重命名/移動 一個目錄
cp file1 file2 復制一個文件
cp dir/* . 復制一個目錄下的所有文件到當前工作目錄
cp -a /tmp/dir1 . 復制一個目錄到當前工作目錄
cp -a dir1 dir2 復制一個目錄
cp -r dir1 dir2 復制一個目錄及子目錄
ln -s file1 lnk1 創建一個指向文件或目錄的軟鏈接
ln file1 lnk1 創建一個指向文件或目錄的物理鏈接
touch -t 0712250000 file1 修改一個文件或目錄的時間戳 - (YYMMDDhhmm)
file file1 outputs the mime type of the file as text
iconv -l 列出已知的編碼
E. 樹莓派下linux運行adb怎麼會出錯
解決方法
1、打開終端,安裝 lib32z1(注意最後一位是數字 1 不是字母 l)
sudo apt-get install lib32z1
2、完成後還需要安裝 libstdc++.so.6 這個庫(adb需要32位的庫):
sudo apt-get install lib32stdc++6
OK,現在就可以使用adb命令了。
F. Ubuntu下adb的使用及常見問題處理
Ubuntu下adb的使用及常見問題處理
方案一:使用ubuntu系統自帶的安裝包
sudo apt-get install android-tools-adb
或者
sudo apt-get install adb
方案二:使用Android源碼編譯生成的adb文件
Android源碼編譯完成之後,會在編譯過的項目目錄下./out/host/linux-x86/bin/生成adb文件,需要將其拷貝到系統的/usr/bin目錄下,並更改許可權。
sudo cp /home/apuser/code/out/host/linux-x86/bin/adb /usr/bin
sudo chmod a+x /usr/bin/adb
說明:這個adb文件也可以在android-sdk-linux下的platform-tools目錄下找到。
在終端運行 adb help或者adb查看adb是否安裝成功。
adb help
或者
adb
正常情況下,可看到adb的版本信息,以及adb支持的相關指令和說明。
mkdir~/.android
echo 0x1782 > ~/.android/adb_usb.ini
可以查看/home/apuser/.android/adb_usb.ini是否生成成功,且內容為0x1782
這個0x1782是設備的VID號,可以使用lsusb指令查詢自己設備的VID號是多少,如果是調試多個設備,可依次將設備的VID號添加到adb_usb.ini中
備註:展訊為0x1782,MTK為0x0e8d,高通為0x056c
到:/etc/udev/rules.d/51-android.rules命令:
cd /etc/udev/rules.d
sudo gedit/etc/udev/rules.d/51-android.rules
添加
SUBSYSTEM=="usb",SYSFS{idVendor}=="1782", MODE="0666",GROUP="plugdev"
其中 1782 為展訊設備號,也可以通過lsusb 來查看所有 usb 設備。
說明:
1、展訊的設備號是1782,MTK的設備號是0e8d,高通660的設備號是056c,
其他平台的可查找確認後,填寫到這里。
2、如果沒有/etc/udev/rules.d/51-android.rules 文件,需要自己創建一下。
3、修改/etc/udev/rules.d/51-android.rules不需要重啟Linux機器,重新插拔一下設備就可以了。再次運行adb devices就可以看到你的設備已經連接。
在命令窗口執行adb shell; adb devices
可以shell登錄手機,也可以出 log, logcate 具體命令還需要學習。
使用上文的步驟操作之後,大多數系統里adb都可以使用,但在有些版本的adb或者系統中仍會報如下問題:
apuser@ubuntu2:~/adbtools$ adb devices
List of devices attached
faf80ac1 no permissions (user in plugdev group; areyour udev rules wrong?); see [http://developer.android.com/tools/device.html]
可使用一下解決方案,進行解決
解決方案:
setp 1: lsusb 找到你手機的usb 地址
apuser@ ubuntu2:~/adbtools$ lsusb
Bus 002 Device 002: ID 1f75:0621 Innostor Technology Corporation
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 006: ID 0bda:58db Realtek Semiconctor Corp.
Bus 001 Device 005: ID 8087:0a2b Intel Corp.
Bus 001 Device 004: ID 138a:0097 Validity Sensors, Inc.
Bus 001 Device 003: ID18f8:0f99
Bus 001 Device 014: ID 19d2:ffb0 ZTE WCDMA Technologies MSM
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
他會列出來所有的usb 設備。如果試下找不到,那麼拔掉設備看下,哪了沒有了就是哪個。
setp2: 配置規則文件
apuser@ ubuntu2:~/adbtools$ sudo gedit /etc/udev/rules.d/51-android.rules
[sudo] password for apuser:
之後把這些文本 到編輯器裡面:
ATTR{idProct}=="ffb0",SYMLINK+="android_adb", MODE="0660",GROUP="plugdev", TAG+="uaccess", SYMLINK+="android"
注意:ffb0 是查找到的手機設備的usb 的地址。
Bus 001 Device 014: ID 19d2:ffb0 ZTE WCDMATechnologies MSM
改成你的地址。
如果沒有/etc/udev/rules.d/51-android.rules 文件,麻煩自己創建一下。
setp3: 之後執行命令:
apuser@ ubuntu2:~/adbtools$ sudo usermod -a -G plugdev $(id -u -n)
apuser@ ubuntu2:~/adbtools$ sudo udevadm control --reload-rules
apuser@ ubuntu2:~/adbtools$ sudo service udev restart
apuser@ ubuntu2:~/adbtools$ sudo udevadm trigger
setp4: 之後重啟adb
apuser@ ubuntu2:~/adbtools$ adb kill-server
apuser@ ubuntu2:~/adbtools$ adb start-server
apuser@ ubuntu2:~/adbtools$ adb devices
List of devices attached
faf80ac1 unauthorized
apuser @ ubuntu2:~$adb devices
List of devices attached
???????????? no permissions
提示很明確,就是adb許可權有問題,而且
???????????? no permissions
這樣的提示,說明使用的adb版本較低,最好使用高版本的adb,安裝Ubuntu系統自帶的adb可能會出現這種現象。如果adb版本比較高,就會出現如下提示:
faf80ac1no permissions……
使用adb shell 也會提示許可權error
apuser@ ubuntu2:~$adb shell
error:insufficient permissions for device
根本原因是: adb server 需要以 root 的許可權啟動
臨時方法 如下:
apuser@ubuntu2:~$sudo -s
[sudo]password for apuser:
root@ ubuntu2:~#adb kill-server; adb start-server
* daemon not running. starting it now *
* daemon started successfully *
apuser@ ubuntu2:~# exit
apuser @ ubuntu2:~$
再次執行adb shell就可以了。
該許可權問題,可使用sudo啟動adb來解決,但不是根本解決之道,因為每次都要sudo來提高許可權,太麻煩,而且如果使用的eclpse,或者idle來調試時還是要面對該該問題。
最好按本文第一部分的方法安裝adb。如果按本文第一部分安裝了adb,但還出現改問題,可使用which adb查看,當前使用的adb那個路徑下的adb.以確保使用正確的adb
3、如果需要調試多個設備,以下的添加方法可能更為合適
這個方案對於不出現user in plugdev group; are your udev rules wrong?問題的系統來說是可行,的,如果出現user in plugdev group; are your udev rules wrong?問題,就不用考慮了。
清空51-android.rules,添加如下一行,一勞永逸(需要測試好幾種設備,每次都添加一個會很麻煩)。
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0666", GROUP="plugdev"
我並不是很清楚具體的含義,只是模仿10-vboxdrv.rules來寫的,這個是virtualbox的udev規則文件,因為名字開頭數字大文件中記錄的規則會覆蓋名字開頭數字小的文件中的規則,所以你需要盡可能設置的文件名大一些,51已經夠用了(我原來想寫在10-vboxdrv.rules,讓他們用一個文件,但是失敗了)
adb kill-server
sudo udevadmcontrol --reload-rules
sudo service udevrestart
sudo udevadmtrigger
lsusb
可將這些指令寫入一個sh腳本中,配置完規則,或者要檢查USB設備時,直接執行該腳本,以提高效率。
G. linux下關於adb命令的一些知識
Android Debug Bridge,一般簡稱為adb,主要存放在sdk安裝目錄下的platform-tools文件夾中,它是一個非常強大的命令行工具,通過這個工具你能夠與你的android設備進行交互。同時這是一個包含了以下三部分的cs模式的程序:
1) adb client
從圖中,我們知道client是運行在PC端的,每當我們發起一個adb命令的時候,就會開啟一個client程序。當然,當我們開啟DDMS或者ADT的時候,也會自動創建client。
當我們開啟一個client的時候,它首先會去檢測後台是否已經有一個server程序在運行著,否則會開啟一個adb-server進程。
所有的client都是通過5037埠與adb-server進行通信的。
2)adb daemon(adbd)
從圖中,我們知道daemon是作為一個後台進程運行在模擬器/真實Android設備中的。
daemon使用埠的范圍是5554-5585,每個模擬器/設備連接到PC端時,總會開啟這么一個後台進程,並且為其分配了兩個連續的埠,比如:
Emulator 1, console: 5554
Emulator 1, adb: 5555
也正因為每個設備都分一組兩個埠,也已adb連接手機的最大數量為16。
說回埠的作用,在這兩個埠中,其中偶數埠是用於server 與設備進行交互的,可以讓server直接從設備中讀取數據,而奇數埠是用來與設備的adbd進行連接通信的。
2) adb server
從圖中,我們同樣可以知道,server也是作為一個後台的程序運行在PC端的,他負責管理client進程以及adb daemon之間的通信。
當一個server開啟的時候,他會自動綁定並且監聽5037埠,接收client通過該埠發送過來的命令。同時server還會對5555-5585間的奇數埠進行掃描,進行對已連接設備的定位。
1.2 常用的adb命令
首先我們先來介紹一下,adb命令的使用格式吧:
adb [-d|-e|-s ]
adb是必須的,接下來方括弧[]裡面的內容不是必須的,最後才是我們需要執行的命令操作,例如 adb -s emulator-5554 install UCBrowser.apk (這是安裝UC瀏覽器的意思)
下面先介紹下,前面幾個參數的含義吧:
-d: 讓唯一連接到該PC端的真實安卓設備執行命令,如果發現USB中連接有多部設備,將會報錯
-e: 讓唯一連接到該PC端的模擬器執行命令,如果發現開啟了多個模擬器,將會報錯
-s:通過設備的序列號進行指定設備執行命令
如果設備只連接有一個設備或者一個模擬器的時候,可以不用聲明這三個參數,adb默認會讓這部唯一連接到的設備進行命令執行。
ok,下面開始講解常用的命令吧:
1) 查看當前PC端連接有多少設備:
adb devices
終端中的執行結果為:
從上圖中,我們看到了設備有的兩種狀態,其實執行該命令,可能返回的狀態有三種:
I. device 設備已經成功連接到了adb-server
II. offline 設備並沒有連接到adb或者沒有響應
III. no device 並沒有設備/模擬器連接
2) 查看adb的版本
adbversion
終端中的執行結果為:
3) 給設備進行軟體的安裝
adb -s install
eg:
adb -s 99eb07a9 install D://Test.apk
終端中的執行結果為:
除了上面這種方法,我們還有另外一個命令:
adb -s shell pm install [options]
其中[options]中最常用的選項是-r,代表著本次安裝是重新安裝,會保留用戶數據。
4) 卸載設備中已經安裝的軟體
adb -s uninstall
eg:
adb -s 99eb07a9 uninstall cn.uc.test
終端中的執行結果為:
除了上面這種方法,我們還有另外一個命令:
adb -s uninstall [options]
這里的options是-k,加上該參數表明卸載軟體後依舊保留用戶數據
5) 將數據從設備復制到PC中
adb -s pull
eg:
adb -s 99eb07a9 pull /sdcard/stericson-ls D://
終端的執行結果:
在D://盤中我們也可以發現stericson-ls文件
6) 講數據從PC端復制到設備中
adb -s push
eg:
adb -s 99eb07a9 push d://stericson-ls /sdcard/
終端的執行結果:
7) 獲取連接到的手機的序列號
adb get-serialno
終端的執行結果:
8)獲取設備的連接狀態
adb -s get-state
eg:
adb -s 99eb07a9 get-stat
終端的執行結果:
9) 等待設備連接成功
adb wait-for-device
該命令將會阻塞一直到默認連接的那部機器狀態變為device,也就是連接成功。
10) adb-server 的開啟與關閉
adb kill-server
adb start-server
終端的執行結果:
有時候我們開啟server會失敗,這是因為我們裝了的手機助手,豌豆莢或者其他軟體自帶有自己的adb,導致埠沖突開啟失敗。主要關掉那些軟體並且殺掉那些軟體自帶的adb進程重來即可。
1.2 手機執行Shell命令
眾所周知,Android的內核本身就是Linux,所以Android本身也支持Linux命令,但是因為是手機系統,所以進行了一定的刪減,部分命令不支持,而不支持的部分,我們可以通過安裝busybox這個軟體進行
填補。
下面我們講解下如何在手機中執行Shell命令:
1) 每次都加上adb shell來進行命令的發送與執行
adb shell
2) 先通過adb shell進入手機Shell執行狀態,然後直接輸入Linux命令,如圖:
1.3 Activity Manager 常用命令與參數說明
一般情況下,我們最常用它來進行app的開啟,並且傳遞一定的參數過去,比如:
adb shell am start -a android.intent.action.VIEW -n cn.uc.test/.MainActivity -d
在這里就不做太過詳細和重復的說明了
1.4 Package Manager 常用命令與參數說明
1) 使一個apk處於禁用狀態,相當於卸載了:
disable
其中 PACKAGE_OR_COMPONENT的格式是 package/class, 如 com.UCMobile/.main.UCMobile
eg:
adb shell su disable com.UCMobile/.main.UCMobile
終端執行結果:
同時我們在手機上發現,UC瀏覽器的圖標不見了
2) 讓一個apk從禁用狀態恢復過來
enable
其中 PACKAGE_OR_COMPONENT的格式是 package/class, 如 com.UCMobile/.main.UCMobile
eg:
adb shell su enable com.UCMobile/.main.UCMobile
終端執行結果:
同時我們從手機上發現,UC瀏覽器的圖標又回來啦。
3) 查看一個apk所在的路徑
pm path
eg:
adb shell pm path com.UCMobile
終端執行結果:
4) 查看手機中裝的所有的包
pm list packages
再次不做過多的說明
1.5其他常用的adb命令
1) 屏幕錄像
例如,屏幕開始錄像並且儲存到/sdcard中,同時名字為demo.mp4
adb shell screenrecord /sdcard/demo.mp4
2) 關閉設備請求,開啟設備
adb shell stop
adb shell start
3)設備關機以及重啟
adb reboot
adb shutdown
H. 如何在centos8中安裝android-tools-adb
1、新建AndroidSDK文件夾
cd ~
mkdir AndroidSDK
2、上傳tools_r25.2.3-linux.zip到AndroidSDK目錄
tools_r25.2.3-linux.zip
3、解壓tools_r25.2.3-linux.zip
unzip tools_r25.2.3-linux.zip
4、下載SDK,這一步需要在圖形界面下操作,並且需要聯網
cd ~/AndroidSDK/tools
./android
#在彈出的圖形界面中選擇ADB調試工具(Tools目錄下的Android SDK Tools、Android Platform Tools、Android SDK Build-tools,根據android版本選擇)和要安裝的SDK,安裝即可. 《linux 就該這么學》
5、配置環境變數
vi ~/.bashrc
#在最後一行下面添加以下代碼:
export PATH=$PATH:/root/AndroidSDK/platform-tools
#按ESC鍵,再按冒號鍵,輸入wq,回車,保存退出
#刷新配置
source .bashrc
I. 「ADB」怎樣安裝使用
跟你的操作系統有關
windows電腦:
要使用adb,首先電腦里要有adb程序,這個可以自己下載。
下載好之後,有兩種方式使用adb:
在cmd中,使用cd命令,找到adb.exe所在路徑,然後使用adb指令就可以了
把adb程序加到環境變數,具體步驟可以參考:http://jingyan..com/article/17bd8e52f514d985ab2bb800.html
加入之後就好辦了,打開cmd直接使用adb指令就可以了
linux電腦:
打開終端,通過apt-get安裝adb
sudo add-apt-repository ppa:nilarimogard/webupd8
sudo apt-get update
sudo apt-get install android-tools-adb
之後使用就行
還有啥不懂得就再追問吧
J. 怎樣在Ubuntu下安裝Android SDK/ADB
Ubuntu電腦安裝Android SDK/ADB
第一步,你要下載Linux版Android SDK的安裝或文件包,然後你需要從Android SDK Manager內下載Platform Tools
Package
請從Google官方獲取Android
SDK安裝或文件包,通常情況,你下載的文件名為android-sdk_rxx-linux.tgz的形式,rxx代表版本,比如,r16版,即android-sdk_r16-linux.tgz,r24版,即android-sdk_r24-linux.tgz
請放置Android SDK安裝或文件包在你的用戶主目錄
在你的Ubuntu電腦上打開終端窗口
解壓Android SDK文件:
cd ~
tar -zxvf android-sdk_r16-linux.tgz
在~/android-sdk-linux/tools字目錄,有一個叫做android的可執行文件,盡管名字是android,但它實際上是Android
SDK Manager
運行Android SDK Manager:
./~/android-sdk-linux/tools/android
選擇Android SDK
Tools與Android SDK Platform-tools項,點Install
packages安裝Platform Tools
Package工具包。包括ADB與Fastboot可執行的文件在內的工具包都會被下載,由於下載的文件較多而需要一定的時間,你能去喝點東西
你下載的Platform Tools
Package工具包文件將位於新創建的~/android-sdk-linux/platform-tools目錄
第二步,修改ADB與Fastboot可執行文件的默認PATH路徑環境。PATH環境變數可以是在~/.profile(或~/.bash_profile)或者~/.bashrc文件內修改,~/.profile文件是讀取所有互動式Shell的登錄,~/.bashrc文件讀取所有非互動式Shell的登錄(如sftp),在大多數默認情況下,~/.profile文件導入所有~/.bashrc文件的設置。PATH命令設定的改變必須包括/android-sdk-linux/tools與/android-sdk-linux/platform-tools目錄
kevdog的PATH命令設定通過Ubuntu系統內初始的默認編輯器Gedit在~/.bashrc文件底部增加了一行:
export
PATH=${PATH}:${HOME}/android-sdk-linux/tools:${HOME}/android-sdk-linux/platform-tools
第三步,我們需要為Ubuntu創建udev設備管理規則,從而讓設備在通過USB埠連接到電腦時能被正確地識別
將設備連接到電腦,然後執行命令:
lsusb
你會看到類似於下面的輸出信息:
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation
2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004
Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001:
ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 063: ID 04e8:6860
Samsung Electronics Co., Ltd
由於kevdog的設備是Samsung的某款設備,因此你能看到相應的識別信息:
Bus 001 Device 063: ID
04e8:6860 Samsung Electronics Co., Ltd
我們來解釋下上面的識別信息:
Bus 001 Device
063,設備端的名稱是/dev/bus/usb/001/063,即這個信息可以幫助我們確定設備端的名稱
04e8,vendorID,即供貨商編號
6860,proctID,即產品編號
使用設備端的名稱/dev/bus/usb/001/063可以讓我們查詢設備的屬性,查詢這些屬性有時很有必要,因為udev設備管理匹配設備是基於特定標準的。為此,我們需要一個正確的udev設備匹配規則集,這個過程的第一步就是查詢能被連接或插入到我們規則集的准則,這可以通過udevadm程序來實現,並且有兩種方式現,它們生成的輸出信息為我們的設備構建udev設備管理規則:
udevadm查詢udev設備管理規則方法1:
udevadm info -q all -n <name of device
node>
根據原作者的實際情況,設備端名稱是/dev/bus/usb/001/063,因此命令是:
udevadm info -q all -n /dev/bus/usb/001/063
你會看到類似於下面的輸出信息:
$ udevadm info -q all -n /dev/bus/usb/001/063
P:
/devices/pci0000:00/0000:00:1d.7/usb1/1-8
N: bus/usb/001/063
S:
libmtp-1-8
S: GalaxyNexus
E: UDEV_LOG=3
E:
DEVPATH=/devices/pci0000:00/0000:00:1d.7/usb1/1-8
E: MAJOR=189
E:
MINOR=62
E: DEVNAME=/dev/bus/usb/001/063
E: DEVTYPE=usb_device
E:
DRIVER=usb
E: PRODUCT=4e8/6860/216
E: TYPE=0/0/0
E: BUSNUM=001
E: DEVNUM=063
E: SUBSYSTEM=usb
E: ID_MTP_DEVICE=1
E:
ID_MEDIA_PLAYER=samsung_galaxy-s2
E: ID_VENDOR=samsung
E:
ID_VENDOR_ENC=samsung
E: ID_VENDOR_ID=04e8
E: ID_MODEL=Galaxy
E:
ID_MODEL_ENC=Galaxy
E: ID_MODEL_ID=6860
E: ID_REVISION=0216
E:
ID_SERIAL=samsung_Galaxy_0146B06501005018
E:
ID_SERIAL_SHORT=0146B06501005018
E: ID_BUS=usb
E:
ID_USB_INTERFACES=:ffff00:ff4201:
E: DEVLINKS=/dev/libmtp-1-8
/dev/GalaxyNexus
E: TAGS=:udev-acl:
我們使用的規則從有E:(E=ENV=Device
Property設備屬性值)的行開始
udevadm查詢udev設備管理規則方法2:
udevadm info -a -p $(udevadm info -q path
-n <name of device node>)
根據原作者的實際情況,設備端名稱是/dev/bus/usb/001/063,因此命令是:
udevadm info -a -p
$(udevadm info -q path -n /dev/bus/usb/001/063)
你會看到類似於下面的輸出信息:
$ udevadm info -a -p $(udevadm info -q path -n /dev/bus/usb/001/063)
Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found,
all possible attributes in the udev rules key format.
A rule to match, can
be composed by the attributes of the device
and the attributes from one
single parent device.
looking at device
'/devices/pci0000:00/0000:00:1d.7/usb1/1-8':
KERNEL=="1-8"
SUBSYSTEM=="usb"
DRIVER=="usb"
ATTR{configuration}==""
ATTR{bNumInterfaces}==" 2"
ATTR{bConfigurationValue}=="1"
ATTR{bmAttributes}=="80"
ATTR{bMaxPower}=="500mA"
ATTR{urbnum}=="29"
ATTR{idVendor}=="04e8"
ATTR{idProct}=="6860"
ATTR{bcdDevice}=="0216"
ATTR{bDeviceClass}=="00"
ATTR{bDeviceSubClass}=="00"
ATTR{bDeviceProtocol}=="00"
ATTR{bNumConfigurations}=="1"
ATTR{bMaxPacketSize0}=="64"
ATTR{speed}=="480"
ATTR{busnum}=="1"
ATTR{devnum}=="63"
ATTR{devpath}=="8"
ATTR{version}==" 2.00"
ATTR{maxchild}=="0"
ATTR{quirks}=="0x0"
ATTR{avoid_reset_quirk}=="0"
ATTR{authorized}=="1"
ATTR{manufacturer}=="samsung"
ATTR{proct}=="Galaxy"
ATTR{serial}=="0146B06501005018"
looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb1':
KERNELS=="usb1"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{configuration}==""
ATTRS{bNumInterfaces}==" 1"
ATTRS{bConfigurationValue}=="1"
ATTRS{bmAttributes}=="e0"
ATTRS{bMaxPower}==" 0mA"
ATTRS{urbnum}=="1403"
ATTRS{idVendor}=="1d6b"
ATTRS{idProct}=="0002"
ATTRS{bcdDevice}=="0300"
ATTRS{bDeviceClass}=="09"
ATTRS{bDeviceSubClass}=="00"
ATTRS{bDeviceProtocol}=="00"
ATTRS{bNumConfigurations}=="1"
ATTRS{bMaxPacketSize0}=="64"
ATTRS{speed}=="480"
ATTRS{busnum}=="1"
ATTRS{devnum}=="1"
ATTRS{devpath}=="0"
ATTRS{version}==" 2.00"
ATTRS{maxchild}=="8"
ATTRS{quirks}=="0x0"
ATTRS{avoid_reset_quirk}=="0"
ATTRS{authorized}=="1"
ATTRS{manufacturer}=="Linux 3.0.0-14-generic
ehci_hcd"
ATTRS{proct}=="EHCI Host Controller"
ATTRS{serial}=="0000:00:1d.7"
ATTRS{authorized_default}=="1"
looking at parent device '/devices/pci0000:00/0000:00:1d.7':
KERNELS=="0000:00:1d.7"
SUBSYSTEMS=="pci"
DRIVERS=="ehci_hcd"
ATTRS{vendor}=="0x8086"
ATTRS{device}=="0x27cc"
ATTRS{subsystem_vendor}=="0x103c"
ATTRS{subsystem_device}=="0x3010"
ATTRS{class}=="0x0c0320"
ATTRS{irq}=="20"
ATTRS{local_cpus}=="ff"
ATTRS{local_cpulist}=="0-7"
ATTRS{dma_mask_bits}=="32"
ATTRS{consistent_dma_mask_bits}=="32"
ATTRS{broken_parity_status}=="0"
ATTRS{msi_bus}==""
ATTRS{companion}==""
looking at
parent device '/devices/pci0000:00':
KERNELS=="pci0000:00"
SUBSYSTEMS==""
DRIVERS==""
我們使用的規則從有ATTRS(ATTRS=Device
Attributes設備屬性)的行開始
不管是ENV,還是ATTRS,我們可以構建一個udev設備管理規則集。規則集的名稱可以隨意,根據原作者的意圖,我們叫做51-android.rules:
你能這樣建立規則集文件:
gksu gedit /etc/udev/rules.d/51-android.rules
之後,請在規則集文件中加入相關的規則,以原作者的規則來看,注意是一行一個:
SUBSYSTEM=="usb",
ENV{ID_VENDOR_ID}=="04e8", ENV{ID_MODEL}=="Galaxy", MODE="0666",
SYMLINK+="GalaxyNexus"
SUBSYSTEM=="usb", ENV{ID_VENDOR_ID}=="04e8",
ENV{ID_MODEL_ID}=="6860", MODE="0666", SYMLINK+="GalaxyNexus"
SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", ATTR{idProct}=="6860",
ATTR{proct}=="Galaxy" MODE="0666", SYMLINK+="GalaxyNexus"
如上面所加的規則,這些規則匹配准則是SUBSYSTEM,
ENV,ATTR,它只會修改設備的模式MODE(0666=rw-rw-rw-)與創建鏈接於/dev/GalaxyNexus的GalaxyNexus標識。當然,更多的指令可以分配給設備,如插入或移除設備時的執行命令,你能這樣指定指令:
ACTION=="add", RUN+="<name of action>"
ACTION==」remove」,
RUN+="<name of action>"
例如,我們要設定設備在插入或彈出時播放一個聲音或MP3文件,可以如下指令設定:
ACTION=="add", RUN+="/usr/local/bin/NexusMount.sh"
ACTION==」remove」, RUN+="/usr/local/bin/NexusUnmount.sh"
需要注意的是,每個ACTION指令設定必須在它自己的命令行;目錄必須正確;指令可以是多重設定
一旦規則構建完成,我們需要保存/etc/udev/rules.d/51-android.rules規則文件
在你執行規則集前,測試一下通常是一個好主意,因為那樣你能很容易地找出編寫規則集的錯誤:
你能使用udevadm工具簡單地完成規則集的測試:
udevadm info -q path -n d=<device
name>
根據原作者的設備端名/dev/bus/usb/001/063,測試行為:
udevadm test --action="SUBSYSTEM=="usb", ENV{ID_VENDOR_ID}=="04e8",
ENV{ID_MODEL}=="Galaxy" MODE="0666", SYMLINK+="GalaxyNexus"" $(udevadm info -q
path -n /dev/bus/usb/001/063)
雖然測試輸出行相當長,兩行輸出信息正確地識別規則集的指令設定:
udev_rules_apply_to_event: MODE 0666
/etc/udev/rules.d/51-android.rules:1
udev_rules_apply_to_event: LINK
'GalaxyNexus' /etc/udev/rules.d/51-android.rules:1
一旦你確認了規則集正確,請重啟udev設備管理服務:
sudo service udev restart
第四步,退出電腦的登錄,然後重新登錄回
在設備插入的情況下,執行ADB命令,如確認設備連接:
$ adb devices
你會看到設備識別號信息,根據原作者的設備,它是
0146B06501005018 device
如果你的設備已啟動在Fastboot模式,許多設備不啟動可能也行,你能執行Fastboot命令,如標準的Fastboot設備:
$
fastboot devices