Chinaunix首页 | 论坛 | 博客
  • 博客访问: 586255
  • 博文数量: 192
  • 博客积分: 3780
  • 博客等级: 中校
  • 技术积分: 1487
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-26 10:11
文章存档

2012年(6)

2011年(160)

2010年(26)

分类: 嵌入式

2011-07-09 12:19:41

Android上移植busybox

目的

       Android自带了命令工具集,但是使用起来很不方便,且很多linux上常用的命令都不支持,如不能使用cpgreptab补全,回格删除,上下方向键记忆等等。所以,我们需要在Android系统中添加linux系统常用的工具集——busybox

 

环境说明

       硬件环境:DM3730 EVM

       软件环境:TI_Android_FroYo_DevKit-V2.2

       Host主机环境:Ubuntu10.04

说明,在软件环境中,有ADB工具,可配置后使用。

 

配置ADB工具

       ADB( Android Debug Bridge)工具一个调试和桥接工具,普遍地运用于Android系统和PC之间。可以有如下用途。

u  从主机下载应用程序到目标板上,安装、运行

u  通过运程shell来启动一个实例

u  调试应用程序      

u  在目标板和虚拟机之间拷贝文件

 

ADB连接Hostboard可通过如下方式:

u  USB (LinuxWindows)

u  USB Ethernet

u  Ethernet

 

几个ADB常用命令

查看设备

$> adb devices

登录设备shell

$>adb shell

从电脑上发送文件到设备

$>adb push <本地路径> <远程路径>

从设备上下载文件到电脑

  $>adb pull <远程路径> <本地路径>

  用pull命令可以把设备(手机)上的文件或者文件夹复制到本机电脑

显示帮助信息

  $>adb help

  这个命令将显示帮助信息

 
通过USB来连接ADB

      说明,此种方式上传文件到target上失败,但是可以从target上下载文件到PC

使用mini-usb cable(USB OGT端口)连接DM3730PC机,在虚拟机的右下角USB图标处点击选择连接USB设备,此时在Windows上会弹出安全卸载的提示。

进入linux系统中,进入文件TI_Android_Froyo_DevKit-V2.2/Tools/Android-sdk-linux_86/

Tools中,使用其中的adb可执行文件。

验证主机和目标板之间的ADB连接

$> ./adb devices

如果连接成功,则会打印如下信息:

List of devices attached

20100720 device

 

出现如下错误:

List of devices attached

????????????   no permissions

解决方法:

sudo ./adb kill-server   //杀死在运行的server

sudo ./adb start-server  //创建新的server

* daemon not running. starting it now *

* daemon started successfully *

sudo ./adb devices     //检测ADB设备

List of devices attached

20100720       device   //检测到ADB设备,ok      

 

通过Ethernet连接ADB  

 

板上设置

设置IP地址:

target #> netcfg

lo UP 127.0.0.1 255.0.0.0 0x00000049

eth0 UP 192.168.0.111 255.255.255.0 0x00001043  //设置ip地址可以在图形界面中的ethernet配置中设置,也可以通过命令配置。

           

配置ADB后台程序:

target #> setprop service.adb.tcp.port 5555

 

重启adb服务

target #> stop adbd

target #> start adbd

  

3.3.2 Host主机端设置

设置adb连接:

$> export ADBHOST=192.168.0.111           //IP时上边板上设置的。

$> adb kill-server                                      //关闭ADB服务

$> adb start-server                                    //重开ADB服务

 

检测adb设备:

$> adb devices

List of devices attached

emulator-5554 device   //通过ethernet连接的ADB是以emulator开头的

 

编译busybox

$>tar xvf busybox-1.17.0.tar.tar  //这里使用现成的busybox,你也可以下载最新的来制作

$>cd busybox-1.17.0/

$>make menuconfig

       Busybox Settings  --->

              General Configuration  --->

                                   [*]   Don't use /usr-->  //要选择此项,不然又部分命令会被安装到_install/usr/bin_install/usr/sbin, busybox-1.18.0中,这项没有用,不管选择与否都会有部分命令安装到_install/usr/bin_install/usr/sbin。使用busybox-1.17.0就正常,且此项在Build Options中。

              Build Options  --->

                      [*] Build BusyBox as a static binary (no shared libs) //使用静态库编译

                                  (arm-none-linux-gnueabi-) Cross Compiler prefix   //填入交叉编译工具链名,如果不在路径PATH中,可使用绝对路径。

              Busybox Library Tuning  --->

                                 [*]   Tab completion  ->  //检测此项是否选择,如没有选,就不能使用tab键补全,默认是选择的。

$>make          //生成busybox文件

$>make   install    //busybox命令安装到_install/bin_install/sbin目录

 

Android系统上安装busybox  

       在板上系统中的/data目录下新建一个busybox文件夹,用来存放busybox的相关文件,并修改文件夹属性。

target #mkdir /data/busybox

target #chmod 777 /data/busybox

 

将编译的busybox传送到target

$ ./adb push busybox /data/busybox

846 KB/s (1901380 bytes in 2.192s)  //传送成功

 

进入target环境调试:

$ ./adb shell

target # cd data/busybox

target # ls

busybox

target # ./busybox ls  //执行busybox

busybox

 

执行busybox sh命令

target #./busybox sh   //执行这个命令后,便能正常使用tab补全,回格删除,上下方向键记忆等命令。但是没有cp命令。

 

拷贝binsbin文件到data/busybox目录中

$ ./adb push bin /data/busybox/bin    //可以使用如cpgrep等命令

$ ./adb push sbin /data/busybox/sbin   //可以使用如ifconfiginsmodlsmod等命令

target #export PATH=/data/busybox/bin:/data/busybox/sbin:$PATH

//添加binsbin到路径中,不过要将binsbinAndroid系统中自带的/system/sbin/system/bin前面,不然会优先使用Android系统的命令。

target # $PATH

/data/busybox/bin:/data/busybox/sbin:/sbin:/system/sbin:/system/bin:/system/xbin:/data/busybox

              

       执行了busybox sh,添加了busybox/bin,busybox/sbin路径后,一切的一切如linux系统一样熟悉,方便使用了。

      

修改启动文件init.rc

              为了在每次启动Android系统时,都能自动启用busybox命令工具,修改Android系统启动文件/init.rc如下: 

# setup the global environment

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

#export PATH /sbin:/system/sbin:/system/bin:/system/xbin

//这样在启动系统时,便会自动添加busybox工具路径。如果在Android系统中不好修改,可以将这个文件通过ADB工具传送到linux系统中修改好后在传回来。

 

#service console /system/bin/sh        //注释掉Android系统自带的shell

service console /data/busybox/bin/sh   //使用busyboxshell

console

      

       保存init.rc后,重启系统,就能正常使用busybox的各种工具了!

      

遗留问题

       在通过USB连接的ADB工具中,不能上传文件到DM3730板上系统中。

阅读(1947) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~