スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

SH-12C リカバリモード goroh_kunカーネル使用

これまた今更な話だけど、
goroh_kunさんが作ってくれたリカバリ対応カーネルイメージを使用していて、リカバリモードadb接続をした時にどの様に操作を進めていけば良いのかを探っていこうと思う。

※ここでのリカバリモードのadb接続ってのは、電源を入れた時に、ホームボタンを押して、点滅の時にadb接続のモードって事ね。。。


一度でも、試しにリカバリモードでadb接続をしてみた人は解ると思うのだけど、最初はadb接続>su は出来るのだけれど、どのパーティションもマウントされていないのでファイル操作は出来ない。


まずは、SH-12Cがどの様なマウントをしているのかをチェックしてみる。

通常起動している時に、adb接続し、mountコマンドを実行すると以下のような情報が得られる。

# mount
<略>
/dev/block/mtdblock5 /system yaffs2 ro,relatime 0 0
/dev/block/mtdblock11 /data yaffs2 rw,nosuid,nodev,relatime 0 0
/dev/block/mtdblock1 /persist yaffs2 rw,nosuid,nodev,relatime 0 0
/dev/block/mtdblock6 /cache yaffs2 rw,nosuid,nodev,relatime 0 0
/dev/block/mtdblock8 /battlog yaffs2 rw,nosuid,nodev,relatime 0 0
/dev/block/mtdblock10 /ldb yaffs2 rw,nosuid,nodev,relatime 0 0
/dev/block/mtdblock9 /calllog yaffs2 rw,nosuid,nodev,relatime 0 0
<略>


ずら~っとマウントの情報が出てくるが、どうやら上の場所が重要。

と言うか、これがわかればリカバリモードでadb接続時も、もう怖いことはない。


goroh_kunさんのツイッターにて、
http://twitter.com/goroh_kun/statuses/160463549435613184

このような発言があり、リカバリモードでのsystemのマウントの仕方は、

mount -t yaffs2 /dev/block/mtdblock?? /system


ここまでくれば、もう解ったようなもの。


要するに、上の最初に調べたマウント情報で、systemは mtdblock5 って事なので、

mount -t yaffs2 /dev/block/mtdblock5 /system


でマウント出来るということ。


しかし、いきなり上のコマンドを打っても、マウントはされない。

goroh_kunさんのツイッターにも、

「cat /proc/partitionsでsystemを調べて、mknodしてください」


とある。

普通は起動時に作成されるべき、パーティションを認識(って言い方であってるのか?w)するためのデバイスノードってものが作成されておらず、「そこにあるのは解ってるけど、使えないよ」状態なので、自分でそのデバイスノードを作ってやる必要がある。
※ココら辺は、漠然としたLinuxの知識なので説明が間違ってたらゴメンナサイ。

デバイスノードを作るコマンドは、mknod(メイクノード)で、

mknod [options] filename type major minor


って事だけど、今までに調べた情報では、メジャー番号と、マイナー番号が解らない。

そこで、

cat /proc/partitions


が必要になるって事。


コマンドを打ってみると、ズラッと出てくるが、マウントしたいのが/systemだったら、

上のマウント状態を確かめた所に載っている情報を元に、

mtdblock5のメジャー番号、マイナー番号を見ればよい。

タイプは、ls -l /dev/block/ で見てみると、ブロックって事がわかるので(名前見ればわかるか)ブロックって事で。
※説明が適当だけど、brw- とか出てると思うけど、最初のbはブロックの意味。詳しくは、lsコマンドも調べてみると勉強になる。かなりよく使うコマンドだから。


なんだか長くなったけど、まとめると、

goroh_kunさんが作ってくれた、リカバリ対応カーネルでリカバリadb接続してファイル操作するには、

例えば/system をマウントしたい場合は

mkdir /dev/block


※リカバリadb接続では、/dev/blockディレクトリは初期状態ではないので、
mkdir /dev/block をしてみた。一番下に説明を書いておく。


mknod /dev/block/mtdblock5 b 31 5


と打ってから、ノードが作成されたら、

mount -t yaffs2 /dev/block/mtdblock5 /system


と打つ。


ちゃんとマウント出来たか確認するには、

ls -l /system


とでも打って中身を確認できればちゃんとマウントされている。


他のパーティションをマウントしたい場合も、mknodしてからmountするって事になる。。。はずw

※自分で読みなおして気付いたけど、パーティションをマウントってのを説明すべきだった。。。Androidで、/system とか /data とかを見ると、単なるディレクトリに見えてるけど、実際は別々のパーティションとして存在していて、デバイスノードでパーティションをディレクトリに見せている(で合ってるはずw)。だから、/system と、/data は違うパーティション内のデータだと理解しておくと良いと思う。。普通にエクスプローラとかしか使ってないと、ココら辺を理解するのが大変なような気がする。

だから、/data と、/system をマウントしてから、/data/local にバックアップしておいたファイルを /system に戻すって事が出来るようになる。



あ!それから、これは書いておこうと思ってたんだけど、

確か、リカバリモードのadb接続の時は、cp とかのコマンド使えなかった?かな?w

なので、使いたい場合は、/data/local にでも置いてあるはずなbusyboxを使う。


簡単なのは、cd /data/local とかしておいおて、

busybox cp /data/local/(ファイル名) /system/app/(ファイル名)


とかすれば使える。。。はず!
定かではないけど、出来るはず!www


あと、これも定かではないんだけど、起動しなくなってから、PCから/data/localとかにファイルを移動したい場合は、
adb shellで上の方法で/dataをマウントしてからadb shellを抜けだして、adb push でいけるのかな?

これも不確かww

まあ、今度時間があったら試してみる。。。かな?w

これが出来ないと、バックアップを全部/data/localあたりに保存して置かなければならず、容量食い過ぎるよね?

ちょっとこれからやってみよ。。。



という事で、試してみた(笑)

結果、上の方法で合ってた。

adb shell で su して /data をマウント→ exit を2回で adb shell を抜け出す。

それから、adb push で /data/local にファイルを持っていけることが解った。

良かった良かった。。。




このシステムのマウントの方法は、某掲示板で既出の情報だけど、少し詳しく書いてみた。

これで少しでも、文鎮になったと諦める人が減りますように。。。


今まで自己満足で書いてきたけど、見てくれてる人いたんだ~。


めちゃくちゃな説明なのに、読んでくれてありがとうございます。



※システムのバックアップはちゃんと取っておかないと、マウントできても意味が無いので、ちゃんとバックアップを取ってからシステム弄るようにしましょう。余計なお世話かw

※goroh_kunさんのツイートにて、mount -t yaffs2 /dev/block/mtdblock?? /system ってあったけど、
リカバリモードでadb接続した時は、/devに/block ディレクトリは無い。
mknod /dev/block/mtdblock5 b 31 5 ってすると、そんなディレクトリは無いよ、と言われたので、
ls -l /dev としてみると、確かに block って言うディレクトリはない。
だから、
mkdir /dev/block してから、
mknod /dev/block/mtdblock5 b 31 5 だったらちゃんとmknod出来て、、
mount -t yaffs2 /dev/block/mtdblock5 /system でちゃんとマウント出来た。
某掲示板では、/dev 直下にmknodしてmountしていた。
どっちでもちゃんとマウントは出来るんだから、どっちでも構わないと思うけど、
何かgoroh_kunさんの教えてくれてるのがblockディレクトリの中を指定していたのと、
通常起動しているときは、mtdblock達はblockディレクトリにちゃんと入っているので、
mkdir /dev/block してからmknodやmountをするって方法を選んでみた。^^
スポンサーサイト

コメントの投稿

非公開コメント

プロフィール

tozionsdoor

Author:tozionsdoor
ただ書くだけ。スクショとか取るの面倒。貼るのも面倒w

検索フォーム
FC2カウンター
最新記事 5件
最新コメント
月別アーカイブ
カテゴリ
リンク
QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。