1. 程式人生 > >imx6 通過SD卡啟動後,對emmc進行分割槽和程式更新

imx6 通過SD卡啟動後,對emmc進行分割槽和程式更新

1.執行的前提是,sd卡上的系統包含sfdisk工具

2.sd啟動後,執行指令碼分割槽

 目前是分了3個區(EMMC-4G大小,可用空間大約3.9G,本次分割槽並全部使用)

150M   --mmcblk0p1 ,偏移量為10M開始

2G       --mmcblk0p2,偏移量為200M開始

1G      -- mmcblk0p3,偏移量為2200M開始

#!/bin/sh

# partition size in MB

#mmcblk0p01
BOOT_SYSTEM_OFFSET=10
ROOT_SYSTEM_SIZE=150

#mmcblk0p2
MMC_PARTITION1_OFFSET=200
MMC_PARTITION1_SIZE=2000

#mmcblk0p3
MMC_PARTITION2_OFFSET=2200
MMC_PARTITION2_SIZE=1100
# call sfdisk to create partition table
# destroy the partition table
node=$1
dd if=/dev/zero of=${node} bs=1024 count=1


sfdisk --force -uM ${node} << EOF
${BOOT_SYSTEM_OFFSET},${ROOT_SYSTEM_SIZE},0c
${MMC_PARTITION1_OFFSET},${MMC_PARTITION1_SIZE},83
${MMC_PARTITION2_OFFSET},${MMC_PARTITION2_SIZE},83
EOF

3.更新uboot

執行指令碼

#!/bin/sh


echo "download u-boot.imx from server"
tftp -gr u-boot.imx $1
if [ ! -e u-boot.imx ];then
	help
fi
echo "clear uboot args ... "
dd if=/dev/zero of=/dev/mmcblk0 bs=1k seek=384 conv=fsync count=129

echo "access boot partition 1"
echo 0 > /sys/block/mmcblk0boot0/force_ro

echo "write U-Boot to eMMC "
#from 1k bytes to write uboot, 
#note: chip first 1024bytes stored disk-partition table discription.
dd if=u-boot.imx of=/dev/mmcblk0boot0 bs=512 seek=2

echo "re-enable read-only access"
echo 1 > /sys/block/mmcblk0boot0/force_ro

echo "enable boot partion 1 to boot"
mmc bootpart enable 1 1 /dev/mmcblk0


需要說明的是,uboot燒寫的位置是從1024位元組,即1k位置開始寫的。因為前1k位元組為分割槽表位置,不能寫。

4.更新 kernel fdt的步驟,類似uboot

5.更新rootfs

執行指令碼

#!/bin/sh

mkfs.ext3 -E nodiscard /dev/mmcblk0p2
mkdir -p /mnt/mmcblk0p2
mount -t ext3 /dev/mmcblk0p2 /mnt/mmcblk0p2

cd /mnt/mmcblk0p2

tftp -gr root.tgz $1

if [  ! -e root.tgz ]
then
	echo "download root fs failed"
else
	tar zxf root.tgz
	rm  -rf root.tgz
	echo "unpack rootfs img success!"
fi

umount /mnt/mmcblk0p2

echo "Update Complete!"


其中root.tgz為打包好的根檔案系統