i.mx7 是使用emmc设备, 本文档操作方法是从sdcard启动进入linux系统, 在linux系统中对emmc设备进行分区和烧写.

扩大sdcard的分区大小

bsp包增加parted软件包:

IMAGE_INSTALL_append = " parted"

完成后, 底板启动进入sdcard的linux系统.

先对sdcard的最后一个分区进行扩展:
https://wiki.phytec.com/pages/viewpage.action?pageId=106957160#phyCOREi.MX6eMMC烧写linux镜像/phyCOREi.MX6eMMCflashlinuximage-扩大eMMC文件系统

烧写EMMC

把emmc的uboot, kernel, oftree, rootfs四个镜像文件复制到/home/root/images目录下.

烧写脚本:

flash_emmc.sh
#!/bin/sh

if [ `expr 0 + 0${1}` -le 0 ]; then
        echo "usage $0: <sd_size in gb>"
        exit 1;
fi

# base config
DEST=/dev/mmcblk2
DESTP=${DEST}p
MNTPOINT=/mnt/sd
DEST_SIZE=`expr ${1} \* 900 \* 1024`
# images
BASE_DIR=/home/root/images														# 镜像目录
UBOOT=${BASE_DIR}/u-boot.imx													# uboot						
ZIMAGE=${BASE_DIR}/zImage-imx7d-phyboard-zeta-001.bin							# kernel
OFTREE=${BASE_DIR}/zImage-imx7d-phyboard-zeta-001.dtb							# oftree
ROOTFS=${BASE_DIR}/fsl-image-validation-imx-imx7d-phyboard-zeta-001.tar.bz2		# rootfs
# size
BOOT_SPACE_ALIGNED=$(expr 8192 + 4096 - 1)
BOOT_SPACE_ALIGNED=$(expr ${BOOT_SPACE_ALIGNED} - ${BOOT_SPACE_ALIGNED} % 4096)

# set LED D12 blink 5 times 													# 烧写指示LED, 可更换为其他GPIO
echo 12 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio12/direction
for i in 1 2 3 4 5
do
        echo 1 > /sys/class/gpio/gpio12/value
        sleep 0.5
        echo 0 > /sys/class/gpio/gpio12/value
        sleep 0.5
done

# start
rm -rf ${MNTPOINT}
mkdir -p ${MNTPOINT}
umount ${DESTP}*

echo Wipe emmc device
dd if=/dev/zero of=${DEST} bs=1024 count=0 seek=${DEST_SIZE}
dd if=/dev/zero of=${DEST} bs=512k count=32 conv=fsync

echo Create Partitions
sfdisk -u S ${DEST} << EOF
  1 : start=8192,size=$(expr 2 \* ${BOOT_SPACE_ALIGNED}),Id=c
  2 : start=$(expr 2 \* 4096 + 2 \* ${BOOT_SPACE_ALIGNED}),Id=83
EOF

echo Flash Uboot
dd if=${UBOOT} of=${DEST} conv=notrunc seek=2 bs=512

echo Flash Kernel/Devicetree
yes | mkfs.vfat ${DESTP}1
mount ${DESTP}1 ${MNTPOINT}
cp ${ZIMAGE} ${MNTPOINT}/zImage
cp ${OFTREE} ${MNTPOINT}/oftree
umount ${MNTPOINT}

echo Flash ROOTFS
yes | mkfs.ext4 ${DESTP}2
mount ${DESTP}2 ${MNTPOINT}
tar xmf ${ROOTFS} -C ${MNTPOINT}
umount ${MNTPOINT}

#LED D12 on
echo 1 > /sys/class/gpio/gpio12/value
./flash_emmc.sh 4						# 参数值为emmc的大小

自动烧写

自动烧写的就是在linux中做一个自启动服务

在/lib/systemd/system目录下创建flash-emmc.service

flash-emmc.service
[Unit]
Description=Flash Emmc Service

[Service]
Type=simple
ExecStart=/home/root/images/flash_emmc.sh 4
SuccessExitStatus=2

[Install]
WantedBy=multi-user.target

使能自动烧写

systemctl start flash-emmc.service
  • No labels