1. ホーム
  2. アンドロイド

busyboxのAndroidインストール

2022-02-28 21:52:18

<スパン アンドロイド <スパン インストール ブジーボックス

<スパン

        開発者専用ですので、一般の方は使用しないでください。

        最新の ビジーボックス は、開発者にとって非常に便利なコマンドをたくさん追加できるほど強力です。

<スパン フェチな方は、これをダウンロードして システム パーティションに保存し、解凍してください。 <スパン ツールボックス <スパン ツールボックス固有のコマンドは残り、同じコマンドが入れ替わります。を使っています。 armv4 クロスツールチェーンの命令セットは、可能な限り汎用的であることを目的にコンパイルされています。もし、あなたの アンドロイド <スパン 端末が動かないので、自分でコンパイルする必要がある。(コンパイルされた: http://download.csdn.net/detail/kangear/7564291 ) 、zipパッケージをAndroid携帯に入れ、手順7で解凍してください!

<スパン をコンパイルします。 ビジーボックス クロスツールチェーンがインストールされている場合のコンパイルスクリプトは以下の通りです。

#! /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 Remount the /system partition to writeable
# 7.2 Place busybox_bin.tar.gz anywhere in the Android filesystem
# 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
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 Unix
	Most people will create a
	link to busybox for each function they wish to use and BusyBox
	will 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, setuidgi








また、: オンザ 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]: []