分类: 嵌入式
2011-07-09 12:19:41
Android上移植busybox
Android自带了命令工具集,但是使用起来很不方便,且很多linux上常用的命令都不支持,如不能使用cp,grep,tab补全,回格删除,上下方向键记忆等等。所以,我们需要在Android系统中添加linux系统常用的工具集——busybox。
硬件环境:DM3730 EVM
软件环境:TI_Android_FroYo_DevKit-V2.2
Host主机环境:Ubuntu10.04
说明,在软件环境中,有ADB工具,可配置后使用。
ADB( Android Debug Bridge)工具一个调试和桥接工具,普遍地运用于Android系统和PC之间。可以有如下用途。
u 从主机下载应用程序到目标板上,安装、运行
u 通过运程shell来启动一个实例
u 调试应用程序
u 在目标板和虚拟机之间拷贝文件
ADB连接Host和board可通过如下方式:
u USB (Linux和Windows)
u USB Ethernet
u Ethernet
查看设备
$> adb devices
登录设备shell
$>adb shell
从电脑上发送文件到设备
$>adb push <本地路径> <远程路径>
从设备上下载文件到电脑
$>adb pull <远程路径> <本地路径>
用pull命令可以把设备(手机)上的文件或者文件夹复制到本机电脑
显示帮助信息
$>adb help
这个命令将显示帮助信息
说明,此种方式上传文件到target上失败,但是可以从target上下载文件到PC。
使用mini-usb cable(USB OGT端口)连接DM3730和PC机,在虚拟机的右下角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
设置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开头的
$>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目录
在板上系统中的/data目录下新建一个busybox文件夹,用来存放busybox的相关文件,并修改文件夹属性。
target #mkdir /data/busybox
target #chmod 777 /data/busybox
$ ./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命令。
$ ./adb push bin /data/busybox/bin //可以使用如cp,grep等命令
$ ./adb push sbin /data/busybox/sbin //可以使用如ifconfig,insmod,lsmod等命令
target #export PATH=/data/busybox/bin:/data/busybox/sbin:$PATH
//添加bin和sbin到路径中,不过要将bin和sbin放在Android系统中自带的/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系统一样熟悉,方便使用了。
为了在每次启动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 //使用busybox的shell
console
保存init.rc后,重启系统,就能正常使用busybox的各种工具了!
在通过USB连接的ADB工具中,不能上传文件到DM3730板上系统中。