• How to edit the init.rc in android


     
    We have to perform the following steps to edit your init.rc successfully:
     
    1.      Download the BOOT (RamDisk) image from your Android device
    2.       Extract the boot image into RAMDISK and kernel
    3.       Extract the RAMDISK to get your edit init.rc to be modify
    4.       Edit the init.rc file
    5.       Re-Pack the RAMDISK
    6.       Re-pack the BOOT image with RAMDISK and kernel
    7.       Flash the BOOT image into your device
    8.       Restart and now your device running with your edited init.rc file
     
    Requirements for perform this tasks :
     
    1.       UBUNTU OS above 10.04 version ( if you are using windows machine you can use virtual Ubuntu OS like VMware, etc.)
    2.       Andorid SDK for ADB connection
    3.       Extract tools for extract the BOOT image and repack BOOT image.
     
    Let we see detailed procedure of each steps,
     
    1.Download the BOOT image from your Android device:
     
                    Basically Android device have three types of partitions these are NAND, mtd, and mmcblck.
    Reputed brand devices have NAND and mtd, some China brand device have mmcblk, which means OS stored in mmc (memory card) card. But in the memory card you can’t find the init.rc file and you can see other files except init.rc  if you takeout the mmc and connect to your PC over card reader.
                    Let’s start the operation, connect your device with PC( windows or Ubuntu)  and check whether its discoverable by ADB or not.  Change the working directory into android SDK /platform-tools folder then execute
     
                    # adb devices
     
    If you can see your device, then you can proceed with further steps. If you couldn’t find your device download the ADB USB drivers and install on your PC.
    Open the device shell by executing this command
     
                    # adb shell
     
    Then we have to find what kind of partitions your device have. It can be by this following command
     
                    # cat /proc/partitions
     
    Then you will get output like this       
          
    cat /proc/partitions
    major minor  #blocks  name
     
      31        0      13312  mtdblock0
      31        1       2560   mtdblock1
      31        2        320    mtdblock2
      31        3         64      mtdblock3
      31        4         64      mtdblock4
      31        5         64      mtdblock5
      31        6      16384   mtdblock6
      31        7      16384   mtdblock7
      31        8      16384   mtdblock8
      31        9      16384   mtdblock9
      31       10     524288 mtdblock10
      31       11     524288 mtdblock11
      31       12    1048576 mtdblock12
      31       13    2023424 mtdblock13

     mtdblock shows you that your device contain mtd partitions .

    If your device have NAND partitions your will get NANDA, NANDB, NANDC or NAND0, NAND1 etc. like this.

    If your device have mmc partitions you will get mmcblk1, mmcblk2, etc. 

    Our next process is find out where our BOOT image stored among these partitions.
     
    If its mtd partitions:
     
     # cat /proc/mtd
    dev:  size  erasesize  name
    mtd0: 00d00000 00010000 "filesystem-SF"
    mtd1: 00280000 00010000 "kernel-SF"
    mtd2: 00050000 00010000 "u-boot-SF"
    mtd3: 00010000 00010000 "u-boot env. cfg. 1-SF"
    mtd4: 00010000 00010000 "u-boot env. cfg. 2-SF"
    mtd5: 00010000 00010000 "w-load-SF"
    mtd6: 01000000 00200000 "logo"
    mtd7: 01000000 00200000 "boot"
    mtd8: 01000000 00200000 "recovery"
    mtd9: 01000000 00200000 "misc"
    mtd10: 20000000 00200000 "system"
    mtd11: 20000000 00200000 "cache"
    mtd12: 40000000 00200000 "data"
    mtd13: 17b800000 00200000 "LocalDisk"

                     Hence our boot partition is mtd7, we have to download the BOOT image from that partitions.  

     
    If its NAND partitions:
     
    # cat /proc/mtd
    dev:  size  erasesize  name
    /boot                    emmc                   /dev/block/nandc
    /bootloader       emmc                   /dev/block/nanda
    /cache                  ext4                       /dev/block/nandh
    /data                     ext4                       /dev/block/nande
    /emmc                 vfat                        /dev/block/nandi
    /recovery            emmc                   /dev/block/nandg
    /misc                     emmc                   /dev/block/nandf
    /sdcard                 vfat                        /dev/block/mmcblk0p1                /dev/block/mmcblk0
    /sd-ext                 auto                       /dev/block/mmcblk0p2
    /system                               ext4                       /dev/block/nandd
     
    Hence our boot partition is NANDC, we have to download the BOOT image from this partition.
     
     
    Download the image from boot partitions:
     
    Execute the following command to pack your boot image.
     
                    # cat /dev/block/mtdx > /mnt/sdcard/boot.img
     
    x- Replace the x with your boot partition number.
     
    In our case this command will be
     
                    # cat /dev/block/ mtdblock7  >  /mnt/sdcard/boot.img
                   
                    # cat /dev/block/ nandc  > /mnt/sdcard/boot.img
     
    Now your boot image got ready. you can move this boot.img to your UBUNTU PC  for further action.


    Come out from your terminal window and pull the boot.img file to your PC over ADB
     
                    # adb pull /mnt/sdcard/boot.img  <PC destination location> 
     
    But all devices wouldn’t show this message for this command, Its works for mtd partitions. some devices only show the following information
     
                    # cat /proc/mtd
                    dev:  size  erasesize  name
     
    Hence we need to go for other choice. The other choice is below            
     
                    # mount
     
    rootfs on / type rootfs (rw)
    tmpfs on /dev type tmpfs (rw,nosuid,relatime,mode=755)
    devpts on /dev/pts type devpts (rw,relatime,mode=600)
    proc on /proc type proc (rw,relatime)
    sysfs on /sys type sysfs (rw,relatime)
    tmpfs on /mnt/asec type tmpfs (rw,relatime,mode=755,gid=1000)
    tmpfs on /mnt/obb type tmpfs (rw,relatime,mode=755,gid=1000)
    /dev/block/mmcblk0p5 on /system type ext2 (rw,relatime)
    /dev/block/mmcblk0p6 on /data type ext2 (rw,nosuid,nodev,relatime,errors=continu
    e)
    /dev/block/mmcblk0p7 on /cache type ext2 (rw,nosuid,nodev,relatime,errors=contin
    ue)
    none on /proc/bus/usb type usbfs (rw,relatime,devmode=666)
    /dev/block/vold/179:1 on /mnt/sdcard type vfat (rw,dirsync,nosuid,nodev,noexec,r
     
            From the output you can see some partitions name and its file system purpose.  Hence you can omit this partitions because its allotted for filesystem not for boot image. And then we have to try trail and error method. which means you have convert other possible partitions as part1.img, part2.img etc like this. Then we can find which one is boot image while we extracting the boot images by extract tool.
     
     
    2.Extract the boot image into RAMDISK and kernel
     
                    You can download the extract tools below. In the attachment copy the unmkbootimg file to your boot.img location and execute the following command
     
                    # ./unmkbootimg boot.img
     
    This command will extract your boot.img into ramdisk and kernel and another one important thing is after extracting you will get the command for recreate the boot.img with this ramdisk and kernel  in terminal so please note it.
     
    If you are not using unmkbootimg file for extracting the boot image means you have to do one important work that is, you have to note your boot image BASE address its very important to recreate your boot image with edited init.rc. If you recreate the boot image with wrong BASE address your device won’t get boot So be careful.
     
    Now you have ramdisk in your hand 
     
     
    3.Extract the RAMDISK to get your edit init.rc to be modify
     
                   Now the time for extract your ramdisk to get init.rc. 
    According to this do the following things
                    create the folder name it as newramdisk
                    Inside the newramdisk folder create another folder and name it as oldramdisk.
                    Copy your ramdisk into your oldramdisk folder
                    Goto the oldramdisk in terminal
                    Execute the following commands to extract your ramdisk
     
                    # gzip –dc initramfs.cpio.gz | cpio –i
     
                                    Now you can find extracted files including init.rc, in same directory. Now you can edit init.rc and other files if you need.
     
    4.Re-Pack the RAMDISK
                   
                    After edit the init.rc you have to re-pack the ramdisk. Execute the following commands to re-pack the ramdisk. Before you giving this command you have to delete your initramfs.cpio.gz  file, because the following command compress the all files inside the folder.
                   
                    # find . | cpio –o –H newc | gzip > ../initramfs.cpio.gz
     
                    This command create your new ramdisk into your newramdisk folder. You can check this in newramdisk location.
     
    Now you have new edited ramdisk file in your hand.
     
    5.Re-pack the boot image.
     
                    Now you have newramdisk + kernel file + command  to create the boot image for your device.
    Create the final folder and place the newramdisk and kernel file and change the working directory into this folder. Then you have to give the mkbootimg command to create your boot image.
                  Before you giving this command you have to install mkbootimg binary in your UBUNTU host system. This binary is attached with extract tools.
     
                    # mkbootimg  --kernel kernel.gz –ramdisk initramfs.cpio.gz –o new_boot.img
     
    Note: its just a example command execute the command which one you got while extracting the boot image because that command only generated with your BASE address
     
    This command create the boot image to your device with your BASE address.
     
     
    6.Flash the BOOT image into your device
     
                  Now you have create the boot image with edited init.rc and its ready to flash into your device.
    Push the new_boot.img file into your device over ADB
     
                  # adb push <source_location/new_boot.img> /mnt/sdcard
     
    Then you can see the new_boot.img file into your /mnt/sdcard location
    Next step is final step, that is flash the image into your device
     
                  # cat /mnt/sdcard/new_boot.img  > /dev/block/nandc
     
    Note: nandc is your boot partition, from where you got your boot image. Replace the nandc with your boot partition name.
     
    Now you had edited your init.rc then reboot the device. Enjoy with your modified init.rc
     
    Attachments: 
    Download the Extract Tools..!!
     
    If you happen to face any problem during this process feel free to comment here...

    If you think its really helpful for you please post your comments here..:)                 
  • 相关阅读:
    伪句柄
    WM_NCACTIVE
    怎么让模态对话框最小化时,主窗口也最小化
    CMap和CArray中ARG_
    看着嫦娥2号上去,心里激动不已
    Qt中使两个部件同步,这里为spin和slider
    memcpy 和strcpy的区别
    如何在linux内核中读写文件
    Could not find *****/adb.exe!的解决方法(android sdk太新了?**#¥)
    加入了HTML特点的Qt,出来的效果不错哟
  • 原文地址:https://www.cnblogs.com/shangdawei/p/4514221.html
Copyright © 2020-2023  润新知