為Android加入busybox工具

來源:互聯網
上載者:User

我們可以通過兩種方式進入Android的console:

1. 直接執行命令emulator -shell;

2. 在啟動emulator後,通過命令adb shell進入。

之後我們就可以使用一些linux下常用的命令了,如ls,cat等。然而Android內建的toolbox(位於/system/bin中)也太簡略了點,有些命令如find,Android並不支援或者支援得不好。下面將介紹如何為Android加入busybox工具,通過編譯得到一個可以在Android裡面啟動並執行busybox工具,我們就可以使用眾多常見的linux命令了,如find,touch等。

步驟如下:

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源碼目錄.

     先執行make menuconfig命令對編譯過程進行配置.  過程如下:

     Busybox Settings -> Build Options ->

     [*] 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的可執行檔.

6 在Android的console下建立目錄/data/busybox, 並使用下面的命令將檔案busybox複製該目錄中:

   adb push busybox /data/busybox

7 從Android的console進入/data/busybox目錄, 為可執行檔busybox加上可執行屬性: chmod +x 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檔案設定環境變數.

     請參考文章: 對Android啟動過程的進一步研究

     要提醒的是, 修改PATH環境變數的時候, 應該把busybox常用命令的路徑"/data/busybox/bin"放在Android的常用命令路徑"/system/bin"的前面, 否則, 先尋找得到的將不是busybox的命令,  可以這樣設定:

     export PATH /data/busybox/bin:/sbin:/system/sbin:/system/bin:/system/xbin

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.