Android上移植busybox
Android自带了命令工具集使用不方便,很多linux上常用的命令都不支持,如不能使用cp,grep,tab补全,回格删除,上下方向键记忆等等。我们需要在Android系统中添加linux系统常用的工具集—busybox。 环境说明 硬件环境:DM3730EVM 软件环境:TI_Android_FroYo_DevKit-V2.2 Hos
http://www.busybox.net/下载busybox-1.22.1.tar.bz
解压到工程顶层目录
在编过平台软件后,系统环境中是有arm-none-linux-gnueabi-交叉编译工具链名路径的
直接进去make 、 make install
Android自带了命令工具集使用不方便,很多linux上常用的命令都不支持,如不能使用cp,grep,tab补全,回格删除,上下方向键记忆等等。
我们需要在Android系统中添加linux系统常用的工具集—busybox。
硬件环境:DM3730 EVM
软件环境:TI_Android_FroYo_DevKit-V2.2
Host主机环境:Ubuntu10.04
说明,在软件环境中,有ADB工具,可配置后使用。
ADB( Android Debug Bridge)有如下用途。
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
这个命令将显示帮助信息
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
sudo ./adb start-server
* daemon not running. starting it now *
* daemon started successfully *
sudo ./adb devices //检测ADB设备
List of devices attached
20100720 device //检测到ADB设备,ok
$>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 pushbusybox /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 //添加了busybox/bin,busybox/sbin路径,一切如linux系统一样熟悉,方便使用。
target #./busybox sh //执行这个命令后,便能正常使用tab补全,回格删除,上下方向键记忆等命令。但是没有cp命令。
//执行这个命令后显示$(precmd)$USER@$HOSTNAME:${PWD:-?}#
$ ./adb pushbin /data/busybox/bin //可以使用如cp,grep等命令
$ ./adb push sbin /data/busybox/sbin //可以使用如ifconfig,insmod,lsmod等命令
target #export //查看系统环境变量,发现存在PATH,不用增加,只需用修改即可。
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
每次启动Android都能自动启用busybox命令工具,修改Android系统启动文件/init.rc如下:
# setup the global environment
#export PATH /sbin:/system/sbin:/system/bin:/system/xbin //注释掉Android系统PATH
export PATH /data/busybox/bin:/data/busybox/sbin:/sbin:/system/sbin:/system/bin:/system/xbin //优先使用busybox的shell
//如果在Android系统中不好改,可以将这个文件通过ADB传到linux系统中修改好后再传回去。
#service console /system/bin/sh //注释掉Android系统自带的shell
service console /data/busybox/bin/sh //使用busybox的shell
console
保存init.rc后,重启系统,就能正常使用busybox的各种工具了!
更多推荐
所有评论(0)