Сделать постоянные изменения в init.rc
Я хочу изменить файл init.rc
на панели Android. Но после того, как я его сменил и перезагрузил систему, возвращается оригинал init.rc
.
Как я могу сделать изменение в init.rc
настойчиво, не перестраивая систему (поскольку у меня нет исходного кода системы)? Или есть способ обойти?
Ответы
Ответ 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
Ответ 2
Попробуйте этот сайт:
http://bootloader.wikidot.com/linux:boot:android
Прочтите раздел внизу:
• Загрузочный образ Android: boot.img
◦Упаковать, перезагрузить загрузочный образ: http://android-dls.com/wiki/index.php?title=HOWTO:_Unpack%2C_Edit%2C_and_Re-Pack_Boot_Images#Background
Ответ 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. Это предпочтительный способ и всегда работает.