有時候希望在啟動後做點事情,比如在sdcard上建立目錄,修改/data的存取權限等,這些都可以放在init.rc中去完成,那麼如何來完成呢,最近由於工作的需要,在這方面進行了一些研究,特寫於此,供大家參考。
通過下面的例子來講述,實現一個功能:在android系統啟動後,修改/data的存取權限為770.
共4步:1、解壓ramdisk.img 2、用c語言完成要實現的功能 3、修改init.rc,啟動c語言可執行程式 4、製作ramdisk.img
1、解壓ramdisk.img:
解壓、修改Android的ramdisk.img的手動方法:
將ramdisk.img複製一份到任何其他目錄下,將其名稱改為ramdisk.img.gz,並使用命令
gunzip ramdisk.img.gz
然後建立一個檔案夾,叫ramdisk吧,進入,輸入命令
cpio -i -F ../ramdisk.img
這下,你就能看見並操作ramdisk裡面的內容了。
此步可參考:http://blog.csdn.net/liushaogeng/archive/2010/10/14/5941259.aspx
2、完成一個C語言程式chpermission.c,來實現修改許可權的功能。代碼如下:
#include <stdlib.h>
int main()
{
system("chmod 700 /data");
return 0;
}
然後編譯此程式,不過需要編譯為android下的可執行程式,可參考我的部落格:http://blog.csdn.net/liushaogeng/archive/2010/09/01/5855925.aspx ,採用部落格中介紹的兩種方法均可以。 編譯完後將可執行檔push到模擬器的/data目錄中去: #adb push chpermission /data
3、 修改ramdisk目錄下init.rc檔案,讓其啟動 chpermission程式, 增加以下代碼:
#add by me on 2010-10-18
service chpermission /data/ chpermission
oneshot
用於啟動 chpermission,完成相應的功能--修改data許可權。
init.rc的文法可參考部落格: http://blog.csdn.net/liushaogeng/archive/2010/10/18/5949244.aspx
4、製作ramdisk.img,
init.rc修改之後,可以使用下列命令重新打包成鏡像
cpio -i -t -F ../ramdisk.img > list
cpio -o -H newc -O lk.img < list
目前的目錄下產生的lk.img就是我們的新鏡像了。
可參考部落格: http://blog.csdn.net/liushaogeng/archive/2010/10/14/5941259.aspx
將ramdisk.img拷貝到sdk指向的目錄。
全部ok,重啟自己的模擬器,查看data許可權是否為770