Вносить постоянные изменения в init.rc - PullRequest
36 голосов
/ 19 марта 2012

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

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

Ответы [ 8 ]

12 голосов
/ 04 августа 2012

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

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

sdb1 - это раздел, в котором находится 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
10 голосов
/ 04 мая 2012

Попробуйте этот сайт: 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

10 голосов
/ 19 марта 2012

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

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

9 голосов
/ 21 мая 2012

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

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

Попробуйте поискатьСценарии xuramdisk и mkuramdisk делают этот процесс очень простым.

4 голосов
/ 30 января 2015

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

Если вы можете получить файл 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
3 голосов
/ 10 сентября 2012

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

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

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

0 голосов
/ 29 мая 2017

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

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

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

0 голосов
/ 19 марта 2012

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

...