Android安装busybox
Android安装Busybox
这个只为开发者用,一般人别用。
最新的busybox已经足够强大,强大到不可想像了添加了很多命令,对开发者来说是极为好用的。
如果你是个拿来主义,把这个下载了,在system分区解压就好了。toolbox中特有的命令还是会保留的,相同的命令会替换。我使用的是armv4指令集的交叉工具链编译的,目的就是尽可能的通用。如果你的Android设备不能用,那么就得自己编译了。(编译好的:http://download.csdn.net/detail/kangear/7564291,将压缩包放到Android手机中,进行第7步解压操作就好了!)
编译一个busybox,前提你装好了交叉工具链,以下就是编译脚本。
#!/bin/sh
#@author : kangear
#@function: build busybox static.# 1.download source
wget http://www.busybox.net/downloads/busybox-1.22.1.tar.bz2 -O busybox.tar.bz2 || exit 1# 2.uncompress and cd
tar xvjf busybox.tar.bz2 && cd busybox-1.22.1 || exit 1# 3.config
make defconfig CROSS_COMPILE=arm-linux- || exit 1# 4.modify busybox.links
make CROSS_COMPILE=arm-linux- LDFLAGS=--static install || exit 1
rm _install -rf || exit 1
# 4.1 delect linuxrc line
sed -i '/linuxrc/d' busybox.links || exit 1
# 4.2 sbin usr/bin usr/sbin => bin
sed -i 's/usr\/sbin/bin/' busybox.links || exit 1
sed -i 's/usr\/bin/bin/' busybox.links || exit 1
sed -i 's/sbin/bin/' busybox.links || exit 1# 5. build & install
make CROSS_COMPILE=arm-linux- LDFLAGS=--static install || exit 1# 6. tar cvzf
# adb push /system/bin & tar xvzf bin.tar.gz
tar cvzf busybox_bin.tar.gz -C _install/ bin || exit 1# 7. install into Android
# 7.1 将/system分区进行remount成可写的
# 7.2 将busybox_bin.tar.gz放置到Android文件系统中任何位置
# 7.3 tar xvzf busybox_bin.tar.gz -C /system/
包含的命令:
root@android:/ # busybox
BusyBox v1.22.1 (2014-06-27 15:14:59 CST) multi-call binary.
BusyBox is copyrighted by many authors between 1998-2012.
Licensed under GPLv2. See source distribution for detailed
copyright notices.Usage: busybox [function [arguments]...]or: busybox --list[-full]or: busybox --install [-s] [DIR]or: function [arguments]...BusyBox is a multi-call binary that combines many common Unixutilities into a single executable. Most people will create alink to busybox for each function they wish to use and BusyBoxwill act like whatever it was invoked as.Currently defined functions:[, [[, acpid, add-shell, addgroup, adduser, adjtimex, arp, arping, ash,awk, base64, basename, beep, blkid, blockdev, bootchartd, brctl,bunzip2, bzcat, bzip2, cal, cat, catv, chat, chattr, chgrp, chmod,chown, chpasswd, chpst, chroot, chrt, chvt, cksum, clear, cmp, comm,conspy, cp, cpio, crond, crontab, cryptpw, cttyhack, cut, date, dc, dd,deallocvt, delgroup, deluser, depmod, devmem, df, dhcprelay, diff,dirname, dmesg, dnsd, dnsdomainname, dos2unix, du, dumpkmap,dumpleases, echo, ed, egrep, eject, env, envdir, envuidgid, ether-wake,expand, expr, fakeidentd, false, fbset, fbsplash, fdflush, fdformat,fdisk, fgconsole, fgrep, find, findfs, flock, fold, free, freeramdisk,fsck, fsck.minix, fstrim, fsync, ftpd, ftpget, ftpput, fuser, getopt,getty, grep, groups, gunzip, gzip, halt, hd, hdparm, head, hexdump,hostid, hostname, httpd, hush, hwclock, id, ifconfig, ifdown,ifenslave, ifplugd, ifup, inetd, init, insmod, install, ionice, iostat,ip, ipaddr, ipcalc, ipcrm, ipcs, iplink, iproute, iprule, iptunnel,kbd_mode, kill, killall, killall5, klogd, last, less, linux32, linux64,linuxrc, ln, loadfont, loadkmap, logger, login, logname, logread,losetup, lpd, lpq, lpr, ls, lsattr, lsmod, lsof, lspci, lsusb, lzcat,lzma, lzop, lzopcat, makedevs, makemime, man, md5sum, mdev, mesg,microcom, mkdir, mkdosfs, mke2fs, mkfifo, mkfs.ext2, mkfs.minix,mkfs.vfat, mknod, mkpasswd, mkswap, mktemp, modinfo, modprobe, more,mount, mountpoint, mpstat, mt, mv, nameif, nanddump, nandwrite,nbd-client, nc, netstat, nice, nmeter, nohup, nslookup, ntpd, od,openvt, passwd, patch, pgrep, pidof, ping, ping6, pipe_progress,pivot_root, pkill, pmap, popmaildir, poweroff, powertop, printenv,printf, ps, pscan, pstree, pwd, pwdx, raidautorun, rdate, rdev,readahead, readlink, readprofile, realpath, reboot, reformime,remove-shell, renice, reset, resize, rev, rm, rmdir, rmmod, route, rpm,rpm2cpio, rtcwake, run-parts, runlevel, runsv, runsvdir, rx, script,scriptreplay, sed, sendmail, seq, setarch, setconsole, setfont,setkeycodes, setlogcons, setserial, setsid, setuidgid, sh, sha1sum,sha256sum, sha3sum, sha512sum, showkey, slattach, sleep, smemcap,softlimit, sort, split, start-stop-daemon, stat, strings, stty, su,sulogin, sum, sv, svlogd, swapoff, swapon, switch_root, sync, sysctl,syslogd, tac, tail, tar, tcpsvd, tee, telnet, telnetd, test, tftp,tftpd, time, timeout, top, touch, tr, traceroute, traceroute6, true,tty, ttysize, tunctl, ubiattach, ubidetach, ubimkvol, ubirmvol,ubirsvol, ubiupdatevol, udhcpc, udhcpd, udpsvd, umount, uname,unexpand, uniq, unix2dos, unlzma, unlzop, unxz, unzip, uptime, users,usleep, uudecode, uuencode, vconfig, vi, vlock, volname, wall, watch,watchdog, wc, wget, which, who, whoami, whois, xargs, xz, xzcat, yes,zcat, zciproot@android:/ #
另:关于《busybox无法ping域名的解决办法 》可以尝试如下实现busybox 中的ping:
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define oops(msg) { perror(msg); exit(1);}void fillip(char* buffer, const char* ip);char* name2ip(const char* name);
/*** * head len: 12* * query: ? + 4* * total: strlen(query.buffer) + 16* */
typedef struct{u_short txid;u_short flag;u_short question;u_short answer;u_short authority;u_short additional;char buffer[256];struct {u_short type;u_short cls;}query;
}dns_req;
/** length of resp: 12 */
typedef struct{u_short txid;u_short flag;u_short question;u_short answer;u_short authority;u_short addtional;char buffer[1024];struct{u_short name;u_short type;u_short cls;u_short live_l;u_short live_h;u_short len;struct in_addr addr;}resp;
}dns_res;int main()
{char* p = name2ip("www.baidu.com");printf("ip is:%s\n", p);return 0;
}char* name2ip(const char *node){struct sockaddr_in dns;dns_req req;dns_res res;int sockid, len, index;char* dnsip = "61.139.2.69";//char* dnsip = "202.114.215.73";sockid = socket(PF_INET, SOCK_DGRAM, 0);if(sockid == -1)oops("socket");memset((void*)&dns, 0, sizeof(dns));dns.sin_family = AF_INET;dns.sin_port = htons(53);dns.sin_addr.s_addr = inet_addr(dnsip);memset((void*)&req, 0, sizeof(req));req.txid = htons(0x4419);req.flag = htons(0x0100);req.question = htons(1);fillip(req.buffer,node);req.query.type=htons(1);req.query.cls=htons(1);memcpy(req.buffer+strlen(req.buffer)+1, (void*)(&req.query), sizeof(req.query));sendto(sockid, (void*)&req, strlen(req.buffer)+17, 0,(struct sockaddr*)&dns, sizeof(dns));recvfrom(sockid, (void*)&res, sizeof(res), 0,(struct sockaddr*)&dns, &len);index = strlen(res.buffer)+5;while(1){memcpy((void*)&(res.resp), res.buffer+index, 12);if(ntohs(res.resp.type)==1){memcpy((void*)&(res.resp.addr), res.buffer+index+12, 4);break;}index += ntohs(res.resp.len) + 12;}return inet_ntoa(res.resp.addr);
}void fillip(char* buffer, const char* ip){int i,j=0;for(i = 0; ip[i] != 0; i ++){if(ip[i] != '.'){buffer[i+1] = ip[i];}else{buffer[j] = i - j;j = i + 1;}}buffer[j] = i - j;
}
先获取地区dns或者路由器上的dns或者getprop中的dns,思路先留在这里,以后有时候再完善。
/ # getprop | grep dns
[dhcp.eth0.dns1]: [192.168.100.1]
[dhcp.eth0.dns2]: []
[dhcp.eth0.dns3]: []
[dhcp.eth0.dns4]: []
[dhcp.wlan0.dns1]: [192.168.2.1]
[dhcp.wlan0.dns2]: []
[dhcp.wlan0.dns3]: []
[dhcp.wlan0.dns4]: []
[net.change]: [net.eth0.dns2]
[net.dns1]: [192.168.100.1]
[net.dnschange]: [4]
[net.eth0.dns1]: [49.0.0.0]
[net.eth0.dns2]: []
[net.wlan0.dns1]: [49.0.0.0]
[net.wlan0.dns2]: []
Android安装busybox相关推荐
- 为Android安装BusyBox
大家是否有过这样的经历,在命令行里输入adb shell,然后使用命令操作你的手机或模拟器,但是那些命令都是常见Linux命令的缩水版,用起来很不爽.是否想过在Android上使用较完整的shell呢 ...
- Android安装BusyBox(三星N7108)
近期公司安卓app测试,分配任务为监控APP内存.CPU占用率.因安卓是基于linux开发,故很容易就联想使用Linux监控相关的命令.想法总是美好的,现实总是残酷的,使用三星 Galaxy Note ...
- 小米系统MIUI安装busybox
一.挂载system分区,活动读写权限 adb命令直接挂载 adb remout 挂载在某个目录下 1|whyred:/system # mount -o remount,rw -t yaffs2 / ...
- android模拟器bo,在 Android 模拟器中安装 busybox
在Android模拟器中安装busybox [背景]: Android 模拟器的 shell 真是难用啊,很多命令都不支持,如 find . grep . send 等等,最近正好有时间,想捣鼓捣鼓, ...
- busybox linux安装教程,Android模拟器安装BusyBox的一个窍门
在网上查了很多Android模拟器安装BusyBox的方法.发现都大同小异,都是将busybox安装好,然后要么通过手动的方法: export PATH="/data/busybox:$PA ...
- linux怎么编译并安装busybox,linux下安装busybox
1.获取busybox源码并解压,这里使用天嵌提供的"busybox-1.16.0.tar.bz2" #tar xvf busybox-1.16..tar.bz2 -C / 解压的 ...
- 【奇技淫巧】在安卓模拟器中安装busybox
[摘要] Busybox是一个开源项目,遵循GPL v2协议.大概集成了300+最常用的linux命令,不仅包含最简单的ls , cat ,echo 命令,还包含了一些更加强大,复杂的工具grep , ...
- 给 nanopi m2 Android系统安装busybox
本次参考了http://blog.csdn.net/lxgwm2008/article/details/38925051 但在原有基础上有一定创新 1.首先有一块nanopi2 的开发板,CPU是 4 ...
- Android安装ssh服务
1.安装条件 需要安装ssh服务的手机需要有root权限,我测试使用的手机是工程样机,adb连接上以后默认有root权限: 其他用户需要先root才能进行,可能需要把一些命令放到脚本中,放到手机中运行 ...
最新文章
- ajax获取php echo值,ajax 接受 php echo 与 return 区别
- java存储整数_关于数组:Java:存储大量整数的最佳数据类型是什么?
- 左牵Uber右联大众,黄教主带领320家车企一统自动驾驶江湖
- 关于CLSCompliant
- [Linux网络编程学习笔记]套接字地址结构
- MongoDB 分片的原理、搭建、应用
- python输入流和输出流_python读写gbk、utf-8等输入输出流
- matlab如何将相近的数据,matlab新手,求帮助!主要是如何将数据和公式导入
- cd-rom门锁定什么意思_CD-ROM的完整形式是什么?
- C++知识点(六)数组、指针与字符串导学
- python表示空类型的关键字_Python 为什么没有 void 关键字?
- Oracle存储使用情况,我收藏的oracle中一些分析空间使用情况的存储过程!
- oracle ora-01476: 除数为 0,Oracle常见错误:ORA-01403 的根本原因和解决方案
- VMware Linux VDI 安装步骤
- 【转帖】防止ASP.NET按钮多次提交的办法
- 武汉大学计算机学院毕业选题,《计算机毕业论文写作指导》
- 第 4 章 容器 - 030 - 实现容器的底层技术
- 关于云优CMS系统模板标签调用列表随机显示的代码rand()标签适用
- 状态机编程 (一) 状态机相关概念
- SD卡驱动(详细介绍,不明白的人可以仔细看看了.有流程图)