2010/10/25

cross compile busybox for android (為 android 準備 busybox)

我主要是參考cross compile busybox for android,大綱是:

1. 準備 cross compile 工具。
1. 這一項我原本試著用 ubuntu 的內建工具,也就是 xxxx-arm-linux-gnueabi 套件組,可是失敗。
2. 在文中提到可以自Download Sourcery G++ Lite Edition for ARM下載,請選『EABI』、『IA32 GNU/Linux TAR』,我下載的版本是 https://sourcery.mentor.com/public/gnu_toolchain/arm-none-linux-gnueabi/arm-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2

3. 解壓後,我是放在 /usr/local/cross-arm 下

2. 若不想自己編譯,也可以從 busybox 網站直接下載執行檔,我試過可以執行的有 busybox-armv6l, busybox-armv5l, busybox-armv4tl

3. 下載 busybox source code, 上面執行檔最新的是 1.17.2, 但是 source code 是 1.17.3, 因此也可以自己編譯 最新的 busybox 1.17.3 source code
1. 解壓後,使用 make menuconfig 來選擇組態
2. Busybox Settings -> Build Options -> 裡面,挑下面的選項,將它編譯成靜態載入
[*] Build BusyBox as a static binary (no shared libs)
3. 在同樣的地方,挑 () Cross Compiler prefex,按 Enter 後必須填第一步安裝的 cross compile tools, 我的是:
/usr/local/cross-arm/bin/arm-none-linux-gnueabi-
確定後剛剛的選項會變成:
(/usr/local/cross-arm/bin/arm-none-linux-gnueabi-) Cross Compiler prefex
4. 在 Busybox Settings -> Installation Options-> 裡面,挑下面的選項,讓 busybox 可以不必安裝到 /usr 下
[*] Don't use /usr
註:1.19.3 版移到 Busybox Settings -> General Configuration -> 下面了
4. 上面的選項存檔、離開後,就可以用 make 來編譯
5. 放到 device 上,我是模擬機,道理一樣:
adb push busybox /data/busybox.exe
上面是故意改名字的,下一步要用到
6. adb shell:
# mkdir /data/busybox
# cd /data/busybox
# /data/busybox.exe --install .

7. 改變 PATH 環境變數
這一項比較麻煩,原則上就是要改變 system image, 所以有兩個方法,一個是自己改 ramdisk.img, 要用這一招的話請參考 busybox及bash在android中的安裝及init.rc修改
還有一個方法,就是第一點文中的方法,將系統重新掛載成 rewritable.....

su #取得root權限
mount -o remount,rw /dev/block/mtdblock6 /system #重新mount使/system可寫
mv busybox /system/bin/ #移動busybox
chmod 777 /system/bin/busybox #設為可執行
/system/bin/busybox --isntall .
mount -o remount,ro /dev/block/mtdblock6 /system #恢復/system為只讀

0 意見: