mksdcard.sh 脚本分析

 脚本源码如下。

#!/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”那一行即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值