本帖最后由 FPGA技术 于 2024-4-9 20:31 编辑
1.1 基础环境配置在制作镜像的过程中需要用到以下工具:
truncate创建指定大小的文件;
fdisk将镜像文件分区;
mkfs将分区格式化;
kpartx解析镜像文件分区表,方便挂载;
执行如下命令进行安装:
- sudo apt install util-linux kpartx
复制代码
1.2 创建镜像文件一般镜像文件有两个分区:第一个分区用于存放第一阶段的引导启动程序,如u-boot,linux内核镜像和设备树等文件,一般为FAT32文件系统,称为boot分区;第二个分区用于存放根文件系统,一般为ext4文件系统,称为rootfs分区。
在制作img镜像文件过程中,我们将用到的命令写成了三个shell脚本文件,其作用如下:
create_mount_img.sh-创建img镜像文件并挂载,引用create_partitions.sh。
create_partitions.sh-创建镜像文件的分区。
unmount_image.sh-卸载镜像文件。
脚本可以从附件直接下载。
1.2.1 创建img镜像文件并挂载
创建镜像文件首先要明确两件事:第一,我们要创建多大的img镜像文件,是1GB、1.5GB还是7GB;第二,img镜像文件的第一个分区多大,是100MB、200MB还是500MB。
本例在制作P4出厂镜像时以创建1.5GB镜像文件和500MB第一个分区大小为例。
首先要修改create_partitions.sh脚本第24行,将+100M # 100 MB bootparttion改为+500M# 500 MB boot parttion。也就是将该脚本创建的第一个分区默认大小改为500MB。脚本部分内容如下: - sed -e 's/\s*\([\+0-9a-zA-Z]*\).*/\1/' << EOF | sudo fdisk $1
- o # clear the in memory partition table
- n # new partition
- p # primary partition
- 1 # partition number 1
- # default - start at beginning of disk
- +500M # 500 MB boot parttionls
复制代码 修改完成后执行如下命令创建img镜像文件并挂载:
- cd <脚本文件所在目录>
- chmod +x create_partitions.sh create_mount_img.sh unmount_image.sh
- ./create_mount_img.sh /dev/shm/test.img /dev/shm/test 1500M
复制代码 先切换到脚本文件所在目录,然后给脚本文件添加可执行权限。
- create_mount_img.sh用法如下:
- create_mount_img.sh <img镜像文件名> <img挂载目录> <img镜像文件大小>
复制代码 镜像文件名和挂载目录位置任意。镜像文件大小必须为整数,比如1.5G中的1.5就不是整数,需要换算成1500M。单位可以是K,M,G,T,P,E,Z,Y(powers of 1024),比如10K就是10*1024,如果是KB,MB…(powers of 1000),比如10KB就是10*1000。
上面命令中我们指定需要创建的img镜像文件名为test.img,其位置在/dev/shm目录下;挂载目录为/dev/shm/test,没有会自动创建;镜像文件大小为1500M,也就是1.5G,在执行的过程中会要求输入用户密码(因为用了sudo命令),如下图所示:
1.2.2 查看创建的img镜像文件
脚本执行完后输入ls -alh /dev/shm/命令查看,结果如下:
可以看到生成了test文件夹和test.img文件,且img文件的大小为1.5G。输入df -Th命令可以看到有如下两行:
其中/dev/shm/test是img镜像文件ext4分区挂载的位置;/dev/shm/test/boot是img镜像文件第一个分区(boot分区)挂载的位置。现在img镜像文件成功创建并挂载。
1.3 拷贝Linux系统相关文件到相应挂载目录
制作的出厂镜像中,boot分区需要存放第一阶段的系统引导启动程序,如u-boot、linux内核镜像和设备树等文件。rootfs分区需要存放根文件系统。下面我们分别将需要的文件拷贝到对应的挂载目录中。
1.3.1 制作image.ub文件将2eg,2cg,4ev三个vivado工程分别生成的bit文件复制到ubuntu系统/tftpboot下,并分别改名为system-2eg.bit、system-2cg.bit、system-4ev.bit:
在MPSoC-P4之编译出厂镜像文件文档中1.2.2节拷贝内核源码中,并要求已经按照上述文档中1.4.3小节编译完内核和设备树的基础上,进入解压后的linux内核源码目录下,找到图示脚本文件:
执行该脚本文件生成image.ub文件:
- mkimage -f fit-image.its image.ub
复制代码fit-image.its脚本会将编译内核源码生成的Image文件、dtb文件和vivado生成的bit文件打包生成image.ub文件。如果没有按照编译镜像的文档编译好设备树文件,该脚本执行会出错。
1.3.2 拷贝文件到相应挂载目录我们需要拷贝如下图所示的文件到boot分区挂载目录下:
其中BOOT.BIN文件和boot.scr文件是基于编译出厂镜像文档步骤生成的,image.ub文件是上个小节生成的,其他bit文件是p4开发fpga指南中ov5640HDMI显示和ov5640 lcd显示实验中生成的bit文件。将这些文件拷贝到我们挂载boot分区的/dev/shm/test/boot目录下:
然后解压rootfs.tar.gz压缩包到/dev/shm/test/目录下:
1.4 卸载挂载的镜像文件
经上述步骤将相应的文件拷贝到对应分区后,就可以卸载镜像文件完成制作了。
卸载镜像文件命令如下:
- ./unmount_image.sh /dev/shm/test.img /dev/shm/test
复制代码 等待脚本执行完成后,成功卸载镜像文件。这个时候/dev/shm目录下的test.img即是我们制作好的镜像文件,可以通过共享文件夹将其拷贝到windows系统中,并使用imageUSB软件烧录验证。
|