1. 程式人生 > >Android系統開機啟動C可執行檔案

Android系統開機啟動C可執行檔案

在工作中有一個需求是android手機開機啟動一個C可執行檔案,起初嘗試是將在android原始碼裡面寫一個bash指令碼,然後在腳本里面執行/data目錄下的可執行檔案,然後將系統燒寫進手機,開機後將可執行檔案放入手機/data目錄裡面,然後重啟,最終的結果是沒有成功。

需求一直在這裡,後來將嘗試別的方法,對於檔案的放置可以在原始碼裡面將可執行檔案在燒寫系統的時候直接燒寫進手機裡面,還有就是bash指令碼問題,在手機原始碼裡面找到一個現成的指令碼,然後將自己的執行命令新增到該指令碼的後面,最終成功了。

下面就是該實現的全過程,系統是Android6.0  硬體是MTK6735

一、需求分析:

手機每次開機自動執行可執行檔案

二、問題彙總

1、腳本里面不能開啟spidev,通過在手機裡面執行logcat | grep avc可以發現spidev0.1沒有read write許可權。

2、Socket沒有連線許可權,socket的伺服器是在一個APP裡面,客戶端是在可執行檔案裡面,通過Android studio發現該不可信app沒有connect許可權。

avc:denied{connectto } for scontext=u:r:enableswap:s0 tcontext=u:r:untrusted_app:s0:c512,c768 tclass=unix_stream_socket permissive=0

三、解決方法

首先將可執行檔案放到系統原始碼的/alps/device/mediatek/mt6735目錄下面,並修改其許可權,然後進入/alps/device/mediatek/mt6735/device.mk檔案,將該可執行檔案放到手機的/system/bin目錄下面,shell指令碼只能執行手機原始碼/system/bin目錄下的檔案。

 

然後在shell腳本里面執行該可執行檔案/alps/device/mediatek/mt6735/enableswap.sh


因為可執行檔案裡面會開啟spidev0.1,此時問題也就出現了。

由於Android4.x以上的系統都有SEliunx安全保護機制,app對於裝置的操作以及資源的訪問都有可能沒有對應的許可權,應對方法便是缺少什麼許可權就條件什麼許可權,有一個修改許可權的萬能公式

:allow scontext tcontext:tclass {缺少的許可權}

對於第一個問題

1、在alps/device/mediatet/mt6735/init.mt6735.rc修改spidev0.1的許可權和所有者,以及enable swap的所有者。

 


2開啟檔案.../alps/external/sepolicy/file_contexts

 

3開啟檔案.../alps/external/sepolicy/device.te


4、開啟檔案.../.../external/sepolicy/init.te,萬能公式allow scontext tcontext:tclass {許可權}


此時在手機裡面執行logcat | grep avc,則不會報開啟spidev裝置沒有許可權問題。

對於第二個問題,和第一問題類似都是缺少許可權

修改app以及程式對裝置以及資源的訪問許可權的檔案都是.te字尾的檔案,而.te的檔案存在系統原始碼的兩個地方,/alps/device/mediatek/common/sepolicy//alps/external/sepolicy/下面。

因為我們是在enablswap.sh腳本里面執行的檔案,所以我們已經在enableswap.te檔案裡面新增APPconnect許可權,在/alps/device/mediatek/common/sepolicy/下面正好有enableswap.te檔案,我們只需套用萬能公式,允許untrusted_appconnect許可權。

開啟檔案/alps/device/mediatek/common/sepolicy/enableswap.te