emmc分区脚本编写示例

一 sfdisk脚本实例
1.1 实例脚本

#!/bin/sh
#mmcblk1p01  boot
BOOT_SYSTEM_OFFSET=10
ROOT_SYSTEM_SIZE=90

#mmcblk1p2  rootfs
MMC_PARTITION1_OFFSET=100
MMC_PARTITION1_SIZE=300

#mmcblk1p3  app1
MMC_PARTITION2_OFFSET=400
MMC_PARTITION2_SIZE=200

#mmcblk1p4  data
MMC_PARTITION3_OFFSET=600
MMC_PARTITION3_SIZE=2500

#mmcblk1p5  app2
MMC_PARTITION4_OFFSET=3100
MMC_PARTITION4_SIZE=200

#mmcblk1p6  rootfs2
MMC_PARTITION5_OFFSET=3300
MMC_PARTITION5_SIZE=300

#mmcblk1p7  other
MMC_PARTITION6_OFFSET=3600


# 将node赋值为传入此脚本的第一个参数,有下文xml中,该值为/dev/mmcblk1
node=$1

#清除分区表,即将前导一个1024字节(1KB)大小的分区零0
dd if=/dev/zero of=${node} bs=1024 count=1

#SmartFdisk –uM表示以MB为单位生成报告。
#0c: 即id=c,表示分区格式为Win95 FAT32 (LBA)。
#L: 即id=83,表示分区格式为linux 。
#E: 即id=5,表示分区格式为Extended。
sfdisk --force -uM ${node} << EOF
${BOOT_SYSTEM_OFFSET},${ROOT_SYSTEM_SIZE},0c
100,300,L
400,200,L
600,,E
600,2500,L
3100,200,L
3300,300,L
EOF

1.2 mfgtool xml调用脚本
此处mmc=1

    <!-- create partition -->
    <CMD state="Updater" type="push" body="send" file="mksdcard.sh.tar">Sending partition shell</CMD>
    <CMD state="Updater" type="push" body="$ tar xf $FILE "> Partitioning...</CMD>
    <CMD state="Updater" type="push" body="$ sh mksdcard.sh /dev/mmcblk%mmc%"> Partitioning...</CMD>

二 fdisk 分区脚本实例
实例1

 #!/bin/bash
fdisk /dev/sdb <<EOF
n
p
1


wq
EOF

/sbin/mkfs.ext4 /dev/sdb1 &&  /bin/mkdir -p /data && /bin/mount /dev/sdb1 /data
echo 'LABEL=data_disk /data ext4 defaults 0 2' >> /etc/fstab

实例2

#!/bin/bash
#
# Exit status is 0 for PASS, nonzero for FAIL
#
STATUS=0

run_mmc_case()
{
    # create two partitions
    fdisk /dev/mmcblk0 2>&1 1>/dev/null  << EOF
    p
    d
    1
    d
    2
    d
    3
    d
    n
    p
    1

    +10M
    n
    p
    2

    +20M

    w
EOF
    sleep 1
    if [ "$?" = 0 ]; then
        if [ -e '/dev/mmcblk0p1' ] && [ -e '/dev/mmcblk0p2' ]; then
            printf "MMC test passes \n\n"
            return
        fi
    fi
    STATUS=1
    printf "MMC test fails \n\n"
}

# devnode test
check_devnode "/dev/mmcblk0"

if [ "$STATUS" = 0 ]; then
    run_mmc_case
fi

print_status
exit $STATUS

三:实际应用

#!/bin/sh
set -e
run_mmc_case()
{
    # create two partitions
    fdisk /dev/mmcblk0 2>&1 1>/dev/null  << EOF
    p
    d
    1
    d
    2
    d
    3
    d
    n
    p
    1

    +80M
    n
    p
    2

    +80M
    n
    p
    3

    +10M
    n
    p


    w
EOF
    sleep 2
    if [ "$?" = 0 ]; then
        if [ -e '/dev/mmcblk0p1' ] && [ -e '/dev/mmcblk0p2' ] && [ -e '/dev/mmcblk0p3' ] && [ -e '/dev/mmcblk0p4' ]; then
            printf "MMC part ok! \n\n"
            return
        fi
    fi
    printf "MMC test fails \n\n"
}


umount /dev/mmcblk0p*



#fdisk
run_mmc_case

sleep 1

mkfs.ext4 -E nodiscard -F /dev/mmcblk0p1
mkfs.ext4 -E nodiscard -F /dev/mmcblk0p2
mkfs.ext4 -E nodiscard -F /dev/mmcblk0p3
mkfs.ext4 -E nodiscard -F /dev/mmcblk0p4



#重新挂载
if [ ! -d /app ]
then
    mkdir /app
fi

if [ ! -d /app_bk ]
then
    mkdir /app_bk
fi


if [ ! -d /ch_sys ]
then
    mkdir /ch_sys
fi

if [ ! -d /ch_data ]
then
    mkdir /ch_data
fi

sleep 0.2

mount -o rw /dev/mmcblk0p3 /ch_sys/
mount -o rw /dev/mmcblk0p4 /ch_data/

mount -o rw /dev/mmcblk0p1 /app/
mount -o rw /dev/mmcblk0p2 /app_bk/

  • 0
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值