因需求我需要修改emmc中分区,使其mmcblk2p1、mmcblk2p3为fat32的分区,mmcblk2p2、mmcblk2p4为ext4的分区,以下为部分代码解释,如有需求可参考修改 这个脚本似乎是一个用于创建和操作SD卡镜像分区的bash脚本。我们逐步解释一下代码: 1.设置变量: set -e rawsize=8192 fatsize=85184 ext4size=6815744 totalsize=`expr $rawsize + $fatsize + $ext4size + $fatsize + $ext4size + 1` 2.set -e:设置脚本,在任何运行的命令返回非零状态时立即退出。 3.rawsize,fatsize,ext4size:这些变量定义了以千字节为单位的不同分区的大小。 4.totalsize:这个变量通过将原始、fat和ext4分区的大小相加计算镜像的总大小。 5.删除现有文件: if [ -e $SDK_PATH/images/rootfs.ext4 ]; then rm $SDK_PATH/images/rootfs.ext4 fi if [ -e $SDK_PATH/images/ok8mp-linux-fs.sdcard ]; then rm $SDK_PATH/images/ok8mp-linux-fs.sdcard* fi 6.检查指定的文件是否存在,如果存在则删除。 7.创建ext4分区: dd if=/dev/zero of=$SDK_PATH/images/rootfs.ext4 bs=1K count=0 seek=$ext4size chown -h -R 0:0 $DESTDIR find $DESTDIR -name .gitignore -exec rm {} \; mkfs.ext4 -F -i 4096 $SDK_PATH/images/rootfs.ext4 -d $DESTDIR fsck.ext4 -pvfD $SDK_PATH/images/rootfs.ext4 find $DESTDIR -type d -empty -exec touch {}/.gitignore \; 8.使用dd和mkfs.ext4创建ext4文件系统映像,并进行一些额外的操作,如更改所有权和添加.gitignore文件。 9.创建第一组分区: fatstart=$rawsize fatend=`expr $rawsize + $fatsize` ext4start=`expr $fatend` ext4end=`expr $fatend + $ext4size` echo $ext4end 10.为第一组FAT和ext4分区设置起始和结束点。 11.创建SD卡镜像: dd if=/dev/zero of=$SDK_PATH/images/ok8mp-linux-fs.sdcard bs=1K count=0 seek=$totalsize parted -s $SDK_PATH/images/ok8mp-linux-fs.sdcard mklabel msdos parted -s $SDK_PATH/images/ok8mp-linux-fs.sdcard unit KiB mkpart primary fat32 $fatstart $fatend parted -s $SDK_PATH/images/ok8mp-linux-fs.sdcard unit KiB mkpart primary $ext4start $ext4end parted $SDK_PATH/images/ok8mp-linux-fs.sdcard unit B print 12.使用dd创建SD卡镜像文件,并使用parted分区。 13.复制数据到第一组分区: dd if=$SDK_PATH/images/boot.img of=$SDK_PATH/images/ok8mp-linux-fs.sdcard conv=notrunc,fsync seek=1K bs=$fatstart dd if=$SDK_PATH/images/rootfs.ext4 of=$SDK_PATH/images/ok8mp-linux-fs.sdcard conv=notrunc,fsync seek=1K bs=$ext4start 14.将boot.img和rootfs.ext4复制到SD卡镜像的相应分区。 15.创建第二组分区: fatstart2=`expr $ext4end` fatend2=`expr $ext4end + $fatsize` ext4start2=`expr $fatend2` ext4end2=`expr $fatend2 + $ext4size` echo $ext4end2 parted -s $SDK_PATH/images/ok8mp-linux-fs.sdcard unit KiB mkpart primary fat32 $fatstart2 $fatend2 parted -s $SDK_PATH/images/ok8mp-linux-fs.sdcard unit KiB mkpart primary $ext4start2 $ext4end2 parted $SDK_PATH/images/ok8mp-linux-fs.sdcard unit B print 16.为第二组FAT和ext4分区设置起始和结束点,并使用parted创建它们。 17.以下为全部代码 set -e rawsize=8192 fatsize=85184 ext4size=6815744 totalsize=`expr $rawsize + $fatsize + $ext4size + $fatsize + $ext4size + 1` if [ -e $SDK_PATH/images/rootfs.ext4 ]; then rm $SDK_PATH/images/rootfs.ext4 fi if [ -e $SDK_PATH/images/ok8mp-linux-fs.sdcard ]; then rm $SDK_PATH/images/ok8mp-linux-fs.sdcard* fi # Create ext4 partition dd if=/dev/zero of=$SDK_PATH/images/rootfs.ext4 bs=1K count=0 seek=$ext4size chown -h -R 0:0 $DESTDIR find $DESTDIR -name .gitignore -exec rm {} \; mkfs.ext4 -F -i 4096 $SDK_PATH/images/rootfs.ext4 -d $DESTDIR fsck.ext4 -pvfD $SDK_PATH/images/rootfs.ext4 find $DESTDIR -type d -empty -exec touch {}/.gitignore \; # Create first set of partitions fatstart=$rawsize fatend=`expr $rawsize + $fatsize` ext4start=`expr $fatend` ext4end=`expr $fatend + $ext4size` echo $ext4end dd if=/dev/zero of=$SDK_PATH/images/ok8mp-linux-fs.sdcard bs=1K count=0 seek=$totalsize parted -s $SDK_PATH/images/ok8mp-linux-fs.sdcard mklabel msdos parted -s $SDK_PATH/images/ok8mp-linux-fs.sdcard unit KiB mkpart primary fat32 $fatstart $fatend parted -s $SDK_PATH/images/ok8mp-linux-fs.sdcard unit KiB mkpart primary $ext4start $ext4end parted $SDK_PATH/images/ok8mp-linux-fs.sdcard unit B print # Copy data to first set of partitions echo $fatstartbytes echo $ext4startbytes dd if=$SDK_PATH/images/boot.img of=$SDK_PATH/images/ok8mp-linux-fs.sdcard conv=notrunc,fsync seek=1K bs=$fatstart dd if=$SDK_PATH/images/rootfs.ext4 of=$SDK_PATH/images/ok8mp-linux-fs.sdcard conv=notrunc,fsync seek=1K bs=$ext4start # Create second set of partitions fatstart2=`expr $ext4end` fatend2=`expr $ext4end + $fatsize` ext4start2=`expr $fatend2` ext4end2=`expr $fatend2 + $ext4size` echo $ext4end2 parted -s $SDK_PATH/images/ok8mp-linux-fs.sdcard unit KiB mkpart primary fat32 $fatstart2 $fatend2 parted -s $SDK_PATH/images/ok8mp-linux-fs.sdcard unit KiB mkpart primary $ext4start2 $ext4end2 parted $SDK_PATH/images/ok8mp-linux-fs.sdcard unit B print # Copy data to second set of partitions echo $fatstartbytes2 echo $ext4startbytes2 dd if=$SDK_PATH/images/boot.img of=$SDK_PATH/images/ok8mp-linux-fs.sdcard conv=notrunc,fsync seek=1K bs=$fatstart2 dd if=$SDK_PATH/images/rootfs.ext4 of=$SDK_PATH/images/ok8mp-linux-fs.sdcard conv=notrunc,fsync seek=1K bs=$ext4start2 # Cleanup rm -rf $SDK_PATH/images/rootfs.ext4 # rm -rf $SDK_PATH/images/ok8mp-linux-fs.sdcard |
|小黑屋|
飞凌嵌入式
( 冀ICP备12004394号-1 )
GMT+8, 2025-5-10 05:06
Powered by Discuz! X3.4
© 2001-2013 Comsenz Inc.