为Android交叉编译busybox

鉴客 发布于 2011/07/28 07:18
阅读 8K+
收藏 9

鉴于android调试模式中提供的命令太少而且功能太弱,给它添加个busybox是必需的,在网上找了几个已经编译好的busybox都挺不错,可是为了折腾,也为了根据自己喜好添加或者删除一些自己不用的命令,于是就想着自己编译一个。记得busybox是很好编译的,有跟编译内核差不多的menuconfig,而且其中选项比kernel简洁得多了。

我是在Linux下编译的,具体的过程如下:

1、准备

ARM的交叉编译工具,我这里使用的是Sourcery G++ Lite

下载地址:http://www.codesourcery.com/sgpp/lite/arm/portal/subscription?@template=lite
Busybox的源代码

下载地址:http://busybox.net/downloads/

2、编译busybox

在busybox目录下执行

make menuconfig
进入图形选择模式,这里有几个选项是必选或者必填的

Busybox Settings -> Build Options ->
[*] Build BusyBox as a static binary (no shared libs)
//这个是静态编译的选项,这样编译出来的可执行文件才不依赖系统的动态链接库
(/home/yunt/works/cross-arm/bin/arm-none-linux-gnueabi-) Cross Compiler prefex
//这是交叉编译器的”路径+前缀”,这里要根据实际安装位置填,在我的机器上安装位置为/home/yunt/works/cross-arm

Busybox Settings -> Installation Options->
[*] Don’t use /usr
//这样子编译出来的busybox才不会安装到你主机的/usr目录下。一定要选上。

接下来退出menuconfig模式后运行make编译
完成后会在当前目录生成busybox的可执行文件

3、安装进android
连上手机数据线,然后执行

adb push busybox /sdcard/ #将busybox push进SD卡
adb shell #进入终端
su #取得root权限
mount -o remount,rw /dev/block/mtdblock6 /system #重新mount使/system可写
mv busybox /system/bin/ #移动busybox
chmod 777 /system/bin/buxybox #设为可执行
mount -o remount,ro /dev/block/mtdblock6 /system #恢复/system为只读
busybox #执行busybox
BusyBox v1.15.2 (2009-12-02 21:29:32 EST) multi-call binary
Copyright (C) 1998-2008 Erik Andersen, Rob Landley, Denys Vlasenko
and others. Licensed under GPLv2.
See source distribution for full notice.
#有类似以上内容输出表示成功

这里只是简单的介绍一种方法,其实只要有了交叉编译工具基本上大部份的开源软件都是能够使用静态编译而在android上运行的。

转载自LazyHack

加载中
0
dczxyinhao
dczxyinhao
GCC 能交叉编译到android上吗.
0
s
spuiqr

请教一下,busybox的下载页有不同架构的各种版本,请问这样编译出来的,和不同的芯片相关吗?

http://www.busybox.net/downloads/binaries/1.18.4/

我手机是TCL A906 博通BCM2157 芯片——搜索了一下,是基于双核ARM处理器,时钟频率500MHz

我不知道该选那种架构的版本安装。能指导一下吗?

谢谢

0
夏叶冬雪
夏叶冬雪

引用来自“spuiqr”的答案

请教一下,busybox的下载页有不同架构的各种版本,请问这样编译出来的,和不同的芯片相关吗?

http://www.busybox.net/downloads/binaries/1.18.4/

我手机是TCL A906 博通BCM2157 芯片——搜索了一下,是基于双核ARM处理器,时钟频率500MHz

我不知道该选那种架构的版本安装。能指导一下吗?

谢谢

一般情况下,就是用对应芯片厂家提供的Gcc或G++编译器,将源代码编译成其对应CPU二进制编码的文件,就可以在android简化的linux下执行了。这是C系语言的开发特点,一次编写,到处编译运行!
0
王伟1124
wv@wv-ThinkPad-SL:~/source/busybox/busybox-1.18.1$ make
  SPLIT   include/autoconf.h -> include/config/*
  GEN     include/bbconfigopts.h
  HOSTCC  applets/usage
applets/usage.c: 在函数‘main’中:
applets/usage.c:52:8: 警告: 忽略声明有 warn_unused_result 属性的‘write’的返回值 [-Wunused-result]
  GEN     include/usage_compressed.h
  HOSTCC  applets/applet_tables
applets/applet_tables.c: 在函数‘main’中:
applets/applet_tables.c:138:9: 警告: 忽略声明有 warn_unused_result 属性的‘fgets’的返回值 [-Wunused-result]
  GEN     include/applet_tables.h
  CC      applets/applets.o
In file included from include/libbb.h:13:0,
                 from include/busybox.h:10,
                 from applets/applets.c:9:
include/platform.h:164:23: fatal error: byteswap.h: No such file or directory
compilation terminated.
make[1]: *** [applets/applets.o] 错误 1
make: *** [applets_dir] 错误 2
wv@wv-ThinkPad-SL:~/source/busybox/busybox-1.18.1$

0
十诫诗

你好~~请教一下哪里可以下载编译好的busybox?我只用其中的两个命令,不会编译,也没足够的时间了,求助~~


返回顶部
顶部