Android自帶的toolbox分析及擴充套件

2021-07-02 18:50:06 字數 2615 閱讀 2407

騰了幾天,被android那點兒少得可憐的shell命令折磨的死去活來,終於下定了革命的決心。看一下怎麼把渺小的toolbox替換成偉大的busybox吧。先大致描述一下android系統中的shell程式部分。

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的連線。

接下來翻譯一下網上的一篇文章,借助它,可以把android自帶的toolbox替換成busybox。

installing busybox command line tools

在android系統中安裝busybox命令列工具

一、編譯busybox

2、解壓原始碼:

tar jxf busybox-1.13.3.tar.bz2

3、執行menuconfig對busybox進行配置

cd busybox-1.13.3/

make menuconfig

4、在menuconfig中設定以下選項

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=/opt/arm/arm-2007q3/bin:$path

6、編譯busybox

make

二、安裝busybox

把busybox安裝到android系統中去,做這幾步:

1、在android系統根目錄下建立乙個/bin目錄。

mkdir //bin

2、把編譯出來的busybox複製到/bin目錄下

cp busybox //bin

3、把busybox安裝到android機器中

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自帶的toolbox是沒有test這個命令的。我們要新增test命令就可以:

cd /system/bin

ln -s busybox test

對於一些原有的命令,如ls、chown等,如果不想用toolbox,也可以把它們的連線目標指向toolbox,拿chown來舉例。

cd /system/bin

rm chown

ln -s busybox chown

這樣做,最大的好處就是保證對系統的改動最少,又可以最大限度的擴充套件shell功能。

為android加入busybox工具

什麼是交叉編譯

加入 busybox source

Android自帶樣式

android theme android style theme.dialog 將乙個activity顯示為能話框模式 android theme android style theme.notitlebar 不顯示應用程式標題欄 android theme android style theme...

android 自帶樣式

簡單介紹一下android開發中系統自帶的一些樣式 android theme android style theme.dialog 將乙個activity顯示為對話方塊模式 android theme android style theme.notitlebar 不顯示應用程式標題欄 androi...

android 自帶APP 作用

anthalservice.apk 就是天線介面,用來連線天線的。atfwd.apk atuner.apk backuprestoreconfirmation.apk 備份和重置 basicdreams.apk 休眠模式 bluetooth.apk 藍芽 bluetoothext.apk brows...