2010年1月29日金曜日

su になり、VoiceSearch を復活させる 後編

前編では su になるところまで辿り着いた。後編では、機能しなくなった VoiceSearch を復活させる。root 化に関しては、コムギさんMaster.Tさんmeyskldさんが参考になる。

VoiceSearch の復活に関してはmeyskldさんのところで紹介されていたここの情報を元にしている。

手順
1. VoiceSearch.apk のインストール
2. libspeech.so の置き換え

実際の操作については、
手順 1. MILESTONE で行なう、
手順 2. MILESTONE を PC と USB で接続し、 adb shell 上で行なう、
ということになる。

1. VoiceSearch.apk のインストール
(a) VoiceSearch.apk ファイルを SD カードにコピー
(b) ASTRO File Manager で VoiceSearch.apk ファイルを実行
(c) Open App Manager を選択し、Install を選択してインストール

2. libspeech.so の置き換え
(a) libspeech.so ファイルを SD カードにコピー
※ここから adb shell で行なう
(b) adb shell で /system を書き込み可能な状態 (rw) でマウントしなおす
(c) libspeech.so を強制的に (-f オプション) コピーする
※実際のコマンド入力と結果は下記のようになる
D:\android-sdk-windows\tools>adb shell
$ su
su
# mount
mount
rootfs / rootfs ro 0 0
tmpfs /dev tmpfs rw,mode=755 0 0
devpts /dev/pts devpts rw,mode=600 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
tmpfs /sqlite_stmt_journals tmpfs rw,size=4096k 0 0
none /dev/cpuctl cgroup rw,cpu 0 0
/dev/block/mtdblock6 /system yaffs2 ro 0 0
/dev/block/mtdblock8 /data yaffs2 rw,nosuid,nodev 0 0
/dev/block/mtdblock7 /cache yaffs2 rw,nosuid,nodev 0 0
tmpfs /tmp tmpfs rw,size=2048k 0 0
/dev/block/mtdblock0 /pds yaffs2 rw,nosuid,nodev 0 0
/dev/block//vold/179:1 /sdcard vfat rw,dirsync,nosuid,nodev,noexec,uid=1000,gid=
1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,s
hortname=mixed,utf8,errors=remount-ro 0 0
# mount -o remount,rw -t yaffs2 /dev/block/mtdblock6 /system
mount -o remount,rw -t yaffs2 /dev/block/mtdblock6 /system
# mount
mount
rootfs / rootfs ro 0 0
tmpfs /dev tmpfs rw,mode=755 0 0
devpts /dev/pts devpts rw,mode=600 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
tmpfs /sqlite_stmt_journals tmpfs rw,size=4096k 0 0
none /dev/cpuctl cgroup rw,cpu 0 0
/dev/block/mtdblock6 /system yaffs2 rw 0 0
/dev/block/mtdblock8 /data yaffs2 rw,nosuid,nodev 0 0
/dev/block/mtdblock7 /cache yaffs2 rw,nosuid,nodev 0 0
tmpfs /tmp tmpfs rw,size=2048k 0 0
/dev/block/mtdblock0 /pds yaffs2 rw,nosuid,nodev 0 0
/dev/block//vold/179:1 /sdcard vfat rw,dirsync,nosuid,nodev,noexec,uid=1000,gid=
1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,s
hortname=mixed,utf8,errors=remount-ro 0 0
# cp -f /sdcard/libspeech.so /system/lib/libspeech.so
cp -f /sdcard/libspeech.so /system/lib/libspeech.so
# mount -o remount,ro -t yaffs2 /dev/block/mtdblock6 /system
mount -o remount,ro -t yaffs2 /dev/block/mtdblock6 /system
# mount
mount
rootfs / rootfs ro 0 0
tmpfs /dev tmpfs rw,mode=755 0 0
devpts /dev/pts devpts rw,mode=600 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
tmpfs /sqlite_stmt_journals tmpfs rw,size=4096k 0 0
none /dev/cpuctl cgroup rw,cpu 0 0
/dev/block/mtdblock6 /system yaffs2 ro 0 0
/dev/block/mtdblock8 /data yaffs2 rw,nosuid,nodev 0 0
/dev/block/mtdblock7 /cache yaffs2 rw,nosuid,nodev 0 0
tmpfs /tmp tmpfs rw,size=2048k 0 0
/dev/block/mtdblock0 /pds yaffs2 rw,nosuid,nodev 0 0
/dev/block//vold/179:1 /sdcard vfat rw,dirsync,nosuid,nodev,noexec,uid=1000,gid=
1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,s
hortname=mixed,utf8,errors=remount-ro 0 0
#
終了。これで、VoiceSearch が復活している。

ここではまったのは、『SD カードをアンマウントしろ』、と記述があるので MILESTONE の Settings でアンマウトして作業に入ったところ、SD カードにある libspeech.so が見当らないというエラーが出た。/sdcard に何もマウントされていない状況になっていた。で、SD カードっぽいものを /dev で探すが見当らない。/dev/hda とか /dev/sda っぽいんじゃないかと思っていたが違う。検索すると sdutil というコマンドがあるらしい。しかし、このコマンドも知らないと言われてしまう。もうちょっと検索すると /dev/block//vold/179:1 が SD カードっぽい。当てずっぽうで、rw と vfat でマウントしてみるとうまくいき、SD カードにある libspeech.so にアクセスできるようになった。

作業していて /system の中を見たりしていると、android って Linux なんだなってのを実感した。以前に Debian を使っていたので懐しいのとともに、今回はその貧弱な知識ではあるがちょっと役立った。こういう作業は面白い。android 端末を選んで良かったと思うところだ。

0 件のコメント:

コメントを投稿