web-dev-qa-db-fra.com

Apporter des modifications persistantes à init.rc

Je veux changer le fichier init.rc d'un pad Android. Mais après avoir modifié le système et redémarré le système, le init.rc d'origine est renvoyé.

Comment puis-je modifier le init.rc de manière persistante sans reconstruire le système (puisque je n'ai pas le code source du système)? Ou est-il possible de contourner le problème?

36
user1278251

Décompressez le uramdisk en utilisant la commande suivante dans Host PC (Linux)

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

sdb1 est une partie où uramdisk/uInitrd réside.

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

À ce stade, l'exécution de la commande file initrd devrait afficher:

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

Apporter des modifications à init.rc

Pack uramdisk en utilisant les commandes suivantes:

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

Essayez ce site: http://bootloader.wikidot.com/linux:boot:Android Lisez la section ci-dessous: • L'image de démarrage Android: boot.img .◦Unpack, reconditionnez l'image de démarrage: http://Android-dls.com/wiki/index.php?title=HOWTO:_Unpack%2C_Edit%2C_and_Re-Pack_Boot_Images#Background

11
John

Un certain nombre de périphériques Android incluent du code pour empêcher les modifications des fichiers système par la racine. Pour ce faire, utilisez la partition de récupération. Au redémarrage, ils restaurent la partition système à l’aide de l’image de récupération. Si votre système le fait, vous ne pouvez pas apporter de modifications persistantes. Le mieux que vous puissiez faire serait de connecter quelque chose à exécuter après le redémarrage pour réappliquer votre modification. Dans CyanogenMod, ils avaient des crochets dans init.rc pour exécuter les scripts sdcard s’ils le trouvaient. Vous pouvez peut-être créer une application ou un widget pour lancer ensuite un script afin de rendre les mods requis à l'aide d'un script racine setuid de la partition de données. Sans construire votre propre ROM, vous êtes assez restreint dans ce domaine.

Vous pouvez éventuellement récupérer l'image de récupération et essayer de la décompresser, de la modifier, de la remballer et de la faire clignoter. Mais assurez-vous que vous pouvez récupérer avec fastboot avant d’essayer.

10
patthoyts

Quand un système Android démarre, uboot décompresse dans la RAM une boule de fichiers compressée spéciale de votre partition de démarrage appelée «uRamdisk», et définit ces fichiers pour qu'ils constituent le répertoire racine du système. uRamdisk contient normalement de nombreux répertoires (système, données, supports, etc.) qui servent de points de montage pour les partitions contenant les fichiers qui y sont stockés, mais contiennent également des fichiers très basiques essentiels à votre système, notamment les fichiers binaire init des scripts comme init.rc.

lorsque vous modifiez init.rc, vous venez en fait de modifier la copie non compressée d’init.rc qui réside dans votre RAM. Pour vraiment le changer, vous devez copier votre uRamdisk, l'extraire, éditer le fichier init.rc à partir de là, reconditionner uRamdisk puis remplacer le nouveau par l'ancien dans/boot.

Essayez de rechercher les scripts 'xuramdisk' et 'mkuramdisk', ceux-ci rendent le processus très simple.

10
enthdegree

Votre partition racine (où /init.rc habite) est un disque mémoire qui est décompressé à partir d'un fichier initrd et monté à chaque démarrage de votre périphérique. Toutes les modifications que vous apportez concernent uniquement le disque mémoire et seront perdues lors du prochain redémarrage.

Si vous pouvez obtenir le fichier initrd, vous pouvez le monter sur votre système Linux Host, y modifier les fichiers, le démonter et l'écrire sur votre Android.

Le fichier initrd existe dans sa propre partition sur le périphérique. Si vous pouvez déterminer quelle partition il s'agit, vous pouvez la récupérer du périphérique sur votre hôte, la monter, la modifier et l'écrire sur le périphérique. C'est ce dont parlait tripler ci-dessus.

En général, la modification de boot.img est quelque chose que seuls les développeurs système font. Si vous construisez l'ensemble du système Android, vous aurez accès au code source nécessaire. Mon flux de travail pour cela ressemble à ceci:

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

Je ne sais pas si vous essayez toujours de le faire, mais sans connaître votre appareil exact, personne ne peut vous donner une réponse exacte. 

Essayez de prendre un dd image de toutes vos partitions internes et utilisez des scripts tels que ceux fournis avec Android kitchen sur les forums xda. Vos partitions de récupération et d’amorçage disposeront toutes deux d’un disque virtuel, mais vous souhaitez probablement modifier le init.rc dans le boot.img pas récupération, à moins que vous ne souhaitiez que les modifications présentes en mode de récupération. 

La fonctionnalité unyaffs ne s'applique pas à tous les périphériques et la plupart des périphériques ont des dispositions de partition différentes. Vous devez donc déterminer le type de démarrage et son type. Peut-être que si vous donnez les spécifications de votre appareil, vous obtiendrez une meilleure réponse.

4
user1658800

Veuillez noter qu'il peut être plus facile pour vous d'utiliser une application telle que Scripter pour exécuter un script au démarrage plutôt que de modifier ce fichier.

Avant de suivre les instructions de @ tripler ci-dessus, vous devez disposer d'un fichier appelé boot.img pouvant être extrait par (exécuté sur un périphérique Android rooté, non testé sans racine):

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

Ensuite, connectez votre Android à votre ordinateur et copiez le fichier boot.img à partir de là.

Scénario: 

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

Voici une version modifiée, plus facile à voir des instructions de tripler (en supposant que boot.img est dans 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

À ce stade, vous devrez reconstituer le boot.img ensemble avant de procéder à une nouvelle présentation, qui sera spécifique à l'appareil. Je ne peux pas vous aider avec ça, désolé!

0
Mark Yisri