MTK(android init.rc) 寫一個開機啟動的服務


在開機往往我們想要做一些初始化的操作,這時候可以使用init.rc文件來實現,當然書寫一個開機啟動的服務也需要規范的。

         假設是C程序,則需要准備C程序的源碼,在我的例程中是一個在開機完成(android標志結束后,當然你也可以設置在boot階段)時進行檢測文件存在,沒有則創建。代碼在package/app/PxTPConfigRead里面。首先將其編譯到out目錄下的system/bin/下。可以在build/target/product下的base.mk下PRODUCT_PACKAGES+ = px_tp_config。這樣編譯時則會自動編譯。

         在確認system/bin/下生成了執行文件px_tp_config后,書寫init.rc,這里建議在device/mediatek/mt67xx/ init.mt67xx.rc中寫入。當然system/core/rootdir也是可以的。書寫如下:

service px_tp_config /system/bin/px_tp_config
    user root
    group root
    seclabel u:r:px_tp_config:s0
    class main    
    oneshot

這里解釋下:service后px_tp_config 指的是服務名,而后的路徑則是C執行文件在系統中的位置,user root代表使用root用戶執行,group root 指的是組在root組,而seclabel與SElinux相關,class main指的是屬於main類,當main執行時則會執行該服務,oneshot指的是執行一次,當然如果你的程序是循環的則會一直執行。(這里是服務聲明)

         有了聲明自然有啟動,上面設置的class main,則會自動在mian這個總服務啟動時一起啟動,當然也可以自己設置,比如:

on property:sys.boot_completed=1
    write /dev/ttyMT1 "test boot_completed writeing\n"  //在串口打印,測試是否成功加入該服務
    start px_tp_config

on property:sys.boot_completed=1意思是在開機完全時啟動該服務時,執行下面的語句。

當然你想在boot時或是其他時候執行,則在 on boot下寫start px_tp_config。

寫好這些后,全編譯一次。

確認服務執行沒有,可在log文件中搜索該服務名字段:

如果有這些則證明服務已經啟動了。

SElinux 

    當然在運行過程中會遇到問題,AVC問題(未遇到則不添加),則需要添加SElinux權限,或者關閉SElinux。

    在例程中做了一個添加的示范,首先在device\mediatek\common\sepolicy\file_contexts中聲明字段或者叫domain,如:/system/bin/px_tp_config u:object_r:px_tp_config_exec:s0。可直接替換成自己的test即可。

    接着添加te規則,命名為: 服務名.te。這里是px_tp_config.te。前面:

type px_tp_config, domain;

type px_tp_config_exec, exec_type, file_type;

init_daemon_domain(px_tp_config)

domain_trans(init, shell_exec, px_tp_config)

    而后面的allow則需要按照自己的需要一條一條添加,工作比較繁瑣,添加依據是:查看打印的log,在log搜索AVC字段,然后找到含有px_tp_config的avc denied。根據規則一步一步添加,規則報錯不會一次性報完,只會在添加完當前規則后,報下一條或幾條的錯誤。前面可按照自己的替換為test即可。

    添加了自己的規則,需要再BoardConfig.mk中聲明下使其編譯時te文件能夠被包含進去。

注:

    1.檢查是否編譯到了init.rc文件,可在out\target\product\$project\root

下查看相同名的init.rc中內容是否與你修改的一致。

    2.燒錄:若只是修改了init.rc,則只需要燒錄boot.img,若修改了C文件則要連syste.img一起燒錄。

 在此附上我的demo下載地址,供大家學習參考:https://files.cnblogs.com/files/inkhearts/%E5%BC%80%E6%9C%BA%E5%90%AF%E5%8A%A8C%E4%BB%A3%E7%A0%81.rar

最后再附上我認為比較有用的鏈接:

 

https://www.cnblogs.com/lxjshuju/p/6915468.html

 

https://blog.csdn.net/zhonglunshun/article/details/78615980

 

https://blog.csdn.net/qq_28899635/article/details/56289063

 

https://blog.csdn.net/feigebangni/article/details/50300063

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM