Android自帶了命令工具集,但是使用起來很不方便,且很多linux上常用的命令都不支持,如不能使用cp,grep,tab補全,回格刪除,上下方向鍵記憶等等。所以,我們需要在Android系統中添加linux系統常用的工具集——busybox。
硬件環境:DM3730 EVM
軟件環境:TI_Android_FroYo_DevKit-V2.2
Host主機環境:Ubuntu10.04
說明,在軟件環境中,有ADB工具,可配置後使用。
ADB( Android Debug Bridge)工具一個調試和橋接工具,普遍地運用於Android系統和PC之間。可以有如下用途。
u 從主機下載應用程序到目標板上,安裝、運行
u 通過運程shell來啓動一個實例
u 調試應用程序
u 在目標板和虛擬機之間拷貝文件
ADB連接Host和board可通過如下方式:
u USB (Linux和Windows)
u USB Ethernet
u Ethernet
查看設備
$> adb devices
登錄設備shell
$>adb shell
從電腦上發送文件到設備
$>adb push <本地路徑> <遠程路徑>
從設備上下載文件到電腦
$>adb pull <遠程路徑> <本地路徑>
用pull命令可以把設備(手機)上的文件或者文件夾複製到本機電腦
顯示幫助信息
$>adb help
這個命令將顯示幫助信息
說明,此種方式上傳文件到target上失敗,但是可以從target上下載文件到PC。
使用mini-usb cable(USB OGT端口)連接DM3730和PC機,在虛擬機的右下角USB圖標處點擊選擇連接USB設備,此時在Windows上會彈出安全卸載的提示。
進入linux系統中,進入文件TI_Android_Froyo_DevKit-V2.2/Tools/Android-sdk-linux_86/
Tools中,使用其中的adb可執行文件。
驗證主機和目標板之間的ADB連接
$> ./adb devices
如果連接成功,則會打印如下信息:
List of devices attached
20100720 device
出現如下錯誤:
List of devices attached
???????????? no permissions
解決方法:
sudo ./adb kill-server //殺死在運行的server
sudo ./adb start-server //創建新的server
* daemon not running. starting it now *
* daemon started successfully *
sudo ./adb devices //檢測ADB設備
List of devices attached
20100720 device //檢測到ADB設備,ok
設置IP地址:
target #> netcfg
lo UP 127.0.0.1 255.0.0.0 0x00000049
eth0 UP 192.168.0.111 255.255.255.0 0x00001043 //設置ip地址可以在圖形界面中的ethernet配置中設置,也可以通過命令配置。
配置ADB後臺程序:
target #> setprop service.adb.tcp.port 5555
重啓adb服務
target #> stop adbd
target #> start adbd
3.3.2 Host主機端設置
設置adb連接:
$> export ADBHOST=192.168.0.111 //此IP時上邊板上設置的。
$> adb kill-server //關閉ADB服務
$> adb start-server //重開ADB服務
檢測adb設備:
$> adb devices
List of devices attached
emulator-5554 device //通過ethernet連接的ADB是以emulator開頭的
$>tar xvf busybox-1.17.0.tar.tar //這裏使用現成的busybox,你也可以下載最新的來製作
$>cd busybox-1.17.0/
$>make menuconfig
Busybox Settings --->
General Configuration --->
[*] Don't use /usr--> //要選擇此項,不然又部分命令會被安裝到_install/usr/bin和_install/usr/sbin, busybox-1.18.0中,這項沒有用,不管選擇與否都會有部分命令安裝到_install/usr/bin和_install/usr/sbin。使用busybox-1.17.0就正常,且此項在Build Options中。
Build Options --->
[*] Build BusyBox as a static binary (no shared libs) //使用靜態庫編譯
(arm-none-linux-gnueabi-) Cross Compiler prefix //填入交叉編譯工具鏈名,如果不在路徑PATH中,可使用絕對路徑。
Busybox Library Tuning --->
[*] Tab completion -> //檢測此項是否選擇,如沒有選,就不能使用tab鍵補全,默認是選擇的。
$>make //生成busybox文件
$>make install //將busybox命令安裝到_install/bin和_install/sbin目錄
在板上系統中的/data目錄下新建一個busybox文件夾,用來存放busybox的相關文件,並修改文件夾屬性。
target #mkdir /data/busybox
target #chmod 777 /data/busybox
$ ./adb push busybox /data/busybox
846 KB/s (1901380 bytes in 2.192s) //傳送成功
進入target環境調試:
$ ./adb shell
target # cd data/busybox
target # ls
busybox
target # ./busybox ls //執行busybox,
busybox
執行busybox sh命令
target #./busybox sh //執行這個命令後,便能正常使用tab補全,回格刪除,上下方向鍵記憶等命令。但是沒有cp命令。
$ ./adb push bin /data/busybox/bin //可以使用如cp,grep等命令
$ ./adb push sbin /data/busybox/sbin //可以使用如ifconfig,insmod,lsmod等命令
target #export PATH=/data/busybox/bin:/data/busybox/sbin:$PATH
//添加bin和sbin到路徑中,不過要將bin和sbin放在Android系統中自帶的/system/sbin和/system/bin前面,不然會優先使用Android系統的命令。
target # $PATH
/data/busybox/bin:/data/busybox/sbin:/sbin:/system/sbin:/system/bin:/system/xbin:/data/busybox
執行了busybox sh,添加了busybox/bin,busybox/sbin路徑後,一切的一切如linux系統一樣熟悉,方便使用了。
爲了在每次啓動Android系統時,都能自動啓用busybox命令工具,修改Android系統啓動文件/init.rc如下:
# setup the global environment
export PATH /data/busybox/bin:/data/busybox/sbin:/sbin:/system/sbin:/system/bin:/system/xbin
#export PATH /sbin:/system/sbin:/system/bin:/system/xbin
//這樣在啓動系統時,便會自動添加busybox工具路徑。如果在Android系統中不好修改,可以將這個文件通過ADB工具傳送到linux系統中修改好後在傳回來。
#service console /system/bin/sh //註釋掉Android系統自帶的shell
service console /data/busybox/bin/sh //使用busybox的shell
console
保存init.rc後,重啓系統,就能正常使用busybox的各種工具了!
在通過USB連接的ADB工具中,不能上傳文件到DM3730板上系統中。