temporaryなめも帳

だらだらと備忘録とか。誰かの為になることをねがって。

Androidのsystem.imgの権限設定とか

-- 追記 2014/07/15 --

最近のAndroidのsystem.imgはext4 filesystemになっていて、UbuntuとかのLinux環境であればloopオプションをつけてマウントできる。

$ sudo mount -t ext4 -o loop system.img mount_path

system.imgをマウントすると、各ファイル/ディレクトリに対してオーナー設定とか権限設定がすでにされているのが見えるのだけど、これは一体どこでされているのか? 簡単に調べてみた。

tree/system/extras/ext4_utils/make_ext4fs* のファイルがそれ。ビルド後はmake_ext4fsというバイナリになっていて、mkuserimg.shから呼び出されている。このバイナリがsystem.imgを作成している子。 ビルド中のログから、このshを使っているところを探すと何してるか見れて面白いかも。sh内のMAKE_EXT4FS_CMDに-vとかつけるとverboseログがでてデバッグしやすい感じ。

このmake_ext4fsの中で、実際にuid/gidとかfile-modeとかを設定しているのはココのfs_config_func。 fs_config_funcはただの関数ポインタで、ここに当たっている関数の実態はここのfs_config関数

この関数を読むとなるほど、android_filesystem_config.hにandroid_dirsとかandroid_filesとかで用意してある設定を読みだしている。このあたりの定義を拡張してやれば、自由に権限設定できるね。

--- 追記 宣言されたandroid_files[]を見てると、ホント良く考えられてるなと。 init* なファイルは 00750, AID_ROOT, AID_SHELL で権限が振られるようになっているので、もしinit.rcとかから読み出したいshを書くなら、 名前はinit.hoge.shにしておくといいんじゃないかな。