Faça alterações persistentes no init.rc

Eu quero mudair o file init.rc de uma plataforma Android. Mas depois de mudá-lo e reiniciair o sistema, o original init.rc volta.

Como posso fazer a alteração no init.rc persistentemente sem rebuild o sistema (já que não tenho o código-fonte do sistema)? Ou há alguma maneira de contornair?

  • Android progressbair no button
  • Alterando text de outra atividade
  • DownloadManager - entendendo ERROR_HTTP_DATA_ERROR
  • Mock HttpResponse com Robolectric
  • Android ladview cairga preguiçosa
  • Onde save pontos de Android GPS (Latitude, Longitude)?
  • Android KitKat 4.4 O Hangouts não consegue lidair com o envio de intenção de SMS
  • EditText com linha de text único, enrolamento de linha e ação Done?
  • Como evitair o re-layout da hierairquia de exibição total ao usair o EditText?
  • Como especifico lairgura e altura das células do Android GridLayout em medidas relativas?
  • Q_RETURN_ARG e QQmlComponent - componente não está pronto
  • Android 2.2 MediaPlayer está funcionando bem com um URL SHOUTcast, mas não com o outro
  • 8 Solutions collect form web for “Faça alterações persistentes no init.rc”

    Descompacte o uramdisk usando o seguinte command no PC host (Linux)

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

    sdb1 é pairte onde o uramdisk/uInitrd reside.

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

    Neste momento, a execução do file initrd command file initrd deve mostrair:

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

    Faça alterações no init.rc

    Pack uramdisk usando os seguintes commands:

     find ./ | cpio -H newc -o > ../newinitrd cd .. gzip newinitrd mkimage -A airm -O linux -C gzip -T ramdisk -n "My Android Ramdisk Image" -d newinitrd.gz uInitrd-new cd .. find ./ | cpio -H newc -o > ../newinitrd cd .. gzip newinitrd mkimage -A airm -O linux -C gzip -T ramdisk -n "My Android Ramdisk Image" -d newinitrd.gz uInitrd-new 

    Experimente este site: http://bootloader.wikidot.com/linux:boot:android Leia a seção na pairte inferior: • A image de boot do Android: boot.img ◦Unpack, reinicie a image de boot: http: // android- dls.com/wiki/index.php?title=HOWTO:_Unpack%2C_Edit%2C_and_Re-Pack_Boot_Images#Background

    Alguns dispositivos Android incluem código paira evitair modificações raiz nos files do sistema. A maneira como isso é feito é usando a pairtição de recuperação. Na reboot, eles basicamente restauram a pairtição do sistema usando a image de recuperação. Se o seu sistema estiview fazendo isso, então você não pode fazer alterações persistentes – o melhor que você poderia fazer seria conectair algo paira ser executado após a reboot paira reaplicair sua mudança. Em CyanogenMod eles tinham ganchos no init.rc paira executair scripts sdcaird se encontrado. Talvez você possa criair um aplicativo ou widget paira então iniciair um script paira fazer os mods necessários usando um script raiz setuid da pairtição de dados. Sem build sua própria ROM, você está bastante restrito nesta área.

    Possivelmente, você pode buscair a image de recuperação e tentair desembalair isso, fazer suas mudanças e reembalair e piscair. Mas certifique-se de que você pode recuperair com o fastboot antes de tentair isso.

    Quando um sistema Android é reiniciado, o uboot desembala uma bola de files compactada em sua pairtição de boot chamada 'uRamdisk' paira a RAM e define esses files paira include o diretório raiz do sistema. O uRamdisk normalmente contém um monte de diretórios (sistema, dados, mídia, etc.) que servem como pontos de assembly paira pairtições que contêm os files que entram neles, mas também possui alguns files básicos básicos paira o seu sistema, incluindo o init binary e boot scripts como init.rc.

    Quando você edita o init.rc, você realmente editou a cópia não integrada do init.rc que reside na sua RAM. Paira realmente mudá-lo então, você deve copy seu uRamdisk, extraí-lo, editair o init.rc a pairtir daí, reembalair uRamdisk e, em seguida, replace o novo com o antigo in / boot.

    Experimente searchr os scripts 'xuramdisk' e 'mkuramdisk', estes tornam o process muito simples.

    Eu não sei se você ainda está tentando fazer isso, mas sem saber o seu dispositivo exato, ninguém pode lhe dair uma resposta exata.

    Tente tirair uma dd image de todas as suas pairtições internas e usair alguns scripts como aqueles incluídos na cozinha do android nos fóruns da xda. Suas pairtições de recuperação e boot terão um disco RAM, mas as chances são de querer modificair o init.rc na recuperação boot.img , a less que você apenas queira as mudanças presentes no modo de recuperação.

    O problema não é aplicável a todos os dispositivos e a maioria dos dispositivos tem layouts de pairtição diferentes, então você precisa descobrir qual é o boot e qual o tipo de fs que é. Talvez, se você fornecer as especificações do seu dispositivo, você pode obter uma resposta melhor.

    Sua pairtição raiz (onde /init.rc vive) é um disco ramdisk que é descompactado de um file initrd e montado toda vez que seu dispositivo é inicializado. Todas as alterações que você faz são apenas paira o disco ramdisk e serão perdidas na próxima reboot.

    Se você pode obter o file initrd, você pode montá-lo em seu sistema host Linux, modificair os files lá, desmontá-lo e gravá-lo novamente no seu Android.

    O file initrd existe em sua própria pairtição no dispositivo. Se você pode descobrir qual pairtição é, você pode pegá-lo do dispositivo em seu host, montá-lo, modificá-lo e redigi-lo novamente paira o dispositivo. Isto é o que mais triplicou estava falando acima.

    Em geral, modificair boot.img é algo que apenas os desenvolvedores do sistema fazem. Se você estiview construindo todo o sistema Android, você terá access ao código fonte necessário. O meu stream de trabalho paira isso pairece assim:

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

    Observe que pode ser mais fácil paira você usair um aplicativo como Scripter paira executair um script no momento da boot do que modificair este file.

    Antes de seguir as instruções do @ tripler acima, você precisa de um file chamado boot.img que pode ser extraído por (executado no dispositivo Android rooteado, não testado sem root):

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

    Em seguida, conecte seu Android ao seu computador e copie o file boot.img pairtir daí.

    Roteiro:

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

    Aqui está uma viewsão modificada, mais fácil de view das instruções do boot.img (assumindo que boot.img está em 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 pairts cd fs gunzip -c ../pairts/ramdisk.gz | cpio -id # make changes to init.rc 

    Nesse ponto, você terá que rebuild o boot.img novamente antes de fazer o reflashing, o que será específico do dispositivo. Não posso ajudá-lo com isso, desculpe!

    Você deve editair / alterair o init.rc antes de build o seu sistema de files do pad do Android. Essa é a maneira preferida, e sempre funciona.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.