Hatena::ブログ(Diary)

kinneko@転職先募集中の日記

検索エンジンから来た方へ: 申し訳ないですが、日記なので日々積み重なっています。
目的の情報にたどり着くには、右の検索窓から日記内を再検索してください。
北陸エリア内(もしくはエリア外でも)で転職先を探しています。
(マジです。ネタではありません。ホントですって...)
詳細履歴書をご希望の方はメールでご連絡下さいませ。(kinneko at gmail.com)
chromeで見ると、死ぬほど出るGoogleの広告がブロックできないので、
firefoxでABPを入れるとすっきり見られます。

2008-09-04

[] busyboxの導入

androidのrootfsには、コマンドはほどんど含まれていない。

/system/bin/toolboxというコマンドのシンボリックリンクで小物のプログラムが統合されている。

入っているコマンドも、出力フォーマットが違い見慣れない。

何かちょっとしたことをやる場合にも不便でしょうがない。

たとえば、findがない。freeもない。tarもgzipもない。つまりソースの公開されていないバイナリの吸い出しができない(^^;。

toolboxと似たような、しかも組み込みではよく使われるbusyboxを導入する。

ライブラリ類もぜんぜん入っていないので、動作するようにスタティックにする。


busyboxを取得する。

http://busybox.net/

busybox-1.11.2.tar.gzが0903時点のstableになっている。

$ wget http://busybox.net/downloads/busybox-1.11.2.tar.gz
$ tar zxvf busybox-1.11.2.tar.gz

busyboxでは、make menuconfigで、組み込むプログラムやオプションを細かく決めることができるので、使いそうもないプログラムを削ってフットプリントをさらに小さくすることができる。

デフォルト設定でビルドしてみる。

$ cd busybox-1.11.2/
$ PATH=/home/kinneko/crosstool/gcc-4.1.1-glibc-2.5/arm-softfloat-linux-gnueabi/bin/:$PATH
$ make oldconfig
$ make CROSS_COMPILE=arm-softfloat-linux-gnueabi- ARCH=arm CFLAGS=--static LDFLAGS=--static

すんなりビルドできる。思えば、昨日はこの途中でHDDが死んだんだな...

ARMバイナリになっているのを確認。

# file ./busybox
busybox: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, stripped

busyboxのカスタムは後回しにして、実機で動作可能かどうかを確認する。

Mac側で出来たファイルをコピーするのには、scpを使うことにした。

androidのemulatorを起動して、adbコマンドでbusyboxをインストールする。

adbは、Android Debug Bridgeの略だそう。

$ cd android-sdk-mac_x86-0.9_beta/tools
$ ./adb push busybox /usr/bin/busybox
* daemon not running. starting it now *
* daemon started successfully *
failed to copy 'busybox' to '/usr/bin/busybox': No such file or directory
$ ./adb push busybox /busybox
failed to copy 'busybox' to '/busybox': Read-only file system
$ ./adb push busybox /data/busybox
2058 KB/s (2245252 bytes in 1.065s)

/dataの下にしか書けないのか。


shellに入って確認する。

$ ./adb shell
# cd data
# ls -l busybox
-rwxrwxrwx root     root      2245252 2008-09-04 14:28 busybox
# ./busybox
BusyBox v1.11.2 (2008-09-04 12:45:20 JST) multi-call binary
Copyright (C) 1998-2008 Erik Andersen, Rob Landley, Denys Vlasenko
and others. Licensed under GPLv2.
See source distribution for full notice.

Usage: busybox [function] [arguments]...
   or: function [arguments]...

	BusyBox is a multi-call binary that combines many common Unix
	utilities into a single executable.  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:
	[, [[, addgroup, adduser, adjtimex, ar, arp, arping, ash,
	awk, basename, brctl, bunzip2, bzcat, bzip2, cal, cat, catv,
	chat, chattr, chgrp, chmod, chown, chpasswd, chpst, chroot,
	chrt, chvt, cksum, clear, cmp, comm, cp, cpio, crond, crontab,
	cryptpw, cut, date, dc, dd, deallocvt, delgroup, deluser,
	depmod, df, dhcprelay, diff, dirname, dmesg, dnsd, dos2unix,
	du, dumpkmap, dumpleases, echo, ed, egrep, eject, env, envdir,
	envuidgid, ether-wake, expand, expr, fakeidentd, false,
	fbset, fbsplash, fdflush, fdformat, fdisk, fetchmail, fgrep,
	find, fold, free, freeramdisk, fsck, fsck.minix, ftpget,
	ftpput, fuser, getopt, getty, grep, gunzip, gzip, halt,
	hdparm, head, hexdump, hostid, hostname, httpd, hwclock,
	id, ifconfig, ifdown, ifenslave, ifup, inetd, init, inotifyd,
	insmod, install, ip, ipaddr, ipcalc, ipcrm, ipcs, iplink,
	iproute, iprule, iptunnel, kbd_mode, kill, killall, killall5,
	klogd, last, length, less, linux32, linux64, linuxrc, ln,
	loadfont, loadkmap, logger, login, logname, logread, losetup,
	lpd, lpq, lpr, ls, lsattr, lsmod, lzmacat, makedevs, man,
	md5sum, mdev, mesg, microcom, mkdir, mkfifo, mkfs.minix,
	mknod, mkswap, mktemp, modprobe, more, mount, mountpoint,
	mt, mv, nameif, nc, netstat, nice, nmeter, nohup, nslookup,
	od, openvt, passwd, patch, pgrep, pidof, ping, ping6, pipe_progress,
	pivot_root, pkill, poweroff, printenv, printf, ps, pscan,
	pwd, raidautorun, rdate, readahead, readlink, readprofile,
	realpath, reboot, renice, reset, resize, rm, rmdir, rmmod,
	route, rpm, rpm2cpio, rtcwake, run-parts, runlevel, runsv,
	runsvdir, rx, script, sed, sendmail, seq, setarch, setconsole,
	setkeycodes, setlogcons, setsid, setuidgid, sh, sha1sum,
	slattach, sleep, softlimit, sort, split, start-stop-daemon,
	stat, strings, stty, su, sulogin, sum, sv, svlogd, swapoff,
	swapon, switch_root, sync, sysctl, syslogd, tac, tail, tar,
	taskset, tcpsvd, tee, telnet, telnetd, test, tftp, tftpd,
	time, top, touch, tr, traceroute, true, tty, ttysize, udhcpc,
	udhcpd, udpsvd, umount, uname, uncompress, unexpand, uniq,
	unix2dos, unlzma, unzip, uptime, usleep, uudecode, uuencode,
	vconfig, vi, vlock, watch, watchdog, wc, wget, which, who,
	whoami, xargs, yes, zcat, zcip

動作している。

引数を付けずに実行すると、利用可能なコマンドの一覧が表示される。

引数にこれらのコマンドを指定してやると、そのコマンドの実行結果が得られる。


findが入ったので、ファイルの一覧がとれるようになった。

# find /
find: not found

# /data/busybox find / 
/
/sqlite_stmt_journals
/cache
/cache/lost+found
/sdcard
/d
/etc
/system
(略)

freeコマンドも使える。

# free
free: not found

# /data/busybox free
              total         used         free       shared      buffers
  Mem:        94572        84800         9772            0            0
 Swap:            0            0            0
Total:        94572        84800         9772

dfも見慣れたフォーマットになる。

# df
/dev: 47284K total, 0K used, 47284K available (block size 4096)
/sqlite_stmt_journals: 47284K total, 0K used, 47284K available (block size 4096)
/system: 65536K total, 44172K used, 21364K available (block size 4096)
/data: 65536K total, 25796K used, 39740K available (block size 4096)
/cache: 65536K total, 1156K used, 64380K available (block size 4096)

# /data/busybox df
Filesystem           1k-blocks      Used Available Use% Mounted on
tmpfs                    47284         0     47284   0% /dev
tmpfs                    47284         0     47284   0% /sqlite_stmt_journals
/dev/block/mtdblock0     65536     44172     21364  67% /system
/dev/block/mtdblock1     65536     25796     39740  39% /data
/dev/block/mtdblock2     65536      1156     64380   2% /cache

たなべたけともたなべたけとも 2015/04/05 02:14 とってもとっても参考になりました。Nexus7 grouper OS 4.4.4 時代おくれ です。
今年 2015 年の初めに端末を貰ったのですが、同じく、rename wget が欲しい...
になりました。raspberry pi というミニパソコンなので、出回る adb が使えず、
やっと adb shell 出来るようになったのが数日前。長かったあ、、、ここまで。
でもそういえば root 化にはリスクが伴うので、土壇場で躊躇しておりました。
手前の望む初期化せずにブートローダーをアンロックする方法は出回っていますが、
adb の方で痛いほど苦労しましたので、、。 ここの情報のおかげで、その悩みからは
解放されそうです、多分。busybox には root 権限いらないという事ですよね?
adb 経由ではなく Nexus7 端末の方にて 、端末エミュレータ を用い 実験している最中なのですが、
普通にシェルスクリプトを作り実行権限を与えれば、普通に実行出来るようだとしれました。数分前のこと。
という事は、 rename find wget 、そういうお望み止まりで妥協するなら、
実は adb 必要なかったのか、、、? ここを参考に、busybox 放り込めば、、?
疑問符を混ぜてしまいましたが、遥か過去なので返答は期待しておりません。お礼状として。
エリア 3 行 キツイです.. 人から借りた iPadMini にて書き込み。

たなべたけともたなべたけとも 2015/04/05 02:39 あ.... ごめんなさい。busybox の 所有者 、root になってましたね。
いきなりコメント書いちゃったんです。うれしくて。忘れてください。
この時代、ログインとかなく質問とかコメントとか出来ないところが多いので、
こういう書き込みが出来るところって、ありがたかったです。では、さようなら。

kinnekokinneko 2015/04/05 08:34 N7でshellコマンドを使いたいということですか?
toolbox入っているので、ある程度のことはできると思いますが。
パーミッションの問題でできる事に制限はありますが、ユーザー権限で実行権限を付けることはできると思いますので、root権限なしでもある程度のことはできると思います。wget単体のビルドできるものはgithubのほうに置いてあります。
RasPiでadbをするのは。パッケージリビルドだけで比較的簡単にできるような。

たなべたけともたなべたけとも 2015/04/12 17:53 ありがとうございます。まさかお返事いただけていたとは。wget だけ使えるものを、
バイナリ状態で手にいれられました。いやあ素人でしてその経緯は大変でした。
あ adb の方です 、コンパイルしても動かないのしか見つけられず。
wget もコンパイル出来たのはダメだったんです。ここの情報のおかげで助かりました。
これは、、イケルかも、その時にそう思う事が出来ましたので。実際イケタ!
find と rename は いさぎよく諦めました。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証