it-swarm.com.de

Nehmen Sie dauerhafte Änderungen an init.rc vor

Ich möchte die init.rc-Datei eines Android-Pads ändern. Aber nachdem ich es geändert habe und das System neu gestartet habe, kommt der ursprüngliche init.rc zurück.

Wie kann ich die Änderung an init.rc dauerhaft durchführen, ohne das System neu zu erstellen (da ich keinen Quellcode des Systems habe)? Oder gibt es eine Möglichkeit, umzugehen?

36
user1278251

Entpacken Sie die uramdisk mit folgendem Befehl in Host PC (Linux)

mkdir /tmp/initrc cd /tmp/initrd
Sudo mount /dev/sdb1 /mnt          

sdb1 ist Teil, in dem uramdisk/uInitrd liegt.

dd bs=1 skip=64 if=/mnt/uInitrd of=initrd.gz
gunzip initrd.gz

Zu diesem Zeitpunkt sollte der Befehl file initrd Folgendes anzeigen:

mkdir fs
cd fs
cpio -id < ../initrd

Änderungen an init.rc vornehmen

Packen Sie die uramdisk mit folgenden Befehlen:

find ./ | cpio -H newc -o > ../newinitrd
cd ..
gzip newinitrd
mkimage -A arm -O linux -C gzip -T ramdisk -n "My Android Ramdisk Image" -d newinitrd.gz uInitrd-new
13
tripler

Versuchen Sie diese Site: http://bootloader.wikidot.com/linux:boot:Android Lesen Sie den Abschnitt unten: • Das Android-Startabbild: boot.img Unpacken, Boot-Image neu packen: http://Android-dls.com/wiki/index.php?title=HOWTO:_Unpack%2C_Edit%2C_and_Re-Pack_Boot_Images#Background

11
John

Eine Reihe von Android-Geräten enthält Code, um Root-Änderungen an den Systemdateien zu verhindern. Dies geschieht mithilfe der Wiederherstellungspartition. Beim Neustart stellen sie im Grunde die Systempartition mithilfe des Wiederherstellungsabbilds wieder her. Wenn Ihr System dies tut, können Sie keine dauerhaften Änderungen vornehmen. Am besten könnten Sie etwas anschließen, das nach dem Neustart ausgeführt wird, um die Änderung erneut anzuwenden. In CyanogenMod hatten sie Haken in der init.rc, um die gefundenen sdcard-Skripte auszuführen. Vielleicht können Sie eine App oder ein Widget erstellen, um dann ein Skript zu starten, um die erforderlichen Mods mithilfe eines Setuid-Stammskripts von der Datenpartition aus zu erstellen. Ohne Ihr eigenes ROM zu bauen, sind Sie in diesem Bereich ziemlich eingeschränkt.

Möglicherweise können Sie das Wiederherstellungsabbild abrufen und versuchen, es auszupacken. Nehmen Sie die Änderungen vor, packen Sie es erneut und blinken Sie es erneut. Stellen Sie jedoch sicher, dass Sie sich mit Fastboot wiederherstellen können, bevor Sie dies versuchen.

10
patthoyts

Beim Booten eines Android-Systems entpackt uboot einen speziellen komprimierten Ball von Dateien in Ihrer Boot-Partition mit dem Namen 'uRamdisk' in den RAM-Speicher und definiert diese Dateien als das Root-Verzeichnis des Systems. uRamdisk enthält normalerweise eine Reihe von Verzeichnissen (System, Daten, Medien usw.), die als Mountpunkte für Partitionen dienen, die die darin enthaltenen Dateien enthalten, aber auch einige grundlegende Dateien enthalten, die für Ihr System von entscheidender Bedeutung sind, einschließlich der binären Init-Datei und des Startvorgangs Skripte wie init.rc.

wenn Sie die init.rc bearbeiten, haben Sie gerade die nicht gepackte Kopie von init.rc bearbeitet, die sich in Ihrem RAM befindet. Um sie dann wirklich zu ändern, müssen Sie Ihre uRamdisk kopieren, extrahieren, die init.rc von dort aus bearbeiten, die uRamdisk erneut packen und dann die neue durch die alte in/boot ersetzen.

Versuchen Sie, die Skripts 'xuramdisk' und 'mkuramdisk' nachzuschlagen. Diese machen den Vorgang sehr einfach.

10
enthdegree

Ihre Root-Partition (in der /init.rc lebt) ist eine RAM-Disk, die aus einer initrd-Datei entpackt und bei jedem Start Ihres Geräts angehängt wird. Alle von Ihnen vorgenommenen Änderungen betreffen nur die Ramdisk und gehen beim nächsten Neustart verloren.

Wenn Sie die initrd-Datei erhalten können, können Sie sie in Ihr Linux-Host-System einbinden, die Dateien dort ändern, die Bereitstellung aufheben und sie auf Ihr Android zurückschreiben.

Die initrd-Datei ist in einer eigenen Partition auf dem Gerät vorhanden. Wenn Sie herausfinden können, um welche Partition es sich handelt, können Sie sie vom Gerät auf den Host laden, mounten, ändern und in das Gerät zurückschreiben. Davon sprach der Dreier oben.

Im Allgemeinen ändern boot.img nur Systementwickler. Wenn Sie das gesamte Android-System erstellen, haben Sie Zugriff auf den erforderlichen Quellcode. Mein Workflow dafür sieht so aus:

# Modify init.rc
m -j8 bootimage_signed
adb reboot bootloader
fastboot flash boot $OUT/boot.img
fastboot reboot
5
Edward Falk

Ich weiß nicht, ob Sie immer noch versuchen, aber ohne Ihr genaues Gerät zu kennen, kann Ihnen niemand eine genaue Antwort geben. 

Versuchen Sie, ein dd image von all Ihren internen Partitionen zu nehmen, und verwenden Sie einige Skripts wie die, die in der Android-Küche in Xda-Foren enthalten sind. Ihre Wiederherstellungs- und Startpartitionen verfügen beide über eine RAM-Disk. Die Wahrscheinlichkeit, dass Sie init.rc in boot.img nicht ändern möchten, ist nicht die Wiederherstellung, es sei denn, Sie möchten nur, dass die Änderungen im Wiederherstellungsmodus vorhanden sind. 

Die Unyaffs-Sache gilt nicht für alle Geräte und die meisten Geräte verfügen über unterschiedliche Partitionslayouts. Sie müssen also herausfinden, was Boot ist und um welche Art von FS es sich handelt. Wenn Sie Ihre Gerätespezifikationen angeben, erhalten Sie möglicherweise eine bessere Antwort.

4
user1658800

Bitte beachten Sie, dass es möglicherweise einfacher ist, eine Anwendung wie Scripter zum Starten eines Skripts zur Startzeit zu verwenden, als diese Datei zu ändern.

Bevor Sie die Anweisungen von @ tripler befolgen, benötigen Sie eine Datei mit dem Namen boot.img, die entpackt werden kann (auf einem gerooteten Android-Gerät ausführen, ohne Root getestet):

dd if=/dev/block/platform/<someplatform>/by-name/boot of=/sdcard/boot.img

Verbinden Sie dann Ihr Android mit Ihrem Computer und kopieren Sie die boot.img-Datei von dort.

Skript: 

http://linuxclues.blogspot.ca/2012/11/split-bootimg-python-Android.html

Hier ist eine modifizierte, übersichtliche Version der Tripler-Anweisungen (vorausgesetzt, boot.img ist in tmp):

cd /tmp
mkdir fs
# Now use the linked script above to split the boot.img file into ramdisk.gz and kernel
python split_boot_img.py -i boot.img -o parts
cd fs
gunzip -c ../parts/ramdisk.gz | cpio -id
# make changes to init.rc

An diesem Punkt müssen Sie den boot.img vor dem erneuten Flashen erneut zusammenbauen, was gerätespezifisch sein wird. Kann dir nicht helfen, sorry!

0
Mark Yisri