2012-03-19 2 views
33

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

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

+0

как вы сделали изменения в init.rc ?? потянув файл с помощью ADB ?? а затем нажав на устройство? –

+0

Да, с adb push и pull – user1278251

+0

есть ли у устройства разрешение root? –

ответ

-3

Перед созданием файловой системы Android-плеера вам необходимо отредактировать/изменить init.rc. Это предпочтительный способ и всегда работает.

+1

У меня нет исходного кода системы пэда, как я могу его создать? Есть ли способ решить эту проблему без восстановления системы? – user1278251

10

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

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

+0

Благодарим вас за информацию. Кажется, что этот метод восстановления используется этими двумя пэдами. Метод hook - это то, что я хочу сделать с init.rc, с которым я могу сделать некоторый контроль во время загрузки системы. Но восстановление предотвращает это. Если есть изображение восстановления, где оно? Как я могу его найти? – user1278251

+0

Если вы можете сделать резервную копию, используя nandroid, это один из способов получить изображение восстановления. В противном случае вы можете использовать dd и скопировать раздел восстановления в файл. После того как вы получите изображение раздела восстановления, вы сможете использовать unyaffs для его распаковки. Вы должны посмотреть, как создаются эти источники в Android, чтобы узнать, как переделать один из дерева файлов. – patthoyts

+0

попробовал с подсказкой: http: //android-dls.com/wiki/index.php? Title = HOWTO: _Unpack% 2C_Edit% 2C_and_Re-Pack_Boot_Images. Но восстановление img через «cat/dev/mtd/mtd1> mtd1.img» не удалось открыть unyaffs с ошибкой «файл с поврежденным изображением». Любое предложение? Благодаря! – user1278251

9

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

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

Попробуйте найти сценарии «xuramdisk» и «mkuramdisk», что упростит процесс.

13

Распаковка 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 
+1

Откуда вы знаете, что/dev/sdb1 есть где uramdisk/uInitrd? Когда я прикрепляю телефон, я вижу только шаблон sdcard в/dev/sdb. Как искать uramdisk? – melopsitaco

+0

/dev/sdb1 не существует на моем устройстве. Возможно, вам придется обсудить, как определить правильное блочное устройство, в котором загружается загрузочный образ. –

+1

Это зависит от устройства Android. Если ваше устройство внедрено, попробуйте выполнить «монтирование оболочки adb» для списка смонтированных файловых систем. Это даст вам несколько советов относительно того, где искать. –

4

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

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

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

4

Ваш корневой раздел (где /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 
+0

Я попытался сделать статическую ссылку для init.rc в sdcard (ln-s /sdcard/init.rc init.rc), так что изменение на init.rc будет проще, но это не сработало. Есть идеи ? – ransh

+0

Под «статической ссылкой» вы имели в виду жесткую ссылку? Вы не можете сделать это через файловые системы, поэтому вы должны быть связаны с другим файлом в вашем ramdisk. Опять же, это будет потеряно при следующей перезагрузке. Если вы сделали символическую ссылку, я предполагаю, что это была другая файловая система, которая, возможно, еще не была смонтирована, когда это было необходимо. В любом случае, я не думаю, что это сработает. Так или иначе, вам нужно изменить изображение init.rd. –

+0

@Edward у него нет доступа к исходному коду. –

0

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

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

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

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

Сценарий:

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

Смежные вопросы