zoukankan      html  css  js  c++  java
  • OK335x mksd.sh hacking

    #! /bin/sh
    # mk3PartSDCard.sh v0.3
    # Licensed under terms of GPLv2
    
    # 参考文档:
    #     1. sfidsk创建可启动分区问题
    #         http://segmentfault.com/a/1190000002493628
    #     2. sfdisk 中文手册
    #         http://blog.csdn.net/hnmsky/article/details/7650964
    #     3. linux sfdisk partition
    #         http://blog.csdn.net/shell_albert/article/details/8425530
    #     4. How to Make 3 Partition SD Card
    #         http://processors.wiki.ti.com/index.php/How_to_Make_3_Partition_SD_Card
    
    if [ $# -ne 1 ]; then
        echo "USAGE:"
        echo "    $0 <device node>"
        exit -1;
    fi
    
    # 获取SD卡设备节点,并擦除分区表
    DRIVE=$1
    dd if=/dev/zero of=$DRIVE bs=1024 count=1024
    
    # 获取SD卡大小,并在terminal中显示字节大小
    SIZE=`fdisk -l $DRIVE | grep Disk | awk '{print $5}'`
    echo DISK SIZE - $SIZE bytes
    
    # 计算磁柱数
    # 每一个柱面的大小为255*63*512=8,225,280 Bytes
    CYLINDERS=`echo $SIZE/255/63/512 | bc`
    
    # Usage:
    #  sfdisk [options] <device> [...]
    # 
    # Options:
    #  -s, --show-size           list size of a partition
    #  -c, --id                  change or print partition Id
    #      --change-id           change Id
    #      --print-id            print Id
    #  -l, --list                list partitions of each device
    #  -d, --dump                idem, but in a format suitable for later input
    #  -i, --increment           number cylinders etc. from 1 instead of from 0
    #  -u, --unit <letter>       units to be used; <letter> can be one of
    #                              S (sectors), C (cylinders), B (blocks), or M (MB)
    #  -1, --one-only            reserved option that does nothing currently
    #  -T, --list-types          list the known partition types
    #  -D, --DOS                 for DOS-compatibility: waste a little space
    #  -E, --DOS-extended        DOS extended partition compatibility
    #  -R, --re-read             make the kernel reread the partition table
    #  -N <number>               change only the partition with this <number>
    #  -n                        do not actually write to disk
    #  -O <file>                 save the sectors that will be overwritten to <file>
    #  -I <file>                 restore sectors from <file>
    #  -V, --verify              check that the listed partitions are reasonable
    #  -v, --version             display version information and exit
    #  -h, --help                display this help text and exit
    # 
    # Dangerous options:
    #  -f, --force               disable all consistency checking
    #      --no-reread           do not check whether the partition is in use
    #  -q, --quiet               suppress warning messages
    #  -L, --Linux               do not complain about things irrelevant for Linux
    #  -g, --show-geometry       print the kernel's idea of the geometry
    #  -G, --show-pt-geometry    print geometry guessed from the partition table
    #  -A, --activate[=<device>] activate bootable flag
    #  -U, --unhide[=<dev>]      set partition unhidden
    #  -x, --show-extended       also list extended partitions in the output,
    #                              or expect descriptors for them in the input
    #      --leave-last          do not allocate the last cylinder
    #      --IBM                 same as --leave-last
    #      --in-order            partitions are in order
    #      --not-in-order        partitions are not in order
    #      --inside-outer        all logicals inside outermost extended
    #      --not-inside-outer    not all logicals inside outermost extended
    #      --nested              every partition is disjoint from all others
    #      --chained             like nested, but extended partitions may lie outside
    #      --onesector           partitions are mutually disjoint
    # 
    # Override the detected geometry using:
    #  -C, --cylinders <number>  set the number of cylinders to use
    #  -H, --heads <number>      set the number of heads to use
    #  -S, --sectors <number>    set the number of sectors to use
    #
    
    # sfdisk的-D参数指定与DOS兼容,并自动在每个分区前预留空间,以存放MBR(Master Boot Record);
    #
    # <start>, <size>, <id>, <bootable> 
    #
    # bootable 可以指定为[*|-]格式,默认值是"-"也就是没有可引导标记。
    # 这个标记仅对DOS有意义:DOS会给带有可引导标记的主分区分配 C: 盘符
    #
    # id 应该以无"0x"前缀的格式给出其十六进制值,或者[E|S|L]简写字母:
    #     L(83)是默认值;
    #     S(82,LINUX_SWAP);
    #     E(5,扩展分区)。
    # 
    # 第一行分区描述,9,0x0C,* 自动分配起始柱面,数量为9,分区ID为0x0C(表示FAT32分区),<bootable>为*, 表示可启动分区。
    # 第二行分区描述10,115,,- 同样自动分配起柱面,数量为115,其它为默认。
    # 第三行分区描述126,,,- 同样自动分配起柱面,剩下所有的数量,其它为默认。
    sfdisk -D -H 255 -S 63 -C $CYLINDERS $DRIVE << EOF
    ,9,0x0C,*
    10,115,,-
    126,,,-
    EOF
    
    # 这里可以得到一张FAT32分区的SD卡,我有时候我们就只需要一张这样的卡
    # sfdisk -D -H 255 -S 63 -C $CYLINDERS $DRIVE << EOF
    # ,,0x0C,*
    # EOF
    
    # 格式化各个分区,格式化完卸载对应的分区
    mkfs.vfat -F 32 -n "boot" ${DRIVE}1
    umount ${DRIVE}1
    mkfs.ext3 -L "rootfs" ${DRIVE}2
    umount ${DRIVE}2
    mkfs.ext3 -L "START_HERE" ${DRIVE}3
  • 相关阅读:
    Matlab 绘制三维立体图(以地质异常体为例)
    Azure DevOps的variable group实现array和hashtable参数的传递
    Azure DevOps 利用rest api设置variable group
    Azure AADSTS7000215 其中一种问题的解决
    Power BI 实现实时更新Streaming Dataset
    AAD Service Principal获取azure user list (Microsoft Graph API)
    Matlab 沿三维任意方向切割CT图的仿真计算
    Azure Powershell script检测登陆并部署ARM Template
    Azure KeyVault设置策略和自动化添加secrets键值对
    Azure登陆的两种常见方式(user 和 service principal登陆)
  • 原文地址:https://www.cnblogs.com/zengjfgit/p/4968170.html
Copyright © 2011-2022 走看看