Ich möchte (über make) auf meinem Android-Handy kompilieren. Ich habe Root-Zugriff.
Ich habe fast alles eingerichtet. Aber da ist dieser Haken. Alle Konfigurationsdateien haben einen Shebang von #!/bin/sh . Ich kann sie mit $SHELL configure ausführen. Ich habe auch $CONFIG_SHELL gesetzt. Aber einige configure-Dateien führen andere Shell-Skripte aus und geben /bin/sh: no such file or directory .
Ich denke darüber nach, einen Symlink /bin/sh -> /system/bin/sh zu erstellen. Ich habe irgendwo gelesen, dass das Root-Dateisystem die Ramdisk ist und alle Änderungen daran in der Datei init.rc vorgenommen werden müssen . Wenn ich dies also erreichen möchte, müsste ich zuerst ein Verzeichnis ‚bin‘ erstellen und dann einen Symlink ‚sh‘ darin erstellen. Ich bezweifle, dass ln in init.rc funktionieren wird.
Ich habe diese andere Idee. Erstellen Sie irgendwo ein Verzeichnis ‚bin‘, vorzugsweise im Datenverzeichnis von Terminal IDE (ich verwende das). Dann erstellen Sie dort einen Symlink sh -> /system/bin/sh. Erstellen Sie dann 'bin' in / through und verwenden Sie mounten Sie den ersten bin in /bin durch init.rc
Drittens kann ich einfach mkdir bin und cp /system/bin/sh /bin/sh
Außerdem schlagen alle diese Methoden fehl und führen zu einem Startfehler, wenn eines der Quellverzeichnisse nicht gefunden werden kann.
Ich möchte wissen, welche Methode sicherer ist und ob es eine sicherere Alternative gibt?
@vishalbiswas Damit das funktioniert, müssen Sie möglicherweise auch PATH und LD_LIBRARY_PATH exportieren
Sie können Ihr erforderliches Setup tatsächlich per Skript ausführen und dieses Skript an xbin senden, damit es als ausführbar ausgeführt wird. Sie würden sich also so etwas ansehen, um das Skript so einzurichten, wie es für Sie funktioniert
#!/system/bin/sh
mount -o rw,remount /
mkdir /bin && mkdir /lib
chmod 755 /bin /lib
mount -o bind /system/bin /bin
mount -o bind /system/lib /lib
export PATH=/bin && export LD_LIBRARY_PATH=/lib
das obige ist lose, basteln Sie ein wenig daran, um es jetzt zu schließen, meistens in umgekehrter Reihenfolge
#!/system/bin/sh
umount /bin && umount /lib
mount -o ro,remount /
Die Verzeichnisse /bin und /lib sollten beim Neustart verschwinden, da sie im RAM leben, und Sie sollten PATH und LD_LIBRARY_PATH nicht aufheben müssen, da diese Variablen beim Schließen Ihrer Terminalinstanz damit sterben sollten.
Der andere Ansatz besteht darin, ein schnörkelloses Chroot-Arm-Linux in der zweiten Partition Ihrer externen SD-Karte einzurichten. Ich verwende Debian und habe meine init.environ.rc wie folgt angepasst
# set up the global environment
on init
export PATH /sbin:/vendor/bin:/system/sbin:/system/bin:/system/gcc/bin:/system/xbin:/bin:/usr/bin:/usr/sbin
export LD_LIBRARY_PATH /system/lib:/system/gcc/lib:/system/vendor/lib
export ANDROID_BOOTLOGO 1
export ANDROID_ROOT /system
export ANDROID_ASSETS /system/app
export ANDROID_DATA /data
export ANDROID_STORAGE /storage
export ASEC_MOUNTPOINT /mnt/asec
export LOOP_MOUNTPOINT /mnt/obb
export BOOTCLASSPATH [blah blah jars blah xD ]
# Debian CHROOT
export DEBIAN_ROOT /debian
export TMPDIR /tmp
mount -t proc none /debian/proc
mount -t sysfs none /debian/sys
mount -o bind /dev /debian/dev
mount -o bind /proc/net /debian/proc/net
mount -t devpts none /debian/dev/pts
Bei diesem Ansatz sollte Ihr Dateimanager die Verzeichnisse Ihrer Chroot-Partitionsdateien lesen, und das alles ohne Probleme. Ich benutze Total Commander.
EDIT- ich habe den nötigen Eintrag in der fstab vergessen es geht wie folgt, wieder an das Schema deines Gerätes anpassen
/dev/block/platform/msm_sdcc.2/by-num/p2 /debian ext4 rw,errors=panic wait
Hier ist das Tutorial, das ich von http://whiteboard.ping.se/Android/Debian gelernt habe
Suchen Sie jedoch nach einem ziemlich aktuellen Distributions-Image. Solange Sie nicht versuchen, ein per Bind gemountetes Verzeichnis zu löschen, ohne es vorher UNMOUNTET zu haben [ich habe das übrigens noch nie gemacht], werden Sie Ihr System nicht versehentlich löschen.
Feuerlord
Vishal Biswas