簡體   English   中英

Android 在啟動時使用 init.rc 運行腳本不起作用

[英]Android run script at boot using init.rc not working

我正在嘗試運行一個在設備完成啟動時執行的腳本。 這個特定設備不支持從 init.d 目錄運行腳本,這就是我使用 init.rc 的原因。

init.rc 文件已修改為包含以下代碼

on property:sys.boot_completed=1
start initAsic

service initAsic /data/local/tmp/runn.sh
user root
group root
oneshot

然后,啟動映像已重建並刷新到設備。 可以通過查看位於/的 init.rc 文件來確認更改

目前我只使用一個簡單的測試腳本(testScript.sh),它發出以下命令

echo hi >> /data/local/tmp/test.txt

testScript.sh 和 text.txt 文件設置了777權限,並且都已使用adb push推送到設備。 他們當前的位置是/data/local/tmp/

出於某種原因,我的腳本似乎沒有運行,因為我看不到任何文本被寫入 test.txt。

我錯過了什么嗎? 會不會是 SELinux 的問題?

我的設備目前已將 SElinux 設置為許可。 這是通過更改 BoardConfig.mk 文件並重建 boot.img 來完成的。

通過運行命令dmesg | grep -C5 initAsic dmesg | grep -C5 initAsic我看到我收到了這個錯誤代碼

service initAsic does not have a SELinux domain defined

我需要將行seclabel u:r:init:s0添加到我的初始化服務中的問題。 完整的服務現在看起來像這樣。

service initAsic2 /data/local/tmp/runn.sh
seclabel u:r:init:s0
user root
group root
oneshot
disabled

disabled 關鍵字也已根據另一個 SO 成員的建議添加,但不確定是否有必要。

另請注意,必須將 SElinux 設置為permissive以允許該服務運行,或者必須設置策略以允許該服務運行。 有幾種技術可以做到這一點。 對我有用的一項是將以下行添加到我的設備的 BoardConfig.Mk 文件中

BOARD_KERNEL_CMDLINE += androidboot.selinux=permissive

並對更新的引導映像進行重建/刷新。

這篇文章是我發現添加 seclabel 屬性的建議的地方。 它還包含有關我遇到的 SELinux 問題的更多有用信息: 初始化警告:Service myservice 需要定義 SELinux 域。 請修復

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM