Sambil melihat-lihat sistem file Android saya, saya menemukan itu, sebenarnya memiliki /etc/init.d/
direktori. Setelah mengintip di sana, saya menemukan /etc/init.d/20userinit
dengan baris berikut:
if [ -e /data/local/userinit.sh ];
then
log -p -i -t userinit "Executing /data/local/userinit.sh";
busybux chmod +x /data/local/userinit.sh;
logwrapper /system/bin/sh /data/local/userinit.sh;
setprop cm.userinit.active 1;
fi;
Makhluk ini, tentu saja, persis apa yang saya butuhkan, saya menulis skrip berikut di komputer saya kemudian mendorongnya ke perangkat saya:
#!/system/bin/sh
dropbear -s -g
(didorong ke perangkat melalui scp userinit.sh phone:/data/local/userinit.sh
, ingatkan Anda:])
Reboot perangkat, lalu berlari ps | grep "[d]ropbear"
, dan tentu saja, itu berjalan. Kesejukan!
/data/init.sh
berjalan saat boot, jika Anda memiliki root, Anda dapat mengeditnya sesuka Anda. Hati-hati ;)Sunting: Rupanya Anda mungkin perlu menyuntikkan skrip yang telah diedit ke dalam image boot juga. Info tentang cara melakukannya di sini: http://forum.xda-developers.com/showthread.php?t=443994
sumber
find / -name "init.sh"
berubah. Apakah ada skrip lain yang berjalan saat boot?/etc/init.rc
yang memulai shell. Itu harus memanggil init.sh tetapi jika tidak, Anda bisa membuatnya memanggil skrip Anda sendiri./data
tetapi tidak/data/init/.sh
atau/etc/init.rc
. Grep tidak menemukan contoh menarik dari stringinit
di/etc
(bahkan rekursif).Lihat ke
/etc/
direktori. Biasanya ditempatkan di/system/
partisi yang dapat Anda mount sebagai RW:Beberapa langkah di atas dapat diganti dengan:
dan kemudian remount RO:
Sekarang tugas Anda untuk menemukan
*rc
file yang dapat dieksekusi atau Anda modifikasi untuk mencapai tujuan Anda:Google tentang setiap kandidat untuk mengetahui bagaimana file ini digunakan.
Kandidat yang baik untuk menyertakan skrip khusus adalah baris dari:
Karena setiap perangkat unik, Anda mungkin perlu menebak sendiri tentang kriteria pencarian ...
Misalnya saya temukan
/etc/mkshrc
yang digunakan oleh shell Korn. Saya memperbarui file ini untuk memperpanjangPATH
env var dan sekarang setiap kali saya melakukannyaadb shell
saya memiliki symlink Busybox di PATH saya!Lihat juga dengan cara yang sulit (jika Anda tidak beruntung menemukan file ajaib ): https://stackoverflow.com/questions/9768103/make-persistent-changes-to-init-rc
sumber
/system
adalahsystem.img
, dan/etc
merupakan symlink ke/system
.Saya mencoba semua metode ini dan tidak ada yang bekerja untuk saya. Namun apa yang berhasil didasarkan pada jawaban lord-ralf-adolf di sini Bagaimana menjalankan skrip saat boot di CM12.1?
pada dasarnya, cari file
/system/etc/install-recovery.sh
dan tambahkan baris berikut di awal/data/init.sh &
kemudian
Selesai! Anda sekarang dapat memasukkan apa pun yang Anda inginkan
/data/init.sh
dan itu akan berjalan saat startup. Jika file/system/etc/install-recovery.sh
tidak ada di sistem Anda maka jawaban ini tidak akan berfungsi untuk Anda. Jangan repot-repot membuatnya.sumber
/system/etc/install-recovery.sh
tidak ada, tetapi masih dijalankan saat boot jika ada, jadi ada baiknya memeriksa.Segalanya sederhana sebelum Android 5 ketika SELinux tidak
enforcing
. Anda bisa meletakkan kode Anda di skrip apa pun atau mengganti biner dengan skrip yang dijalankan dengan hak akses root saat boot. Metode lain adalah mendefinisikaninit
layanan kustom khusus untuk batch mengeksekusi skrip dari beberapa direktori.Berdasarkan ini mendekati pengembang custom ROM diperkenalkan berbeda pseudo
init.d
fenomena seperti/etc/init.d/
,/etc/install-recovery.sh
,/etc/init.qcom.post_boot.sh
,/system/bin/debuggerd
,/data/init.sh
,/data/local/userinit.sh
,/data/local/init.d/
dllNamun proses yang berjalan dengan UID
0
tetapi dalam konteks SELinux terbatas sangat tidak berdaya. Sebuah layanan dimulai padainit.rc
file tersebut denganu:r:init:s0
konteks bahkan tidak bisa mengeksekusi shell script dari/system/bin/
, sehingga kebutuhan kebijakan SELinux akan ditambal untuk menyuntikkan terbatas konteks misalnya Magisk mendefinisikanu:r:magisk:s0
. Setelah itu dimungkinkan untuk menjalankan skrip secara langsung sebagaiinit
layanan atau dariinit.d
direktori-like.Untuk detailnya lihat Bagaimana menjalankan executable pada boot dan membuatnya tetap berjalan?
sumber
Cara sederhana (bekerja):
Siapkan perintah post boot Anda dalam sebuah skrip, misalkan / system / xbin / post-boot (atur perm exec)
Tambahkan path skrip kustom di atas di akhir /system/etc/init.qcom.post_boot.sh
Misalnya:
echo / system / xbin / post-boot >> /system/etc/init.qcom.post_boot.sh
Selesai!
(Jika Anda tidak dapat menemukan qcom post_boot (perangkat Qualcomm), cari skrip post_boot)
sumber
Jika Anda telah menginstal magisk, Anda dapat menempatkan .sh ke:
atau untuk
Jangan lupa untuk membuat executable:
chmod +x your-script.sh
.Info lebih lanjut: https://github.com/topjohnwu/Magisk/blob/master/docs/guides.md#boot-scripts
sumber