zoukankan      html  css  js  c++  java
  • I.MX6 Manufacturing Tool V2 (MFGTool2) Emmc mksdcard-android.sh hacking

    #!/bin/bash
    
    # 参考文章:
    #   1. Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数
    #       http://c.biancheng.net/cpp/view/2739.html
    
    # <CMD state="Updater" type="push" body="send" file="mksdcard-android.sh.tar">Sending partition shell</CMD>
    # <CMD state="Updater" type="push" body="$ tar xf $FILE "> Partitioning...</CMD>
    # <CMD state="Updater" type="push" body="$ sh mksdcard-android.sh /dev/mmcblk0"> Partitioning...</CMD>
    # <CMD state="Updater" type="push" body="$ ls -l /dev/mmc* ">Formatting sd partition</CMD>
    
    # partition size in MB
    BOOTLOAD_RESERVE=8          # bootload  8MB 
    BOOT_ROM_SIZE=8             # 启动rom   8MB
    SYSTEM_ROM_SIZE=512         # 系统rom   512MB
    CACHE_SIZE=512              # 缓存      512MB
    RECOVERY_ROM_SIZE=8         # 恢复rom   8MB
    VENDER_SIZE=8               # 供货商    8MB
    MISC_SIZE=8                 # 杂项      8MB
    
    help() {
    
    # basename String [ Suffix ]
    # basename 命令读取 String 参数,删除以 /(斜杠) 结尾的前缀以及任何指定的 Suffix 参数,
    # 并将剩余的基本文件名称写至标准输出。
    bn=`basename $0`
    cat << EOF
    usage $bn <option> device_node
    
    options:
      -h                displays this help message
      -s                only get partition size
      -np                 not partition.
      -f                 flash android image.
    EOF
    
    }
    
    # check the if root?
    # 检查当前是否拥有root权限
    userid=`id -u`
    if [ $userid -ne "0" ]; then
        echo "you're not root?"
        exit
    fi
    
    
    # parse command line
    # 解析命令行参数
    moreoptions=1
    node="na"
    cal_only=0
    flash_images=0
    not_partition=0
    not_format_fs=0
    # $#: 传递给脚本或函数的参数个数。
    #
    # $ sh mksdcard-android.sh /dev/mmcblk0
    # $1: /dev/mmcblk0
    #
    # moreoptions: 1
    # node: /dev/mmcblk0
    while [ "$moreoptions" = 1 -a $# -gt 0 ]; do
        case $1 in
            -h) help; exit ;;
            -s) cal_only=1 ;;
            -f) flash_images=1 ;;
            -np) not_partition=1 ;;
            -nf) not_format_fs=1 ;;
            *)  moreoptions=0; node=$1 ;;
        esac
        [ "$moreoptions" = 0 ] && [ $# -gt 1 ] && help && exit
        [ "$moreoptions" = 1 ] && shift
    done
    
    # 如果node设备节点不存在,那么就退出程序
    if [ ! -e ${node} ]; then
        help
        exit
    fi
    
    
    # call sfdisk to create partition table
    # 调用sfdisk来创建分区表
    # get total card size
    # extend_size 增加了这个分量,同时data_size减小了这个分量,所以磁盘总量不变
    seprate=40         
    # -s [or --show-size]: 显示一个分区的大小,单位是KB。
    total_size=`sfdisk -s ${node}`
    total_size=`expr ${total_size} / 1024`      # 重新计算,将单位换算成MB
    boot_rom_sizeb=`expr ${BOOT_ROM_SIZE} + ${BOOTLOAD_RESERVE}`
    extend_size=`expr ${SYSTEM_ROM_SIZE} + ${CACHE_SIZE} + ${VENDER_SIZE} + ${MISC_SIZE} + ${seprate}`
    data_size=`expr ${total_size} - ${boot_rom_sizeb} - ${RECOVERY_ROM_SIZE} - ${extend_size} + ${seprate}`
    
    # create partitions
    if [ "${cal_only}" -eq "1" ]; then
    cat << EOF
    BOOT   : ${boot_rom_sizeb}MB
    RECOVERY: ${RECOVERY_ROM_SIZE}MB
    SYSTEM : ${SYSTEM_ROM_SIZE}MB
    CACHE  : ${CACHE_SIZE}MB
    DATA   : ${data_size}MB
    MISC   : ${MISC_SIZE}MB
    EOF
    exit
    fi
    
    # destroy the partition table
    # 删除以前的分区表,从这里可以看出,分区表的大小貌似是1024字节
    dd if=/dev/zero of=${node} bs=1024 count=1
    
    sfdisk --force -uM ${node} << EOF
    ,${boot_rom_sizeb},83
    ,${RECOVERY_ROM_SIZE},83
    ,${extend_size},5
    ,${data_size},83
    ,${SYSTEM_ROM_SIZE},83
    ,${CACHE_SIZE},83
    ,${VENDER_SIZE},83
    ,${MISC_SIZE},83
    EOF
    
    # adjust the partition reserve for bootloader.
    # if you don't put the uboot on same device, you can remove the BOOTLOADER_ERSERVE
    # to have 8M space.
    # the minimal sylinder for some card is 4M, maybe some was 8M
    # just 8M for some big eMMC 's sylinder
    # -N# : 只改变分区的编号 #
    sfdisk --force -uM ${node} -N1 << EOF
    ${BOOTLOAD_RESERVE},${BOOT_ROM_SIZE},83
    EOF
    
    # For MFGTool Notes:
    # MFGTool use mksdcard-android.tar store this script
    # if you want change it.
    # do following:
    #   tar xf mksdcard-android.sh.tar
    #   vi mksdcard-android.sh 
    #   [ edit want you want to change ]
    #   rm mksdcard-android.sh.tar; tar cf mksdcard-android.sh.tar mksdcard-android.sh
  • 相关阅读:
    高级特性(4)- 数据库编程
    UVA Jin Ge Jin Qu hao 12563
    UVA 116 Unidirectional TSP
    HDU 2224 The shortest path
    poj 2677 Tour
    【算法学习】双调欧几里得旅行商问题(动态规划)
    南洋理工大学 ACM 在线评测系统 矩形嵌套
    UVA The Tower of Babylon
    uva A Spy in the Metro(洛谷 P2583 地铁间谍)
    洛谷 P1095 守望者的逃离
  • 原文地址:https://www.cnblogs.com/zengjfgit/p/4866867.html
Copyright © 2011-2022 走看看