嵌入式爱好者

嵌入式爱好者 门户 知识库 查看内容

通过修改fakeroot使其烧写完增加emmc中分区

2023-12-26 11:13| 发布者: L_S_H| 查看: 51| 评论: 0

类目:  >  知识库     文档编号: 1241

因需求我需要修改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


已解决

未解决

只是看看

最新评论

QQ|小黑屋| 飞凌嵌入式 ( 冀ICP备12004394号-1 )

GMT+8, 2025-5-10 05:06

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

返回顶部