Подтвердить что ты не робот

Сделать постоянные изменения в init.rc

Я хочу изменить файл init.rc на панели Android. Но после того, как я его сменил и перезагрузил систему, возвращается оригинал init.rc.

Как я могу сделать изменение в init.rc настойчиво, не перестраивая систему (поскольку у меня нет исходного кода системы)? Или есть способ обойти?

4b9b3361

Ответ 1

Распакуйте uramdisk, используя следующую команду на хост-компьютере (Linux)

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

sdb1 является partion, где uramdisk/uInitrd находится.

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

В этот момент команда file initrd должна показать:

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

Внесите изменения в init.rc

Упакуйте uramdisk, используя следующие команды:

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

Ответ 3

В число Android-устройств входит код для предотвращения внесения изменений в системные файлы. То, как это делается, - это использовать раздел восстановления. При перезагрузке они в основном восстанавливают системный раздел с помощью образа восстановления. Если ваша система делает это, вы не можете делать постоянные изменения - лучшее, что вы могли бы сделать, - это подключить что-то для запуска после перезагрузки, чтобы повторно применить изменения. В CyanogenMod у них были крючки в init.rc для запуска скриптов sdcard, если они были найдены. Возможно, вы можете создать приложение или виджет, после чего запустите script, чтобы сделать моды, требуемые с помощью корня setuid script из раздела данных. Не создавая свой собственный ПЗУ, вы в этом районе довольно ограничены.

Возможно, вы можете получить образ восстановления и попробовать распаковать его, внести изменения и переупаковать и мигать. Но убедитесь, что вы можете восстановить с помощью fastboot, прежде чем попробовать это.

Ответ 4

Когда система андроидов загружается, uboot распаковывает специальный сжатый шар файлов в загрузочном разделе "uRamdisk" в ОЗУ и определяет эти файлы в качестве корневого каталога системы. Обычно uRamdisk содержит кучу каталогов (системы, данных, мультимедиа и т.д.), которые служат в качестве точек монтирования для разделов, содержащих файлы, которые входят в них, но также имеют некоторые очень простые файлы, жизненно важные для вашей системы, включая инициализацию и запуск таких как init.rc.

когда вы редактируете init.rc, вы фактически только что отредактировали неупакованную копию init.rc, которая находится в вашей ОЗУ. Чтобы действительно изменить его, вы должны скопировать свой uRamdisk, извлечь его, отредактировать init.rc оттуда, переупаковать uRamdisk и затем заменить новый на старый в /boot.

Попробуйте найти сценарии "xuramdisk" и "mkuramdisk", что делает процесс очень простым.

Ответ 5

Я не знаю, пытаетесь ли вы все это сделать, но не зная своего точного устройства, никто не может дать вам точный ответ.

Попробуйте взять dd image всех ваших внутренних разделов и использовать некоторые скрипты, подобные тем, которые включены в кухню Android на форумах xda. У ваших разделов восстановления и загрузки оба будут иметь диск ram, но вы хотите изменить init.rc в boot.img не восстановление, если только вы не хотите, чтобы изменения присутствовали в режиме восстановления.

Несвязанная вещь не относится ко всем устройствам, и большинство устройств имеют разные макеты разделов, поэтому вам нужно выяснить, какая загрузка и какой тип fs она есть. Возможно, если вы дадите спецификации устройства, вы сможете получить лучший ответ.

Ответ 6

Ваш корневой раздел (где/init.rc живет) - это ramdisk, который распаковывается из файла initrd и монтируется каждый раз, когда ваше устройство загружается. Любые изменения, которые вы делаете, относятся только к ramdisk и будут потеряны при следующей перезагрузке.

Если вы можете получить файл initrd, вы можете смонтировать его на своей хост-системе Linux, изменить там файлы, отключить его и записать на свой Android.

Файл initrd существует в своем собственном разделе на устройстве. Если вы можете определить, какой раздел он есть, вы можете захватить его с устройства на свой хост, смонтировать его, изменить и записать обратно на устройство. Это то, о чем говорил триплер выше.

В общем, изменение boot.img - это то, что делают только разработчики системы. Если вы строите всю систему Android, у вас будет доступ к нужному исходному коду. Мой рабочий процесс для этого выглядит следующим образом:

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

Ответ 7

Обратите внимание, что вам может быть проще использовать такое приложение, как Scripter, для запуска script во время загрузки, чем для изменения этого файла.

Перед тем, как следовать приведенным выше инструкциям @tripler, вам понадобится файл под названием boot.img, который можно извлечь (запустить на корневом устройстве Android, непроверенный без root):

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

Затем подключите свой Android к компьютеру и скопируйте файл boot.img.

Script:

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

Ниже приведена измененная, более удобная для просмотра версия инструкций триплера (предполагается, что boot.img находится в 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

В этот момент вам придется перестроить boot.img назад, прежде чем повторять, что будет специфичным для устройства. Не могу с этим поделать, извините!

Ответ 8

Вы должны отредактировать/изменить init.rc, прежде чем создавать свою файловую систему Android. Это предпочтительный способ и всегда работает.