スポンサードリンク

Android – data2sdでシャットダウン時にアンマウント

カスタムROM使っている方にはあまり関係無いかもしれません。

この記事(仙石浩明の日記: Android 端末 (Nexus One) でアプリを SDカードの ext3 パーティションにインストールする (Apps 2 SD))で書かれているように、公式のROMそのままで、data2sdを自分で実現していると、シャウトダウンの時に、sdカードのマウントが解除できていないようだ。

次回の起動のmount時に怒られるのでそう思っています。

うまくアンマウントする方法ごないかxdaを調べていたらドンピシャの記事を見つけた。

その記事を参考にしたときの作業メモです。

サービスのファイルを書き換えるには、boot.imgの焼きなおしが必要であるため、そうするくらいなら、カスタムROM焼くわい。ということで却下。

/system/bin以下ファイルの書き換えであればrootであれば作業できるので、そうすることにした。

まず /system/bin/shutdown を /system/bin/shutdown.orig と名称を変更する。
次に、以下のようなファイルを作成する。


#!/system/bin/sh

/system/bin/log -p i -t shutdown_script "my shutdown script start"

# wait for other services finished
/system/bin/logwrapper /system/bin/stop
/system/bin/logwrapper /system/bin/sleep 5
/system/bin/logwrapper /system/bin/sync

# umount /dev/block/mmcblk0p2

/system/bin/log -p i -t shutdown_script "+ remount to read-only"
/system/bin/logwrapper /system/bin/mount -t ext2 -oro,remount /dev/block/mmcblk0p2 /system/extsd

/system/bin/log -p i -t shutdown_script "+ remount to read-only finished"
/system/bin/log -p i -t shutdown_script "+ original shutdown command execute"

/system/bin/shutdown.orig

/system/bin/log -p i -t shutdown_script "my shutdown script end"

上記のファイル名を”shutdown”とし、/system/bin/shutdown に配置する。(また、実行権限を与えておく)

そうすることで、/init.rc から /system/bin/shutdown が呼ばれ、上記のシェルスクリプトが実行され、最後には remount,ro してからオリジナルのシャットダウンコマンドを発行するようになっている。stop で、他のサービスの終了を全て待つようにしているので問題ないはず。

ただ、ご使用は自己責任でおねがいします。

参考リンク:
xda-developers – View Single Post – [DEV] Someone ever tried an “init.d/rc0.d” script on Android ?