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