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
原文地址:https://www.cnblogs.com/zengjfgit/p/4968170.html