Make persistent changes to init.rc

后端 未结 8 2089
没有蜡笔的小新
没有蜡笔的小新 2020-12-07 22:39

I want to change the init.rc file of an android pad. But after I change it and reboot the system, the original init.rc comes back.

How can

相关标签:
8条回答
  • 2020-12-07 23:06

    Your root partition (where /init.rc lives) is a ramdisk which is unpacked from an initrd file and mounted every time your device boots. Any changes you make are to the ramdisk only, and will be lost on the next reboot.

    If you can get the initrd file, you can mount it on your Linux host system, modify the files there, unmount it, and write it back to your Android.

    The initrd file exists in its own partition on the device. If you can figure out which partition it is, you can grab it from the device onto your host, mount it, modify it, and write it back to the device. This is what tripler was talking about above.

    In general, modifying boot.img is something that only system developers do. If you're building the entire Android system, you'll have access to the necessary source code. My workflow for this looks like this:

    # Modify init.rc
    m -j8 bootimage_signed
    adb reboot bootloader
    fastboot flash boot $OUT/boot.img
    fastboot reboot
    
    0 讨论(0)
  • 2020-12-07 23:06

    Please note that it may be easier for you to use an app like Scripter to run a script at boot time than modify this file.

    Before following @tripler's instructions above you need a file called boot.img which can be extracted by (run on rooted Android device, untested without root):

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

    Then connect your Android to your computer and copy the boot.img file from there.

    Script:

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

    Here is a modified, easier to see version of tripler's instructions (assuming boot.img is in 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
    

    At that point you will have to rebuild the boot.img back together before reflashing, which will be device-specific. Can't help you with that, sorry!

    0 讨论(0)
  • 2020-12-07 23:06

    You have to edit/change the init.rc before building your Android pad file system. This is the preferred way, and always works.

    0 讨论(0)
  • 2020-12-07 23:11

    Unpack the uramdisk using following command in host PC(Linux)

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

    sdb1 is partion where uramdisk/uInitrd resides.

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

    At this point running the command file initrd should show:

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

    Make changes to init.rc

    Pack uramdisk using following commands:

    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
    
    0 讨论(0)
  • 2020-12-07 23:12

    A number of Android devices include code to prevent root modifications to the system files. The way this is done is by using the recovery partition. On reboot, they basically restore the system partition using the recovery image. If your system is doing that then you cannot make persistent changes - the best you could do would be to hook up something to run after reboot to re-apply your change. In CyanogenMod they had hooks in the init.rc to run sdcard scripts if found. Perhaps you can create an app or widget to then launch a script to make the mods required using a setuid root script from the data partition. Without building your own ROM you are quite restricted in this area.

    Possibly you could fetch the recovery image and try unpacking that, making your changes and repacking and flashing it. But make sure you can recover with fastboot before you try this.

    0 讨论(0)
  • 2020-12-07 23:15

    Try this site: http://bootloader.wikidot.com/linux:boot:android Read the section at the bottom: •The Android boot image: boot.img ◦Unpack, re-pack boot image: http://android-dls.com/wiki/index.php?title=HOWTO:_Unpack%2C_Edit%2C_and_Re-Pack_Boot_Images#Background

    0 讨论(0)
提交回复
热议问题