Als ich mich in meinem Android-Dateisystem umsah, stellte ich fest, dass es tatsächlich ein /etc/init.d/
Verzeichnis hat. Nachdem ich mich dort umgesehen hatte, fand ich /etc/init.d/20userinit
folgende Zeilen:
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;
Da dies natürlich genau das war , was ich brauchte, schrieb ich das folgende Skript auf meinem Computer und schob es dann auf mein Gerät:
#!/system/bin/sh
dropbear -s -g
(Gedrückt zum Gerät über scp userinit.sh phone:/data/local/userinit.sh
, wohlgemerkt:])
Starten Sie das Gerät neu und lassen Sie es dann ps | grep "[d]ropbear"
laufen. Kühle!
/data/init.sh
Läuft beim Booten. Wenn Sie root haben, können Sie es nach Belieben bearbeiten. Achtung ;)Bearbeiten: Möglicherweise müssen Sie das bearbeitete Skript auch in das Boot-Image einbinden. Informationen dazu finden Sie hier: http://forum.xda-developers.com/showthread.php?t=443994
quelle
find / -name "init.sh"
etwas auftaucht. Gibt es andere Skripte, die beim Booten ausgeführt werden?/etc/init.rc
die die Shell startet. Es sollte init.sh aufrufen, aber wenn dies nicht der Fall ist, können Sie es einfach dazu bringen, Ihr eigenes Skript aufzurufen./data
aber keine/data/init/.sh
oder/etc/init.rc
. Grep findet keine interessante Instanz des Stringsinit
in/etc
(auch nicht rekursiv).Schau in das
/etc/
Verzeichnis. Normalerweise befindet es sich in einer/system/
Partition, die Sie als RW einbinden können:Einige der obigen Schritte können ersetzt werden durch:
und später wieder einhängen RO:
Nun müssen Sie die ausführbare
*rc
Datei oder Datei finden, die Sie ändern, um Ihr Ziel zu erreichen:Google über jeden Kandidaten, um zu erfahren, wie diese Datei verwendet wurde.
Ein guter Kandidat für das Einbinden von benutzerdefinierten Skripten sind Zeilen aus:
Da jedes Gerät einzigartig ist, müssen Sie möglicherweise eigene Vermutungen über Suchkriterien anstellen ...
Zum Beispiel habe ich
/etc/mkshrc
die von Korn verwendete Shell gefunden. Ich aktualisiere diese Datei, umPATH
env var zu erweitern, und jetzt habe ich jedes Maladb shell
Busybox-Symlinks in meinem PATH!Siehe auch hard way (wenn Sie kein Glück haben, Magic File zu finden): https://stackoverflow.com/questions/9768103/make-persistent-changes-to-init-rc
quelle
/system
istsystem.img
und/etc
ist ein Symlink in/system
.Ich habe alle diese Methoden ausprobiert und keine davon hat für mich funktioniert. Was jedoch funktionierte, basierte auf der Antwort von Lord-Ralf-Adolf hier. Wie führe ich ein Skript beim Booten in CM12.1 aus?
Suchen Sie im Grunde die Datei
/system/etc/install-recovery.sh
und fügen Sie die folgende Zeile am Anfang hinzu/data/init.sh &
dann
Getan! Sie können nun alles eingeben, was Sie möchten,
/data/init.sh
und es wird beim Start ausgeführt. Befindet sich die Datei/system/etc/install-recovery.sh
nicht in Ihrem System, funktioniert diese Antwort für Sie nicht. Mach dir nicht die Mühe, es zu schaffen.quelle
/system/etc/install-recovery.sh
es nicht vorhanden war, aber es wird immer noch beim Booten ausgeführt, falls vorhanden. Es lohnt sich also, es zu überprüfen.Vor Android 5 waren die Dinge einfach, während SELinux dies nicht war
enforcing
. Sie können Ihren Code in jedes Skript einfügen oder eine Binärdatei durch ein Skript ersetzen, das beim Booten mit Root-Rechten ausgeführt wurde. Eine andere Methode bestand darin, einen benutzerdefinierteninit
Dienst zu definieren , der speziell zum Batch-Ausführen von Skripten aus einem bestimmten Verzeichnis dient.Basierend auf diesen Ansätzen Custom ROM - Entwickler unterschiedliche eingeführt pseudo-
init.d
Phänomen wie/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/
usw.Ein Prozess, der mit UID
0
aber in einem eingeschränkten SELinux-Kontext ausgeführt wird, ist jedoch ziemlich hilflos. Ein Dienst in gestarteteninit.rc
Datei mitu:r:init:s0
Kontext kann nicht einmal einen Shell - Skript ausführt aus/system/bin/
, so SELinux politische Bedürfnisse, ein zu injizieren gepatcht werden uneingeschränkt Kontext zB Magisk definiertu:r:magisk:s0
. Danach ist es möglich, ein Skript direkt alsinit
Dienst oder aus eineminit.d
ähnlichen Verzeichnis auszuführen .Weitere Informationen finden Sie unter Ausführen einer ausführbaren Datei beim Start und Beibehalten der Ausführung.
quelle
Einfacher Weg (Arbeiten):
Bereiten Sie Ihre Post-Boot-Befehle in einem Skript vor, sagen Sie / system / xbin / post-boot (set exec perm)
Fügen Sie den obigen benutzerdefinierten Skriptpfad am Ende von /system/etc/init.qcom.post_boot.sh hinzu
Z.B:
echo / system / xbin / post-boot >> /system/etc/init.qcom.post_boot.sh
Getan!
(Wenn Sie das qcom post_boot (Qualcomm-Geräte) nicht finden können, suchen Sie nach Post_boot-Skripten.)
quelle
Wenn du magisk installiert hast, kannst du die .sh in folgendes Verzeichnis platzieren:
oder zu
Vergessen Sie nicht , es ausführbar zu machen:
chmod +x your-script.sh
.Weitere Informationen: https://github.com/topjohnwu/Magisk/blob/master/docs/guides.md#boot-scripts
quelle