一 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/