linux安卓busybox命令,为Android系统添加Busybox工具

busybox是一个集成了一百多个最常用linux命令和工具的软件,集成了一个http服务器和一个telnet服务器,Android系 统中自带的toolbox工具(/system/bin)比较简单,对于一些命令如find等支持的不好,可以Android系统中加入busybox,就可以使用常见的Linux命令,同时通过busybox可以定制Android的根文件系统。

具体步骤:

1)下载busybox源码,我用的版本是busybox-1.16.0

2)下载交叉编译工具并配置环境变量,这里要注意版本的选择问题:

我开始使用的是arm-linux-gcc-3.4.1和arm-linux-tools-20061213,编译成功后发现将busybox加入到Android系统,在Android终端内对busybox无法操作,提示busybox命令不合法,查阅相关资料发现可能是交叉编译工具的选择有问题,Android内核支持EABI,所以需要重新下载交叉编译工具arm-2007q3-51-arm-none-linux-gnueabi-i686-pc-linux-gnu,这个版本是基于EABI的,增加了对浮点运算等方面的支持。

3)编译busybox,在busybox目录下执行make menuconfig命令对编译过程进行配置. 过程如下:BusyboxSettings->BuildOptions->[*]BuildBusyBoxasastaticbinary(noshared libs)这个要选上,因上这样子编译出来的busyBox才是可以独立运行的。(/home/weiwei/embedded/arm-2007q3/bin/arm-none-linux-gnueabi-)CrossCompilerprefex这是交叉编译器的"路径+前缀",要根据具体的情况来设置。BusyboxSettings->InstallationOptions->[*]Don’tuse/usr这样子编译出来的busybox才不会安装到你主机的/usr目录下。一定要选上。

执行make ,期间可能会报错,根据编译的错误不同可以在menuconfig中对相应的内容进行设置,比如我编译的时候会报错显示:make error route.o*1

可以进入menuconfig 设置NetworkingUtilities--->关闭编译route的选项

make 结束后,会生成busybox的可执行文件。

3)制作新的ramdisk.img

ramdisk.img中存放了Android的根文件系统,为了在Android终端中使用busybox工具而不要每次配置环境变量,需要对Android根文件系统下的启动脚本init.rc进行改写,将busybox的存放路径放入全局环境变量中。

由于Android模拟器系统每次启动时都会自动加载ramdisk.img作为根文件系统,加载system.img和userdata.img作为主文件系统和用户数据文件系统,所以更改了启动脚本后,需要重新对ramdisk.img打包,生成新的根文件映像。

具体步骤如下:将ramdisk.img复制到其他目录,名称改为ramdisk.img.gz,解压到当前目录gunzip ramdisk.img.gz新建文件夹ramdisk,进入该文件夹执行cpio-i-F../ramdisk.img此时在ramdisk文件夹下可以看到从ramdisk.img中解包出来的根文件系统目录和相关内容修改init.rc的相关内容# setup the global environmentexportPATH/data/busybox/bin:/sbin:/system/sbin:/system/bin:/system/xbinexportLD_LIBRARY_PATH/system/libexportANDROID_BOOTLOGO1exportANDROID_ROOT/systemexportANDROID_ASSETS/system/appexportANDROID_DATA/dataexportEXTERNAL_STORAGE/sdcardexportBOOTCLASSPATH/system/framework/core.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/android.policy.jar:/system/framework/services.jarexportHOME/这里在PATH中添加了busybox在Android下的存放路径data/busybox/bin,同时增加变量HOME作为测试,看启动脚本是否成功修改。重新生成新的映像执行cpio--i-t-F../ramdisk.img>list      cpio-o-H newc-O rd_busybox.img

4)启动模拟器后,装载busybox到Android中去执行adb push busybox/data/busybox/bin在busybox安装目录下将busybox可执行文件加入到Android系统的data/busybox/bin中adb shell进入Android终端cd data/busybox/bin  ls-l-rwxrwxrwx root     root18096842010-03-1700:44busybox发现busybox已经放在该目录下更改busybox权限为可执行chmod777busybox执行busybox,可以查看版本信息和相关的命令# busyboxBusyBoxv1.16.0(2010-03-1700:42:04CST)multi-call binary.Copyright(C)1998-2009ErikAndersen,RobLandley,DenysVlasenkoandothers.LicensedunderGPLv2.Seesource distributionforfull notice...........省略相关内容可以查看启动脚本的环境变量是否被修改了执行export# exportANDROID_ASSETS  ANDROID_BOOTLOGO  ANDROID_DATA  ANDROID_PROPERTY_WORKSPACE  ANDROID_ROOT  BOOTCLASSPATH  EXTERNAL_STORAGE  HOME  LD_LIBRARY_PATH  PATH  PWD发现测试的HOME变量已经存在

现在可以使用busybox的相关命令和功能了

例如 进入根目录下查找init.rc文件# busybox find . -name init.rc./init.rc

存在问题:不能执行./busybox --install -s 命令安装常见的命令,因为Android系统中的的根目录和/sbin目录权限是只读的

对于如何利用busybox定制Android的文件系统,还需要进一步的研究

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值