脚本源码如下。
#!/bin/sh
# partition size in MB
BOOTLOAD_RESERVE=10
BOOT_ROM_SIZE=120
WEB_SIZE=50
ROOTFS_SIZE=500
FOTA_FLAG_SIZE=2
OOPS_SIZE=2
ART_SIZE=2
MAC_SIZE=2
WIFI_FLAG_SIZE=2
RESERVED1_SIZE=2
RESERVED2_SIZE=2
RESERVED3_SIZE=16
CFG_PARAMETER_SIZE=80
LOG_SIZE=200
FOTA_SIZE=350
DATA_SIZE=150
ITS_SIZE=100
RESERVED4_SIZE=160
RESERVED5_SIZE=200
# wait for the SD/MMC device node ready
while [ ! -e $1 ]
do
sleep 1
echo “wait for $1 appear”
done
node=$1
# get total card size
total_size=`sfdisk -s ${node}` #1024
boot_rom_sizeb=`expr ${BOOT_ROM_SIZE} + ${BOOTLOAD_RESERVE}`
extend_size=`expr ${FOTA_FLAG_SIZE} + ${OOPS_SIZE} + ${ART_SIZE} + ${MAC_SIZE} + ${WIFI_FLAG_SIZE} + ${RESERVED1_SIZE} + ${RESERVED2_SIZE} + ${RESERVED3_SIZE} + ${CFG_PARAMETER_SIZE} + ${LOG_SIZE} + ${FOTA_SIZE} + ${DATA_SIZE} + ${ITS_SIZE} + ${RESERVED4_SIZE} + ${RESERVED5_SIZE}`
other_size=`expr ${total_size} - ${boot_rom_sizeb} - ${extend_size} - ${WEB_SIZE} - ${ROOTFS_SIZE}`
#cat << EOF
#BOOT : ${boot_rom_sizeb}MB
#WEB: ${WEB_SIZE}MB
#ROOTFS: ${ROOTFS_SIZE}MB
#FOTA_FLAG: ${FOTA_FLAG_SIZE}MB
#OOPS : ${OOPS_SIZE}MB
#ART : ${ART_SIZE}MB
#MAC : ${MAC_SIZE}MB
#WIFI_FLAG : ${WIFI_FLAG_SIZE}MB
#RESERVED1 : ${RESERVED1_SIZE}MB
#RESERVED2 : ${RESERVED2_SIZE}MB
#RESERVED3 : ${RESERVED3_SIZE}MB
#CFG_PARAMETER : ${CFG_PARAMETER_SIZE}MB
#LOG: ${LOG_SIZE}MB
#FOTA: ${FOTA_SIZE}MB
#DATA: ${DATA_SIZE}MB
#ITS: ${ITS_SIZE}MB
#RESERVED4: ${RESERVED4_SIZE}MB
#RESERVED5: ${RESERVED5_SIZE}MB
#OTHER : ${other_size}MB
#EOF
# call sfdisk to create partition table
# destroy the partition table
dd if=/dev/zero of=${node} bs=1024 count=1
sfdisk --force ${node} << EOF
,${boot_rom_sizeb}M,83
,${ROOTFS_SIZE}M,83
,${WEB_SIZE}M,83
,${extend_size}M,5
,${FOTA_FLAG_SIZE}M,83
,${OOPS_SIZE}M,83
,${ART_SIZE}M,83
,${MAC_SIZE}M,83
,${WIFI_FLAG_SIZE}M,83
,${RESERVED1_SIZE}M,83
,${RESERVED2_SIZE}M,83
,${RESERVED3_SIZE}M,83
,${CFG_PARAMETER_SIZE}M,83
,${LOG_SIZE}M,83
,${FOTA_SIZE}M,83
,${DATA_SIZE}M,83
,${ITS_SIZE}M,83
,${RESERVED4_SIZE}M,83
,${RESERVED5_SIZE}M,83
EOF
sfdisk --force ${node} -N1 << EOF
${BOOTLOAD_RESERVE}M,${BOOT_ROM_SIZE}M,0c
EOF
加解析版本如下:
#!/bin/sh
# partition size in MB
BOOTLOAD_RESERVE=10
BOOT_ROM_SIZE=120
WEB_SIZE=50
ROOTFS_SIZE=500
FOTA_FLAG_SIZE=2
OOPS_SIZE=2
ART_SIZE=2
MAC_SIZE=2
WIFI_FLAG_SIZE=2
RESERVED1_SIZE=2
RESERVED2_SIZE=2
RESERVED3_SIZE=16
CFG_PARAMETER_SIZE=80
LOG_SIZE=200
FOTA_SIZE=350
DATA_SIZE=150
ITS_SIZE=100
RESERVED4_SIZE=160
RESERVED5_SIZE=200
# wait for the SD/MMC device node ready
while [ ! -e $1 ] #[ -e FILE ] -- 如果 FILE 存在则为真。
do
sleep 1
echo “wait for $1 appear”
done
node=$1
# get total card size
total_size=`sfdisk -s ${node}` #1024 sfdisk -s,显示分区大小,单位为区块
# expr命令是一个手工命令行计数器,用于在UNIX/LINUX下求表达式变量的值,一般用于整数值,也可用于字符串。
boot_rom_sizeb=`expr ${BOOT_ROM_SIZE} + ${BOOTLOAD_RESERVE}`
extend_size=`expr ${FOTA_FLAG_SIZE} + ${OOPS_SIZE} + ${ART_SIZE} + ${MAC_SIZE} + ${WIFI_FLAG_SIZE} + ${RESERVED1_SIZE} + ${RESERVED2_SIZE} + ${RESERVED3_SIZE} + ${CFG_PARAMETER_SIZE} + ${LOG_SIZE} + ${FOTA_SIZE} + ${DATA_SIZE} + ${ITS_SIZE} + ${RESERVED4_SIZE} + ${RESERVED5_SIZE}`
other_size=`expr ${total_size} - ${boot_rom_sizeb} - ${extend_size} - ${WEB_SIZE} - ${ROOTFS_SIZE}`
#cat << EOF
#BOOT : ${boot_rom_sizeb}MB
#WEB: ${WEB_SIZE}MB
#ROOTFS: ${ROOTFS_SIZE}MB
#FOTA_FLAG: ${FOTA_FLAG_SIZE}MB
#OOPS : ${OOPS_SIZE}MB
#ART : ${ART_SIZE}MB
#MAC : ${MAC_SIZE}MB
#WIFI_FLAG : ${WIFI_FLAG_SIZE}MB
#RESERVED1 : ${RESERVED1_SIZE}MB
#RESERVED2 : ${RESERVED2_SIZE}MB
#RESERVED3 : ${RESERVED3_SIZE}MB
#CFG_PARAMETER : ${CFG_PARAMETER_SIZE}MB
#LOG: ${LOG_SIZE}MB
#FOTA: ${FOTA_SIZE}MB
#DATA: ${DATA_SIZE}MB
#ITS: ${ITS_SIZE}MB
#RESERVED4: ${RESERVED4_SIZE}MB
#RESERVED5: ${RESERVED5_SIZE}MB
#OTHER : ${other_size}MB
#EOF
# call sfdisk to create partition table
# destroy the partition table
dd if=/dev/zero of=${node} bs=1024 count=1 # 将生成一个大小为1024字节的名字叫${node}的文件
# -f, --force disable all consistency checking
# --no-reread do not check whether the partition is in use
# 83表示LINUX分区,0c表示Windows FAT分区, 5表示外部扩展区,外部SDRAM这些吧
# Id is given inhex, without the 0x prefix, or is [E|S|L|X],
# where L (LINUX_NATIVE (83)) is thedefault, S is LINUX_SWAP (82),
# E is EXTENDED_PARTITION (5), and X is LINUX_EXTENDED (85).
# 依次为第一分区,大小为${boot_rom_sizeb},单位为M
# 第二分区,大小为${ROOTFS_SIZE},单位为M,以此类推
sfdisk --force ${node} << EOF
,${boot_rom_sizeb}M,83 # ${BOOT_ROM_SIZE} + ${BOOTLOAD_RESERVE}
,${ROOTFS_SIZE}M,83 # 空为单独相加
,${WEB_SIZE}M,83 #
,${extend_size}M,5 # 很多项相加
,${FOTA_FLAG_SIZE}M,83 #
,${OOPS_SIZE}M,83 #
,${ART_SIZE}M,83 #
,${MAC_SIZE}M,83 #
,${WIFI_FLAG_SIZE}M,83 #
,${RESERVED1_SIZE}M,83 #
,${RESERVED2_SIZE}M,83 #
,${RESERVED3_SIZE}M,83 #
,${CFG_PARAMETER_SIZE}M,83#
,${LOG_SIZE}M,83 #
,${FOTA_SIZE}M,83 #
,${DATA_SIZE}M,83 #
,${ITS_SIZE}M,83 #
,${RESERVED4_SIZE}M,83 #
,${RESERVED5_SIZE}M,83 #
EOF
# -N <number> change only the partition with this <number>
#重新分配1分区,具体原因不详
sfdisk --force ${node} -N1 << EOF
${BOOTLOAD_RESERVE}M,${BOOT_ROM_SIZE}M,0c
EOF
所以,要更改rootfs分区大小只要ROOTFS_SIZE大小,即“ROOTFS_SIZE=500”那一行即可。