论坛首页 移动开发技术论坛

为Android加入busybox工具

浏览 11326 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-12-13   最后修改:2010-12-14
我们可以通过两种方式进入Android的console:

1. 直接执行命令emulator -shell;

2. 在启动emulator后,通过命令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-2007q3-51-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2文件

    将压缩包解压到linux下某个目录, 并设置好环境变量, 使之能找到前缀为"arm-none-linux-gnueabi-"的交叉编译工具.

3. 进入busybox源码目录.

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

     Busybox Settings -> Build Options ->

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

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

       $make -I./home/jo/tool/arm-2008q3/arm-none-linux-gnueabi/libc/usr/include/

    5 编译成功后将得到一个名为busybox的可执行文件.

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

       adb push busybox /data/busybox

    7 从Android的console进入/data/busybox目录, 为可执行文件busybox加上可执行属性: chmod +x busybox

    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:/sbin:/system/sbin:/system/bin:/system/xbin


    http://blog.csdn.net/liaoshengjiong/archive/2009/03/04/3957725.aspx
       发表时间:2010-12-13  
    frameworks 目录 (核心框架——java及C++语言)
    .
    |-- base    (基本内容)
    |   |-- api   (?都是xml文件,定义了java的api?)
    |   |-- awt   (AWT库)
    |   |-- build   (空的)
    |   |-- camera   (摄像头服务程序库)
    |   |-- cmds   (重要命令:am、app_proce等)
    |   |-- core   (核心库)
    |   |-- data   (字体和声音等数据文件)
    |   |-- docs   (文档)
    |   |-- graphics (图形相关)
    |   |-- include   (头文件)
    |   |-- keystore (和数据签名证书相关)
    |   |-- libs   (库)
    |   |-- location (地区库)
    |   |-- media   (媒体相关库)
    |   |-- obex   (蓝牙传输库)
    |   |-- opengl   (2D-3D加速库)
    |   |-- packages (设置、TTS、VPN程序)
    |   |-- sax   (XML解析器)
    |   |-- services (各种服务程序)
    |   |-- telephony (电话通讯管理)
    |   |-- test-runner (测试工具相关)
    |   |-- tests   (各种测试)
    |   |-- tools   (一些叫不上名的工具)
    |   |-- vpn   (VPN)
    |   `-- wifi   (无线网络)
    |-- opt    (可选部分)
    |   |-- com.google.android     (有个framework.jar)
    |   |-- com.google.android.googlelogin   (有个client.jar)
    |   `-- emoji   (standard message elements)
    `-- policies   (Product policies are operating system directions aimed at specific uses)
        `-- base 
            |-- mid (MID设备)
            `-- phone (手机类设备,一般用这个)

    hardware 目录   (部分厂家开源的硬解适配层HAL代码)
    |-- broadcom    (博通公司)
    |   `-- wlan    (无线网卡)
    |-- libhardware    (硬件库)
    |   |-- include    (头文件)
    |   `-- modules   (Default (and possibly architecture dependents) HAL modules)
    |       |-- gralloc   (gralloc显示相关)
    |       `-- overlay   (Skeleton for the "overlay" HAL module.)
    |-- libhardware_legacy (旧的硬件库)
    |   |-- flashlight   (背光)
    |   |-- gps    (GPS)
    |   |-- include    (头文件)
    |   |-- mount    (旧的挂载器)
    |   |-- power    (电源)
    |   |-- qemu    (模拟器)
    |   |-- qemu_tracing (模拟器跟踪)
    |   |-- tests    (测试)
    |   |-- uevent    (uevent)
    |   |-- vibrator    (震动)
    |   `-- wifi    (无线)
    |-- msm7k    (高通7k处理器开源抽象层)
    |   |-- boot    (启动)
    |   |-- libaudio   (声音库)
    |   |-- libaudio-qsd8k (qsd8k的声音相关库)
    |   |-- libcamera   (摄像头库)
    |   |-- libcopybit   (copybit库)
    |   |-- libgralloc   (gralloc库)
    |   |-- libgralloc-qsd8k (qsd8k的gralloc库)
    |   |-- liblights   (背光库)
    |   `-- librpc    (RPC库)
    |-- ril     (无线电抽象层)
    |   |-- include    (头文件)
    |   |-- libril    (库)
    |   |-- reference-cdma-sms (cdma短信参考)
    |   |-- reference-ril    (ril参考)
    |   `-- rild     (ril后台服务程序)
    `-- ti       (ti公司开源HAL)
        |-- omap3     (omap3处理器)
        |   |-- dspbridge   (DSP桥)
        |   |-- libopencorehw (opencore硬件库)
        |   |-- liboverlay   (overlay硬件库)
        |   |-- libstagefrighthw (stagefright硬件库)
        |   `-- omx    (omx组件)
        `-- wlan     (无线网卡)

    prebuilt 目录    (x86和arm架构下预编译的一些资源)
    .
    |-- android-arm   (arm-android相关)
    |   |-- gdbserver   (gdb调试器)
    |   `-- kernel    (模拟的arm内核)
    |-- android-x86   (x86-android相关)
    |   `-- kernel    (空的)
    |-- common    (通用编译好的代码,应该是java的)
    |-- darwin-x86    (drawin x86平台)
    |   `-- toolchain   (工具链)
    |       |-- arm-eabi-4.2.1
    |       |-- arm-eabi-4.3.1
    |       `-- arm-eabi-4.4.0
    |-- darwin-x86_64   (drawin x86 64bit平台)
    |-- linux-x86    (linux x86平台)
    |   `-- toolchain   (工具链,我们应该主要用这个)
    |       |-- arm-eabi-4.2.1
    |       |-- arm-eabi-4.3.1
    |       |-- arm-eabi-4.4.0
    |       `-- i686-unknown-linux-gnu-4.2.1 (x86版编译器)
    |-- linux-x86_64   (linux x86 64bit平台)
    |-- windows    (windows平台)
    `-- windows-x86_64 (64bit windows平台)


    system 目录   (底层文件系统库、应用及组件——C语言)
    .
    |-- Bluetooth   (蓝牙相关)
    |-- core    (系统核心工具盒接口)
    |   |-- adb   (adb调试工具)
    |   |-- cpio   (cpio工具,创建img)
    |   |-- debuggerd (调试工具)
    |   |-- fastboot (快速启动相关)
    |   |-- include   (系统接口头文件)
    |   |-- init   (init程序源代码)
    |   |-- libacc   (轻量级C编译器)
    |   |-- libctest   (libc测试相关)
    |   |-- libcutils (libc工具)
    |   |-- liblog   (log库)
    |   |-- libmincrypt (加密库)
    |   |-- libnetutils (网络工具库)
    |   |-- libpixelflinger (图形处理库)
    |   |-- libsysutils (系统工具库)
    |   |-- libzipfile (zip库)
    |   |-- logcat   (查看log工具)
    |   |-- logwrapper (log封装工具)
    |   |-- mkbootimg (制作启动boot.img的工具盒脚本)
    |   |-- netcfg   (网络配置netcfg源码)
    |   |-- nexus   (google最新手机的代码)
    |   |-- rootdir   (rootfs,包含一些etc下的脚本和配置)
    |   |-- sh    (shell代码)
    |   |-- toolbox   (toolbox,类似busybox的工具集)
    |   `-- vold   (SD卡管理器)
    |-- extras    (额外工具)
    |   |-- latencytop (a tool for software developers ,identifying system latency happen)
    |   |-- libpagemap (pagemap库)
    |   |-- librank   (Java Library Ranking System库)
    |   |-- procmem (pagemap相关)
    |   |-- procrank (Java Library Ranking System相关)
    |   |-- showmap (showmap工具)
    |   |-- showslab (showslab工具)
    |   |-- sound   (声音相关)
    |   |-- su    (su命令源码)
    |   |-- tests   (一些测试工具)
    |   `-- timeinfo (时区相关)
    `-- wlan    (无线相关)
        `-- ti    (ti网卡相关工具及库)


    packages 目录
    .
    |-- apps     (应用程序库)
    |   |-- AlarmClock   (闹钟)
    |   |-- Bluetooth   (蓝牙)
    |   |-- Browser   (浏览器)
    |   |-- Calculator   (计算器)
    |   |-- Calendar   (日历)
    |   |-- Camera    (相机)
    |   |-- CertInstaller   (在Android中安装数字签名,被调用)
    |   |-- Contacts   (拨号(调用)、联系人、通话记录)
    |   |-- DeskClock   (桌面时钟)
    |   |-- Email    (Email)
    |   |-- Gallery    (相册,和Camera类似,多了列表)
    |   |-- Gallery3D   (?3D相册)
    |   |-- GlobalSearch (为google搜索服务,提供底层应用)
    |   |-- GoogleSearch (google搜索)
    |   |-- HTMLViewer (浏览器附属界面,被浏览器应用调用,同时提供存储记录功能)
    |   |-- IM    (即时通讯,为手机提供信号发送、接收、通信的服务)
    |   |-- Launcher   (登陆启动项,显示图片框架等等图形界面)
    |   |-- Launcher2   (登陆启动项,负责应用的调用)
    |   |-- Mms    (?彩信业务)
    |   |-- Music    (音乐播放器)
    |   |-- PackageInstaller (安装、卸载程序的响应)
    |   |-- Phone    (电话拨号程序)
    |   |-- Provision   (预设应用的状态,使能应用)
    |   |-- Settings   (开机设定,包括电量、蓝牙、设备信息、界面、wifi等)
    |   |-- SoundRecorder (录音机,可计算存储所需空间和时间)
    |   |-- Stk     (接收和发送短信)
    |   |-- Sync    (空)   -------○1
    |   |-- Updater   (空)
    |   `-- VoiceDialer   (语音识别通话)
    |-- inputmethods   (输入法)
    |   |-- LatinIME   (拉丁文输入法)
    |   |-- OpenWnn   (OpenWnn输入法)
    |   `-- PinyinIME   (拼音输入法)
    |-- providers    (提供器,提供应用程序、界面所需的数据)
    |   |-- ApplicationsProvider   (应用程序提供器,提供应用程序启动项、更新等)
    |   |-- CalendarProvider    (日历提供器)
    |   |-- ContactsProvider    (联系人提供器)
    |   |-- DownloadProvider   (下载管理提供器)
    |   |-- DrmProvider    (创建和更新数据库时调用)
    |   |-- GoogleContactsProvider (联系人提供器的子类,用以同步联系人)
    |   |-- GoogleSubscribedFeedsProvider(设置信息提供器)
    |   |-- ImProvider     (空)
    |   |-- ManagementProvider   (空)
    |   |-- MediaProvider    (媒体提供器,提供存储数据)
    |   |-- TelephonyProvider   (彩信提供器)
    |   |-- UserDictionaryProvider (用户字典提供器,提供用户常用字字典)
    |   `-- WebSearchProvider   (空)
    |-- services    
    |   |-- EasService     (空)
    |   `-- LockAndWipe    (空)
    `-- wallpapers      (墙纸)
        |-- Basic      (基本墙纸,系统内置墙纸)
        |-- LivePicker     (选择动态壁纸)
        |-- MagicSmoke    (壁纸特殊效果)
        `-- MusicVisualization   (音乐可视化,图形随音乐而变化)

    ○1里面有一个隐藏的.git文件夹,内容都是一样的,没有有意义的代码,config看似乎是一个下载程序,因此认为这些文件夹下没有实质东西。


    vendor 目录    (厂家定制内容)

    |-- aosp     (android open source project)
    |   `-- products   (一些板级规则)
    |-- htc     (HTC公司)
    |   |-- common-open (通用部分)
    |   |   `-- akmd   (解压img用的工具)
    |   |-- dream-open   (G1开放部分)
    |   |-- prebuilt-open (预编译开放部分)
    |   `-- sapphire-open (sapphire这款型号开放内容)
    |-- pv-open    (没东西)
    |-- qcom     (里面基本是空的)
    `-- sample    (google提供的样例)
        |-- apps    (应用)
        |   |-- client   (用户)
        |   `-- upgrade (升级)
        |-- frameworks   (框架)
        |   `-- PlatformLibrary (平台库)
        |-- products   (产品)
        |-- sdk_addon   (sdk添加部分)
        `-- skins    (皮肤)
            `-- WVGAMedDpi (WVGA适用的图片)

    SDK和OUT目录没有列出
    0 请登录后投票
    论坛首页 移动开发技术版

    跳转论坛:
    Global site tag (gtag.js) - Google Analytics