乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      update.zip升級過程---updater-script腳本語法簡介以及執(zhí)行流程

       joy_chen 2013-09-30
      目前update-script腳本格式是edify,其與amend有何區(qū)別,暫不討論,我們只分析其中主要的語法,以及腳本的流程控制。

      一、update-script腳本語法簡介:

              我們順著所生成的腳本來看其中主要涉及的語法。

              1.assert(condition):如果condition參數(shù)的計算結(jié)果為False,則停止腳本執(zhí)行,否則繼續(xù)執(zhí)行腳本。

              2.show_progress(frac,sec):frac表示進(jìn)度完成的數(shù)值,sec表示整個過程的總秒數(shù)。主要用與顯示UI上的進(jìn)度條。

              3.format(fs_type,partition_type,location):fs_type,文件系統(tǒng)類型,取值一般為“yaffs2”或“ext4”。Partition_type,分區(qū)類型,一般取值為“MTD”或則“EMMC”。主要用于格式化為指定的文件系統(tǒng)。事例如下:format(”yaffs2”,”MTD”,”system”)。

              4.mount(fs_type,partition_type,location,mount_point):前兩個參數(shù)同上,location要掛載的設(shè)備,mount_point掛載點。作用:掛載一個文件系統(tǒng)到指定的掛載點。

              5.package_extract_dir(src_path,destination_path):src_path,要提取的目錄,destination_path目標(biāo)目錄。作用:從升級包內(nèi),提取目錄到指定的位置。示例:package_extract_dir(“system”,”/system”)。

              6.symlink(target,src1,src2,……,srcN):target,字符串類型,是符號連接的目標(biāo)。SrcX代表要創(chuàng)建的符號連接的目標(biāo)點。示例:symlink(“toolbox”,”/system/bin/ps”),建立指向toolbox符號連接/system/bin/ps,值得注意的是,在建立新的符號連接之前,要斷開已經(jīng)存在的符號連接。

              7.set_perm(uid,gid,mode,file1,file2,……,fileN):作用是設(shè)置單個文件或則一系列文件的權(quán)限,最少要指定一個文件。

              8.set_perm_recursive(uid,gid,mode,dir1,dir2,……,dirN):作用同上,但是這里同時改變的是一個或多個目錄及其文件的權(quán)限。

              9.package_extract_file(srcfile_path,desfile_paht):srcfile_path,要提取的文件,desfile_path,提取文件的目標(biāo)位置。示例:package_extract_file(“boot.img”,”/tmp/boot.img”)將升級包中的boot.img文件拷貝到內(nèi)存文件系統(tǒng)的/tmp下。

            10.write_raw_image(src-image,partition):src-image源鏡像文件,partition,目標(biāo)分區(qū)。作用:將鏡像寫入目標(biāo)分區(qū)。示例:write_raw_image(“/tmp/boot.img”,”boot”)將boot.img鏡像寫入到系統(tǒng)的boot分區(qū)。

            11.getprop(key):通過指定key的值來獲取對應(yīng)的屬性信息。示例:getprop(“ro.product.device”)獲取ro.product.device的屬性值。

           12. ui_print(String): 用于在Flash Mode要顯示的內(nèi)容

           13. delete(FilePath): 用于刪除文件的命令

           14. run_program(Shell, ScriptPath): 例如:run_program("/sbin/sh", "/system/bin/install.sh");

           15. umount(Path): 卸載文件系統(tǒng)

           16. cmdlist:

      1. is_mounted  
      2. unmount  
      3. format  
      4. show_progress  
      5. set_progress  
      6. delete  
      7. delete_recursive  
      8. package_extract_dir  
      9. package_extract_file  
      10. retouch_binaries  
      11. undo_retouch_binaries  
      12. symlink  
      13. set_perm  
      14. set_perm_recursive  
      15. getprop  
      16. file_getprop  
      17. write_raw_image  
      18. apply_patch  
      19. apply_patch_check  
      20. apply_patch_space  
      21. read_file  
      22. sha1_check  
      23. wipe_cache  
      24. ui_print  
      25. run_program  
      26. set_bootloader_env  

                

      二、updater-script腳本執(zhí)行流程分析:

                先看一下在測試過程中用命令make otapackage生成的升級腳本如下:

      1. assert(!less_than_int(1331176658, getprop("ro.build.date.utc")));  
      2. assert(getprop("ro.product.device") == "tcc8800" ||  
      3.        getprop("ro.build.product") == "tcc8800");  
      4. show_progress(0.500000, 0);  
      5. format("yaffs2", "MTD", "system");  
      6. mount("yaffs2", "MTD", "system", "/system");  
      7. package_extract_dir("recovery", "/system");  
      8. package_extract_dir("system", "/system");  
      9. symlink("busybox", "/system/bin/cp", "/system/bin/grep",  
      10.         "/system/bin/tar", "/system/bin/unzip",  
      11.         "/system/bin/vi");  
      12. symlink("toolbox", "/system/bin/cat", "/system/bin/chmod",  
      13.         "/system/bin/chown", "/system/bin/cmp", "/system/bin/date",  
      14.         "/system/bin/dd", "/system/bin/df", "/system/bin/dmesg",  
      15.         "/system/bin/getevent", "/system/bin/getprop", "/system/bin/hd",  
      16.         "/system/bin/id", "/system/bin/ifconfig", "/system/bin/iftop",  
      17.         "/system/bin/insmod", "/system/bin/ioctl", "/system/bin/ionice",  
      18.         "/system/bin/kill", "/system/bin/ln", "/system/bin/log",  
      19.         "/system/bin/ls", "/system/bin/lsmod", "/system/bin/lsof",  
      20.         "/system/bin/mkdir", "/system/bin/mount", "/system/bin/mv",  
      21.         "/system/bin/nandread", "/system/bin/netstat",  
      22.         "/system/bin/newfs_msdos", "/system/bin/notify", "/system/bin/printenv",  
      23.         "/system/bin/ps", "/system/bin/reboot", "/system/bin/renice",  
      24.         "/system/bin/rm", "/system/bin/rmdir", "/system/bin/rmmod",  
      25.         "/system/bin/route", "/system/bin/schedtop", "/system/bin/sendevent",  
      26.         "/system/bin/setconsole", "/system/bin/setprop", "/system/bin/sleep",  
      27.         "/system/bin/smd", "/system/bin/start", "/system/bin/stop",  
      28.         "/system/bin/sync", "/system/bin/top", "/system/bin/umount",  
      29.         "/system/bin/uptime", "/system/bin/vmstat", "/system/bin/watchprops",  
      30.         "/system/bin/wipe");  
      31. set_perm_recursive(0, 0, 0755, 0644, "/system");  
      32. set_perm_recursive(0, 2000, 0755, 0755, "/system/bin");  
      33. set_perm(0, 3003, 02750, "/system/bin/netcfg");  
      34. set_perm(0, 3004, 02755, "/system/bin/ping");  
      35. set_perm(0, 2000, 06750, "/system/bin/run-as");  
      36. set_perm_recursive(1002, 1002, 0755, 0440, "/system/etc/bluetooth");  
      37. set_perm(0, 0, 0755, "/system/etc/bluetooth");  
      38. set_perm(1000, 1000, 0640, "/system/etc/bluetooth/auto_pairing.conf");  
      39. set_perm(3002, 3002, 0444, "/system/etc/bluetooth/blacklist.conf");  
      40. set_perm(1002, 1002, 0440, "/system/etc/dbus.conf");  
      41. set_perm(1014, 2000, 0550, "/system/etc/dhcpcd/dhcpcd-run-hooks");  
      42. set_perm(0, 2000, 0550, "/system/etc/init.goldfish.sh");  
      43. set_perm(0, 0, 0544, "/system/etc/install-recovery.sh");  
      44. set_perm_recursive(0, 0, 0755, 0555, "/system/etc/ppp");  
      45. set_perm_recursive(0, 2000, 0755, 0755, "/system/xbin");  
      46. set_perm(0, 0, 06755, "/system/xbin/librank");  
      47. set_perm(0, 0, 06755, "/system/xbin/procmem");  
      48. set_perm(0, 0, 06755, "/system/xbin/procrank");  
      49. set_perm(0, 0, 06755, "/system/xbin/su");  
      50. set_perm(0, 0, 06755, "/system/xbin/tcpdump");  
      51. show_progress(0.200000, 0);  
      52. show_progress(0.200000, 10);  
      53. assert(package_extract_file("boot.img", "/tmp/boot.img"),  
      54.        write_raw_image("/tmp/boot.img", "boot"),  
      55.        delete("/tmp/boot.img"));  
      56. show_progress(0.100000, 0);  
      57. unmount("/system");  


                下面分析下這個腳本的執(zhí)行過程:

               比較時間戳:如果升級包較舊則終止腳本的執(zhí)行。

               匹配設(shè)備信息:如果和當(dāng)前的設(shè)備信息不一致,則停止腳本的執(zhí)行。

               顯示進(jìn)度條:如果以上兩步匹配則開始顯示升級進(jìn)度條。

               格式化system分區(qū)并掛載。

               提取包中的recovery以及system目錄下的內(nèi)容到系統(tǒng)的/system下。

               為/system/bin/下的命令文件建立符號連接。

               設(shè)置/system/下目錄以及文件的屬性。

               將包中的boot.img提取到/tmp/boot.img。

               將/tmp/boot.img鏡像文件寫入到boot分區(qū)。

               完成后卸載/system。

               以上就是updater-script腳本中的語法,及其執(zhí)行的具體過程。通過分析其執(zhí)行流程,我們可以發(fā)現(xiàn)在執(zhí)行過程中,并未將升級包另外解壓到一個地方,而是需要什么提取什么。值得主要的是在提取recovery和system目錄中的內(nèi)容時,一并放在了/system/下。在操作的過程中,并未刪除或改變update.zip包中的任何內(nèi)容。在實際的更新完成后,我們的update.zip包確實還存在于原來的位置。


      三、總結(jié)

              以上的九篇著重分析了Android系統(tǒng)中Recovery模式中的一種,即我們做好的update.zip包在系統(tǒng)更新時所走過的流程。其核心部分就是Recovery服務(wù)的工作原理。其他兩種FACTORY RESET、ENCRYPTED FILE SYSTEM ENABLE/DISABLE與OTA INSTALL是相通的。重點是要理解Recovery服務(wù)的工作原理。另外詳細(xì)分析其升級過程,對于我們在實際升級時,可以根據(jù)我們的需要做出相應(yīng)的修改。

      http://blog.csdn.net/tody_guo/article/details/7943429

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多