2010年9月14日 星期二

如何將 busybox 加到 Android 的 system.img 裡

根據上一篇文章的作法,如果要將預先編譯好的 busybox 加到 Android 裡,其實方法也同樣簡單。

首先下載 Busybox 的源碼,並以「靜態連結」的方式編譯,並將 busybox 這個可執行檔取出來。

然後在下載回來的 AOSP 源碼裡建立一個適當的目錄:

mkdir -p prebuilt/android-arm/busybox

接著將剛才編譯出來的 busybox 可執行檔複製到 prebuilt/android-arm/busybox 這個路徑下。

接著再於 prebuilt/android-arm/busybox 這個路徑下編寫一個 Android.mk 文件,內容為:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

# Explicitly mark busybox as "eng" so that it doesn't
# get included in user or SDK builds. (GPL issues)
#
LOCAL_SRC_FILES := busybox
LOCAL_MODULE := busybox
LOCAL_MODULE_CLASS := EXECUTABLES
LOCAL_MODULE_TAGS := debug
include $(BUILD_PREBUILT)

# Any prebuilt files with default TAGS can use the below:
prebuilt_files :=

$(call add-prebuilt-files, EXECUTABLES, $(prebuilt_files))

最後,執行 make 得到的 system.img 就會包含 busybox 了。

如何將 bash 加到 Android 的 system.img 裡

也許我還是較習慣 bash 吧!所以也就嘗試將預先編譯好的 bash 加到 Android 裡。

其實方法並不難。

首先,參考之前這篇文章以靜態連結的方式編譯出 bash 的可執行檔。

然後在下載回來的 AOSP 源碼裡建立一個適當的目錄:

mkdir -p prebuilt/android-arm/bash

接著將剛才編譯出來的 bash 可執行檔複製到 prebuilt/android-arm/bash 這個路徑下。

接著再於 prebuilt/android-arm/bash 這個路徑下編寫一個 Android.mk 文件,內容為:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

# Explicitly mark bash as "eng" so that it doesn't
# get included in user or SDK builds. (GPL issues)
#
LOCAL_SRC_FILES := bash
LOCAL_MODULE := bash
LOCAL_MODULE_CLASS := EXECUTABLES
LOCAL_MODULE_TAGS := debug
include $(BUILD_PREBUILT)

# Any prebuilt files with default TAGS can use the below:
prebuilt_files :=

$(call add-prebuilt-files, EXECUTABLES, $(prebuilt_files))

最後,執行 make 得到的 system.img 就會包含 bash 了。