OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 238|回复: 1

[XILINX] ZYNQ镜像(img文件)的制作流程

[复制链接]

2

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2023-2-22
在线时间
17 小时
发表于 2024-4-9 20:32:08 | 显示全部楼层 |阅读模式
本帖最后由 FPGA技术 于 2024-4-9 20:31 编辑

1.1 基础环境配置在制作镜像的过程中需要用到以下工具:
   truncate创建指定大小的文件;
   fdisk将镜像文件分区;
   mkfs将分区格式化;
   kpartx解析镜像文件分区表,方便挂载;
执行如下命令进行安装:
  1. 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。脚本部分内容如下:

  1. sed -e 's/\s*\([\+0-9a-zA-Z]*\).*/\1/' << EOF | sudo fdisk $1
  2.   o # clear the in memory partition table
  3.   n # new partition
  4.   p # primary partition
  5.   1 # partition number 1
  6.    # default - start at beginning of disk
  7.   +500M # 500 MB boot parttionls
复制代码
   修改完成后执行如下命令创建img镜像文件并挂载:
  1. cd <脚本文件所在目录>
  2.     chmod +x create_partitions.sh create_mount_img.sh unmount_image.sh
  3.     ./create_mount_img.sh /dev/shm/test.img /dev/shm/test 1500M
复制代码
先切换到脚本文件所在目录,然后给脚本文件添加可执行权限。
  1. create_mount_img.sh用法如下:
  2.          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命令),如下图所示:
word_pict.png

1.2.2 查看创建的img镜像文件   
脚本执行完后输入ls -alh /dev/shm/命令查看,结果如下:
2.png
可以看到生成了test文件夹和test.img文件,且img文件的大小为1.5G。输入df -Th命令可以看到有如下两行:
3.png
其中/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:
4.png
    在MPSoC-P4之编译出厂镜像文件文档中1.2.2节拷贝内核源码中,并要求已经按照上述文档中1.4.3小节编译完内核和设备树的基础上,进入解压后的linux内核源码目录下,找到图示脚本文件:
5.png
    执行该脚本文件生成image.ub文件:
  1. mkimage -f fit-image.its image.ub
复制代码
fit-image.its脚本会将编译内核源码生成的Image文件、dtb文件和vivado生成的bit文件打包生成image.ub文件。如果没有按照编译镜像的文档编译好设备树文件,该脚本执行会出错。

1.3.2 拷贝文件到相应挂载目录我们需要拷贝如下图所示的文件到boot分区挂载目录下:
6.png
其中BOOT.BIN文件和boot.scr文件是基于编译出厂镜像文档步骤生成的,image.ub文件是上个小节生成的,其他bit文件是p4开发fpga指南中ov5640HDMI显示和ov5640 lcd显示实验中生成的bit文件。将这些文件拷贝到我们挂载boot分区的/dev/shm/test/boot目录下:
7.png
然后解压rootfs.tar.gz压缩包到/dev/shm/test/目录下:
8.png

1.4 卸载挂载的镜像文件
经上述步骤将相应的文件拷贝到对应分区后,就可以卸载镜像文件完成制作了。
卸载镜像文件命令如下:
  1. ./unmount_image.sh /dev/shm/test.img /dev/shm/test
复制代码
   等待脚本执行完成后,成功卸载镜像文件。这个时候/dev/shm目录下的test.img即是我们制作好的镜像文件,可以通过共享文件夹将其拷贝到windows系统中,并使用imageUSB软件烧录验证。












create_image_shell.zip

1.86 KB, 下载次数: 6

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2019-7-5
在线时间
6 小时
发表于 2024-4-29 10:09:00 | 显示全部楼层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-5-15 15:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表