Android中如何加入busybox

news/2024/7/11 1:25:04 标签: Android, Linux, Blog, HTML

我们可以通过两种方式进入Android的console:

1. 直接执行命令emulator -shell,我的是emulator -avd MyAVD2.3.1_map -scale 0.77 -shell,用这种方式进入console是普通用户$,至少2.3的版本是这样。

2. 在启动emulator后,通过命令adb shell进入,用这种方式进入console是超级用户,至少2.3的版本是这样。当模拟器启动用用上述命令可能会出现如下错误:

derek@derek-ThinkPad-Edge:~$ adb shell
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
error: device offline

没关系再输入一遍adb shell 就可以了,这时候就会出现#提示符了。

    之后我们就可以使用一些linux下 常用的命令了,如ls,cat等。然而Android自带的toolbox(位于/system/bin中)也太简略了点,有些命令如 find,Android并不支持或者支持得不好。下面将介绍如何为Android加入busybox工具,通过编译得到一个可以在Android里面运 行的busybox工具,我们就可以使用众多常见的linux命令了,如find,touch等。

步骤如下:

1. 首先去busybox主页 下载最新版本的busybox源代码.

2. 下载交叉编译工具: GNU Toolchain for ARM Processors 

    下载地址:http://www.codesourcery.com/gnu_toolchains/arm/download.html

    其中第一项选择ARM EABI或ARM GNU/Linux,第二项选择IA32 GNU/Linux TAR即可。

    最后得到一个arm-2010.09-50-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2文件,我下的是ARM GNU/Linux中的。

    将压缩包解压到linux下某个目录, 并设置好环境变量(~/.bashrc), export PATH=/home/derek/Android/crosstools/ARMGNULinux/arm-2010.09/bin/:$PATH,使之能找到前缀为"arm-none-linux-gnueabi-"的交叉编译工具。如果设置好环境变量之后,那么在第三步中的Cross Compler prefex只要填上“arm-none-linux-gnueabi-“即可,当然也可以不用在~/.bashrc中设置环境变量,但在Cross Compler prefex中要填上交叉编译工具的完整路径名和rm-none-linux-gnueabi-前缀。

    在编译的时候可能会出错,请确保所用的busybox和交叉编译工具的版本是否匹配,建议都用最新的吧。

3. 进入busybox源码目录.

     先执行make menuconfig命令对编译过程进行配置.  过程如下:

     Busybox Settings -> Build Options ->

     [*] Build BusyBox as a static binary (no shared libs) 这个要选上,因上这样子编译出来的busyBox才是可以独立运行的。
     (
/home/derek/Android/crosstools/ARMGNULinux/arm-2010.09/bin/arm-none-linux-gnueabi-) Cross Compiler prefex 这是交叉编译器的"路径+前缀",要根据具体的情况来设置。                
     Busybox Settings -> Installation Options->
     [*] Don’t use /usr        这样子编译出来的busybox才不会安装到你主机的/usr目录下。一定要选上。

4 执行make编译源码.  如果编译过程中产生无法找到头文件的错误, 可指定交叉编译器用到的头文件所在路径. 如

   $make -I./home/derek/Android/crosstools/ARMGNULinux/arm-2010.09/arm-none-linux-gnueabi/libc/usr/include

5 编译成功后将得到一个名为busybox的可执行文件,可以执行make install,进行安装,这时在busybox的目录下将生成_install目录,里面的所有链接都是链接到_install/bin/busybox。

6 在Android的console下建立目录/data/busybox, 并使用下面的命令将文件busybox复制该目录中:

   adb push busybox /data/busybox

7 从Android的console进入/data/busybox目录, 为可执行文件busybox加上可执行属性: chmod +x busybox,我这里没加,因为默认创建完之后就有x权限。

8 这时我们就可以使用busybox工具了, 如果希望在任何目录下都可以直接使用bosybox,则需要将路径/data/busybox export到path环境变量中:

   export PATH=$PATH:/data/busybox

9 设置环境变量之后, 在命令行输入busybox, 即可看到其用法, 如:

   在当前目录及其子目录中查找名为init.rc的文件可使用以下命令:

   $busybox find . -name init.rc 

10 安装busybox。

   通过执行./busybox --install -s 我们会看到出现一些错误, 原因是因为Android系统的根目录和/sbin目录是只读的.  因此我们无法把一些常用命令安装到/bin目录下, 也不能修改/init.rc文件来设置PATH环境变量. 

   对于如何执行命令busybox --install -s 的默认安装路径, 这里我还不太清楚, 或许跟Makefile和编译busybox的相关设置有关. 

   尽管我们不可以在Android里面通过执行busybox --install -s 命令来安装常用命令, 我们却可以通过另外一个方法来把常用命令安装到Android里面.  

   方法很简单, 可以先在外面的linux系统中执行make install命令把相关的命令提取出来. 然后再通过命令adb push ./_install/bin /data/busybox/bin 把这些常用命令复制进Android系统中. 注意: make install安装命令的所在路径可通过执行make menuconfig进行设置, 默认为./_install目录下面.

   这样,我们就不用每次使用busybox提供的一个命令时, 都要在前面加上busybox了.

11 修改/init.rc文件设置环境变量.

     请参考帖子: Android启动过程的进一步研究

     要提醒的是, 修改PATH环境变量的时候, 应该把busybox常用命令的路径"/data/busybox/bin"放在Android的常用命令路径"/system/bin"的前面, 否则, 先查找得到的将不是busybox的命令,  可以这样设置, 每次运行都要重新执行一下。

     export PATH /data/busybox/bin:/data/busybox/sbin:/data/busybox/usr/bin:/data/busybox/usr/sbin:/sbin:/system/sbin:/system/bin:/system/xbin

参考网址:

https://gforge.ti.com/gf/project/omapandroid/wiki/?pagename=Installing+Busybox+command+line+tools

http://blog.csdn.net/a345017062/archive/2011/03/15/6250619.aspx

http://hi.baidu.com/btb368/blog/item/25dd4122d60acb5a9922ede4.html

http://hi.baidu.com/mcu99/blog/item/ee9bf43887e02e2cb9998f0a.html

http://www.niftyadmin.cn/n/1730874.html

相关文章

转:破解 Android Market 的区域限制

Android Market 电子市场 会根据运营商的不同,而呈现不同的应用列表,身在天朝,有着深刻的体会:1,搜索”Google”,谷歌地图,Gmail 并未出现在搜索结果中。2,查看不到没有任何手收费应用。 之前在网上找到个免费的 Market Enabler ,但这个东西有个问题:1,系统启动后,…

八电极脂肪秤方案软硬件与APP功能介绍

八电极脂肪秤软硬件端功能说明:    LED显示:      1、3 个超白光 LED      2、显示数字: 188.8.8(两个小数点)      3、显示符号: ble、kg 指示符      4、不显示体脂率(由APP端显示)      电源&#xff1…

TextView自定义字体

1. 定义包含1 TextView 布局&#xff1a;main.xml <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android" android:orientation"vertical" android:layout_…

远距离壁挂式温仪pcba方案

壁挂式测温仪由热电堆式红外传感器&#xff0c;测温芯片&#xff0c;pcba板&#xff0c;液晶显示屏及外売组成&#xff0c;其成品开机后无需操作&#xff0c;可实现自动测温并记录&#xff0c;记录次数32次&#xff0c;并且响应速度快&#xff0c;附带高温报警功能&#xff0c;…

2021方案开发-珠宝秤设计开发芯片方案CSU8RP1186

产品简介      CSU8RP1186芯片是一个8位RISC架构的高性能单片机&#xff0c;集成了24Bit高精度ADC和LCD显示模块。常用测量系统的外围器件&#xff0c;只需7个普通的电容即可。此款芯片实现了工作电压&#xff08;2.4~3.6V&#xff09;范围内任意把系统校准数据保存到OTP内…

android如何保留小数点后x位数字

主要可以采用BigDecimal这个东西&#xff0c;我是使用了decimal成功解决了问题 1&#xff1a; (double)(Math.round(result_value*10000)/10000.0) 这样计算可以保留result_value小数点后四位,以此类推,1后面几个零就是保留小数点后几位数. 2&#xff1a; import java.text…

2021-06-19首饰宝石珠宝秤方案开发

珠宝秤是专门用来测量珠宝首饰等一些小物件的电子秤。也可以应用到科研实验室或者其他对高精度有需求的测量物品上面。它具有3个或3个以上的单位计量&#xff0c;具有自动关机和待机功能并能够低电量提示。它具有高精度及多种程度单位转换的功能&#xff0c;能够更精确地计算出…

android的文件操作

android的文件操作要有权限&#xff1a; 判断SD卡是否插入 Environment.getExternalStorageState().equals( android.os.Environment.MEDIA_MOUNTED); 获得sd卡根目录 File skRoot Environment.getExternalStorageDirectory(); 获得私有根目录 File fileRoot Context.getFile…