================================================== =================== 第一篇
大家是否有過這樣的經歷,在命令行里輸入adb shell,然後使用命令操作你的手機或模擬器,但是那些命令都是常見Linux命令的閹割縮水版,用起來很不爽。是否想過在Android上使用較完整的shell呢?用BusyBox吧。不論使用adb連接設備使用命令行還是在手機上直接用terminal emulator都可以。
一、什麼是BusyBox ? BusyBox 是標準Linux 工具的一個單個可執行實現。BusyBox 包含了一些簡單的工具,例如cat 和echo,還包含了一些更大、更複雜的工具,例如grep、find、mount 以及telnet。有些人將BusyBox 稱為Linux 工具裡的瑞士軍刀.簡單的說BusyBox就好像是個大工具箱,它集成壓縮了Linux 的許多工具和命令。(摘自百度百科)
二、在Android上安裝BusyBox 準備: 0. 先要把手機給Root了,具體教程這裡就不提供了,網上有很多。 2. 需要有一個命令行的環境,在電腦上使用adb或在手機上使用terminal emulator。 3. 連接手機和電腦,手機的USB Mode設置成None(僅充電),並且開啟USB調試模式。
安裝: 1. 將busybox-armv6l重命名為busybox 2. 將busybox傳入手機的SD卡,可以使用下面的命令或自己想其他辦法。 打開terminal(Linux,Mac)或cmd(Windows) - adb push ~/Desktop/busybox /mnt/sdcard
複製代碼
其中的~/Desktop請根據自己的情況替換成正確的路徑 3. 輸入以下命令,為了在/system目錄寫入文件 - adb shell
- su
- mount -o remount,rw /system
複製代碼
使用ls 檢查一下/system 裡是否有xbin 目錄,沒有的話輸入mkdir xbin 創建,因為本示例是要把busybox安裝到/system/xbin 。
4. 複製busybox 文件到/system/xbin,並為其分配“可執行”的權限 - cp /mnt/sdcard/busybox /system/xbin
- chmod 755 busybox
複製代碼
5. 這時就可以使用busybox 的命令了,例如以前沒有清屏的clear命令,現在只需輸入busybox clear 就可以實現清屏功能,使用完整版的ls 只需輸入busybox ls 。 但是每次前面都加上個busybox太麻煩了,所以我們還要繼續完成安裝。 在/system/xbin 下輸入
如果想安裝到別的目錄,則把點替換成別的路徑。 至此就安裝完成了,比較一下原來的ls 命令和busybox 裡的ls 命令。 常見錯誤: 1. 如果安裝時出現這樣的錯誤, busybox: /bin/zcat: No such file or directory busybox: /sbin/zcip: Invalid cross-device link 說明沒有輸入安裝路徑,正確的示例 busybox --install /system/xbin
2. 如果出現這樣的錯誤, cp: /system/xbin/busybox: Read-only file system
說明沒有正確輸入上面第三步的mount命令。
小技巧: 1. busybox 裡有ash 和hush 還有sh 這幾種shell,在命令行輸入ash 或hush,可以像在bash 裡那樣,通過按上下鍵選擇剛才輸入的命令。 2. android系統本身就有ls命令,busybox裡也有ls,輸入ls時調用的是android的ls,那麼想用busybox的ls就要每次都在前面加個busybox嗎?不用,使用alias命令可以搞定。
解除alias- unalias alias-name...
- unalias -a
複製代碼
同樣的,cp、mv等二者都有的命令都可以這樣搞定。也可以通過修改/init.rc 來解決。 ================================================== ===================
第二篇
1.進入終端
1.直接執行命令emulator -shell; 2. 在啟動emulator後,通過命令adb shell進入。 2.下載busybox以及交叉編譯工具1.首先去busybox主頁 下載最新版本的busybox源代碼. 2. 下載交叉編譯工具: GNU Toolchain for ARM Processors 下載地址:http://www.codesourcery.com/gnu_toolchains/arm/download.html 其中第一項選擇ARM EABI或ARM GNU/Linux,第二項選擇IA32 GNU/Linux TAR即可。 最後得到一個arm-2007q3-51-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2文件 將壓縮包解壓到linux下某個目錄, 並設置好環境變量, 使之能找到前綴為"arm-none-linux-gnueabi-"的交叉編譯工具. 3.對busybox進行相應配置
3. 進入busybox源碼目錄. 先執行make menuconfig命令對編譯過程進行配置. 過程如下: Busybox設置 - > Build選項 - >
Build BusyBox as a static binary (no shared libs )這個要選上,因上這樣子編譯出來的busyBox才是可以獨立運行的。
(/home/jo/tool/arm-2008q3/bin/arm-none-linux-gnueabi-) Cross Compiler prefex 這是交叉編譯器的"路徑+前綴",要根據具體的情況來設置。
Busybox Settings -> Installation Options->
Don't use /usr
這樣子編譯出來的busybox才不會安裝到你主機的/usr目錄下。一定要選上。 4執行make編譯源碼.如果編譯過程中產生無法找到頭文件的錯誤, 可指定交叉編譯器用到的頭文件所在路徑 .如 - $make -I ./home/jo/tool/arm-2008q3/arm-none-linux-gnueabi/libc/usr/include/
複製代碼
5 編譯成功後將得到一個名為busybox的可執行文件. 4.把busybox移植入android
6 在Android的console下建立目錄/data/busybox, 並使用下面的命令將文件busybox複製該目錄中: - adb push busybox /data/busybox
複製代碼
7從Android的console進入/data/busybox目錄,為可執行文件busybox加上可執行屬性: chmod 775 busybox 8 這時我們就可以使用busybox工具了, 如果希望在任何目錄下都可以直接使用bosybox,則需要將路徑/data/busybox export到path環境變量中: - export PATH=$PATH:/data/busybox
複製代碼
9 設置環境變量之後, 在命令行輸入busybox, 即可看到其用法, 如: 在當前目錄及其子目錄中查找名為init.rc的文件可使用以下命令: - $busybox find . -name init.rc
複製代碼
10 安裝busybox。 通過執行./busybox --install -s 我們會看到出現一些錯誤, 原因是因為Android系統的根目錄和/sbin目錄是只讀的. 因此我們無法把一些常用命令安裝到/bin目錄下, 也不能修改/init.rc文件來設置PATH環境變量. 對於如何執行命令busybox --install -s 的默認安裝路徑, 這裡我還不太清楚, 或許跟Makefile和編譯busybox的相關設置有關. 儘管我們不可以在Android裡面通過執行busybox --install -s 命令來安裝常用命令, 我們卻可以通過另外一個方法來把常用命令安裝到Android裡面. 方法很簡單, 可以先在外面的linux系統中執行make install命令把相關的命令提取出來. 然後再通過命令adb push ./_install/bin /data/busybox/bin 把這些常用命令複製進Android系統中.注意: make install安裝命令的所在路徑可通過執行make menuconfig進行設置, 默認為./_install目錄下面. 這樣,我們就不用每次使用busybox提供的一個命令時, 都要在前面加上busybox了. 11 修改/init.rc文件設置環境變量. 要提醒的是,修改PATH環境變量的時候, 應該把busybox常用命令的路徑"/data/busybox/bin"放在Android的常用命令路徑"/system/bin"的前面,否則,先查找得到的將不是busybox的命令, 可以這樣設置: - export PATH /data/busybox/bin:/sbin:/system/sbin:/system/bin:/system/xbin
複製代碼
================================================== ===================
第三篇
android 自帶的toolbox
shell實現分為兩部分: 一、shell解釋器和內置命令 源碼位於system/core/sh目錄下,主要完成shell命令的解釋查找,對於builtins.c中包含的內置命令,直接執行,對於toolbox的擴展命令,間接調用toolbox程序完成。
二、toolbox擴展命令
主要完成擴展命令的執行,每一個擴展命令對應一個name_main函數,如ls命令,對應ls_main函數。同時,每一個擴展命令都由一個system/core/toolbox/目錄下面的.c文件實現。toolbox.c會根據這個目錄下面的.c文件生成tools.h頭文件,並在system/core/toolbox/ Android.mk文件中為每個命令生成指向toolbox的連接。toolbox的實現結構使它擴展一個命令很容易。
假設現在我們自己想手工添加一個shell命令mycommand,只要在system/core/toolbox/目錄下面新建一個mycommand.c文件,並在裡面實現一個mycommand_main函數,然後在system/core/toolbox/ Android .mk中添加mycommand.c即可。Android.mk會自動把它編譯進toolbox程序,並在編譯生成的Android系統/system/bin目錄下為這個命令生成一個指向toolbox的連接。
替換toolbox為busybox
接下來翻譯一下網上的一篇文章,借助它,可以把Android自帶的toolbox替換成busybox。 安裝Busybox命令行工具 在Android系統中安裝busybox命令行工具 本文簡單地介紹了怎麼把busybox安裝到Android的文件系統中去。如果你想直接安裝,可以從下面的地址下載我已經預編譯好並在Android2.1系統上試驗成功的busybox,然後直接跳過下面的安裝步驟。 下載在Linux公社的1號FTP服務器裡,下載地址: FTP地址:ftp://ip 用戶名:username 密碼:passwd
一、編譯busybox 1、下載busybox的最新版本,本文寫作時最新版本是1.21.1。 2、解壓源碼: - tar jxf busybox-binaries.tar.bz2
複製代碼
3、運行menuconfig對busybox進行配置 cd busybox-1.21.1 / make menuconfig 4、在menuconfig中設置以下選項 Busybox設置 - > Build選項 - >將Busybox建立為靜態二進製文件(無共享庫) - 按“Y” Busybox設置 - > Build選項 - >交叉編譯器前綴 - 設置這個選項等於“arm-none-linux-gnueabi-” Busybox設置 - >安裝選項 - >不要使用/ usr - 按“Y” 5、把交叉編譯器的地址導入到環境變量: - export PATH=/opt/arm/arm-2007q3/bin:$PATH
複製代碼
6、編譯busybox 使 二、安裝busybox 把busybox安裝到Android[/url]系統中去,做這幾步: 1、在Android[/url]系統根目錄下創建一個/bin目錄。 - mkdir /<path-to-Android-fs>/bin
複製代碼
2、把編譯出來的busybox複製到/bin目錄下 - cp busybox /<path-to-Android-fs>/bin
複製代碼
3、把busybox安裝到Android[/url]機器中 - cd /bin
- ./busybox --install
複製代碼
三、把busybox作為默認shell 需要像下面這樣編輯一下init.rc 1、編輯console服務,讓它默認運行busybox - service console /system/bin/sh -> service console /bin/sh
複製代碼
2、把busybox路徑加入到環境變量中 - export PATH /sbin:/system/sbin:/system/bin:/system/xbin --> export PATH /bin:/sbin:/system/sbin:/system/bin:/system/xbin
複製代碼
注: 我使用busybox時,只是想簡單地增加一些命令,把toolbox一些功能不是很全的命令替換掉,所以操作上沒有上面說的那麼複雜。下面是我的替代方案,可以試一下: 1、把busybox複製到/system/bin目錄下。 - adb push busybox /system/bin
複製代碼
2、把要添加的命令通過ln建立到busybox的連接。 比如,Android[/url]自帶的toolbox是沒有test這個命令的。我們要添加test命令就可以: - cd /system/bin
- ln -s busybox test
複製代碼
這樣,用戶通過機器上的shell執行test命令時,就會調用busybox中實現test功能的applet。 對於一些原有的命令,如ls、chown等,如果不想用toolbox,也可以把它們的連接目標指向toolbox,拿chown來舉例。 - cd /system/bin
- rm chown
- ln -s busybox chown
複製代碼
這樣做,最大的好處就是保證對系統的改動最少,又可以最大限度的擴展shell功能。 ================================================== =================== 英文文檔
建立busybox 從以下網站下載最新版本的busybox。在撰寫本文時,最新版本是v.1.21.1。 http://www.busybox.net提取busybox來源:
- tar jxf busybox-1.21.1.tar.bz2Configure busybox by running menuconfig
- cd busybox-1.21.1/
複製代碼
make menuconfigIn menuconfig set the following options Busybox Settings --> Build Options --> Build Busybox as a static binary (no shared libs) - Enable this option by pressing "Y"
Busybox Settings --> Build Options --> Cross compiler prefix - Set this option equal to "arm-none-linux-gnueabi-"
Busybox Settings --> Installation Options --> Don't use /usr - Enable this option by pressing "Y"Export path to where the cross-compiler is - export PATH=/opt/arm/arm-2007q3/bin:$PATH
- Build busybox
- make
- Installing Busybox
複製代碼
-------------------------------------------------- ------------------------------
To install busybox in the target file-system Create a /bin directory in the target file-system. For example: mkdir /<path-to-Android[/url]-fs>/binCopy the busybox binary to the /bin directory in the target file-system cp busybox /<path-to-Android-fs>/bin Install the busybox command line tools on the target by executing the following commands: - cd /bin
- ./busybox --install
複製代碼
使Busybox外殼成為默認外殼
-------------------------------------------------- ------------------------------ Make the Busybox shell the default shell
-------------------------------------------------------------------------------- To make the busybox shell the default shell, edit the file "init.rc" in the target file-system as follows: Edit the console service so that it runs the busybox shell and not the default shell by replacing: service console /system/bin/shWith: service console /bin/shAdd the path of the busybox command line tools to the system path variable by replacing: export PATH /sbin:/system/sbin:/system/bin:/system/xbinWith export PATH /bin:/sbin:/system/sbin:/system/bin:/system/xbin
================================================== ===================
文章來源
|