本帖最后由 正点原子运营 于 2024-1-25 11:15 编辑
1)实验平台:正点原子 DFZU2EG_4EV MPSoC开发板
2) 章节摘自【正点原子】DFZU2EG_4EV MPSoC开发板之嵌入式Linux 驱动开发指南 V1.0
3)购买链接:https://detail.tmall.com/item.htm?id=692450874670
4)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/fpga/zdyz-MPSOC.html
5)正点原子官方B站:https://space.bilibili.com/394620890
6)Linux技术交流QQ群:887820935
6.3.8 编译Petalinux工程现在我们就可以编译整个Petalinux工程了,在终端输入如下命令: - <font face="Tahoma">petalinux-build</font>
复制代码该命令将生成设备树DTB文件、fsbl文件、U-Boot文件,Linux内核和根文件系统映像。编译完成后,生成的映像将位于工程的images目录下。需要说明的是fsbl、U-Boot这两个我们在工程中并没有配置,这是因为Petalinux会根据xsa文件和6.3.4节的配置petalinux工程自动配置fsbl和uboot,如无特需要求,不需要再手动配置。 执行结果如下图所示: 6.3.9 制作BOOT.BIN启动文件Petalinux提供了petalinux-package命令将PetaLinux项目打包为适合部署的格式,其中“petalinux-package--boot”命令生成可引导映像,该映像可直接与Zynq系列设备(包括Zynq-7000和Zynq UltraScale + MPSoC)或基于MicroBlaze的FPGA设计一起使用。对于Zynq系列设备,可引导格式为BOOT.BIN,可以从SD卡引导启动。对于基于MicroBlaze的设计,默认格式为MCS PROM文件,适用于通过Vivado或其他PROM编程器进行编程。 ZYNQ的启动文件BOOT.BIN一般包含fsbl文件、bitstream文件和uboot文件。使用下面的命令可生成BOOT.BIN文件: - petalinux-package --boot --fsbl--fpga --u-boot --force
复制代码选项“--fsbl”用于指定fsbl文件所在位置,后面接文件对应的路径信息,如果不指定文件位置,默认对应的是images/linux/zynqmp_fsbl.elf;选项“--fpga”用于指定bitstream文件所在位置,后面接该文件对应的路径信息,默认对应的是images/linux/system.bit,实际可能有区别;选项“--u-boot”用于指定U-Boot文件所在位置,后面接该文件所在路径信息,默认为images/linux/u-boot.elf。这里笔者均没有指定对应的文件的路径信息,那么Petalinux会自动使用默认文件。执行结果如下图所示: 可以看到Petalinux自动将PMU(PlatformManagement Unit) firmware文件pmufw.elf和ATF(Arm trusted firmware)文件bl31.elf包含进BOOT.BIN。 生成的BOOT.BIN文件放在Petalinux工程的images/linux目录下,上一小节编译Petalinux工程生成的文件同样存放在images/linux目录下,如下图所示: 6.3.10 制作SD启动卡如果使用SD卡引导linux系统启动,一般需要在SD卡上有2个分区。一个分区使用FAT32文件系统,用于放置启动镜像文件(如BOOT.BIN,linux镜像等),另一分区使用EXT4文件系统,用于存放根文件系统。 需要说明的是在6.2.4节配置petalinux工程中,“Image Packaging Configuration”子菜单根文件系统的类型的配置使用的是默认的INITRAMFS,所以只需要一个使用FAT32文件系统的分区就可以了。当设置为“EXT”则需要另一个存放根文件系统的分区。 本小节先讲解SD卡的分区和格式化,然后说明将哪些文件复制到SD卡中。此处的SD卡指的是那种小卡,也称为TF卡。 注:在使用SD卡前需要先将sd卡中的数据做备份,否则会丢失SD卡中的数据。 将SD卡插入到读卡器中、并将读卡器插入电脑并连接到Ubuntu系统,在Ubuntu系统中找到SD卡所对应的设备节点,笔者插入的SD卡对应的设备节点为/dev/sdc。在终端中输入如下命令: - umount/dev/sdc*
- sudofdisk /dev/sdc
复制代码输入“p”执行结果如下图所示: 可以看到当前的分区表,有一个FAT32的分区。在开始新分区之前需要将以前的分区删除,键入“d”,删除该分区,再次键入“d”时会出现下图所示的红色字体提示,表明已无存在的分区。如果SD卡存在多个分区,需要全部删除,存在多个分区的情况下,键入“d”时会提示选择需要删除的分区编号。 下面开始新建分区。输入“n”创建一个新分区。通过选择'p'使其为主,使用默认分区号1和第一个扇区2048。设置最后一个扇区,也就是设置第一个分区的大小,一般设置500M足够了,通过输入“+ 500M”,为该分区预留500MB,如下图所示: 现在设置分区类型,输入“t”,然后输入“c”,设置为“W95 FAT32 (LBA)”,如下图所示: 输入“a”,设为引导分区,如下图所示: 第一个分区就创建好了,开始创建第二个分区。 通过键入“n”来创建根文件系统分区。后面一路默认就可以了,如下图所示: 如果现在输入“p”检查分区表,会看到刚刚创建的2个分区。如果没问题,键入“w”以写入到SD卡并退出。 完成了分区创建后,就可以格式化分区了。在终端输入如下命令: - sudomkfs.vfat -F 32 -n boot /dev/sdc1
- sudomkfs.ext4 -L rootfs /dev/sdc2
复制代码将第一个分区格式化成FAT32分区并命名为boot,将第二个分区格式化成ext4分区并命名为rootfs。执行结果如下图所示: 格式化分区之后就可以挂载分区了(重新插拔读卡器或者使用mount命令进行挂载)。挂载完成后,我们将该工程image/linux目录下的BOOT.BIN和image.ub文件拷贝到名为boot的分区也即/dev/sdc1分区中,结果如下图所示: 本实验只需要这两个文件即可,现在可以卸载SD卡了。 6.3.11 开发板启动模式设置将SD卡插入DFZU2EG_4EVMPSoC开发板的SD卡槽(卡槽位于开发板背面),然后使用USB Type-C连接线将开发板USB_UART接口与电脑连接,用于串口通信。DFZU2EG_4EV MPSoC开发板连接SD(TF)卡的正面图和背面图如图 6.3.32和图 6.3.33所示: 接下来将DFZU2EG_4EV MPSoC开发板上的启动模式开关BOOT MODE的四个开关的第二个与第四个开关拨到下面(置为OFF),即设置为从SD卡启动。不同的启动方式与四个拨码开关的状态对应关系如下图所示: 最后连接开发板的电源线给开发板上电。 6.3.12 打开串口上位机,进入Linux系统打开MobaXterm串口上位机或其它串口上位机。上位机打印Linux启动信息如下: 停留在登录处,此处使用root用户登录,登录密码为“root”(去掉双引号),登录进去后,界面如下: 如果我们把视线移到开发板,会看到板上的LED灯全都是亮的,其中,底板上的PL_LED1和PS_LED1同频闪烁,这是设备树配置文件产生的结果,还记得那个“timer”么。 至此我们就走完了Petalinux开发Linux的整个流程。正如俗语所说师傅领进门,修行靠个人,Petalinux的功能远不止如此,其他功能读者有兴趣可进行探索,建议参考ug1144参考手册,也就是Xilinx官方编写的PetaLinux工具使用说明文档,已提供在开发板光盘资料:开发板资料盘(A盘)\8_ZYNQ&FPGA参考资料\Xilinx\UserGuide\ug1144-petalinux-tools-reference-guide.pdf。 特别说明:以后我们使用主机终端指代电脑上Ubuntu系统的终端,串口终端指代通过串口线连接到开发板显示在串口上位机中的终端。 6.4 解决Petalinux由于网络原因产生的编译错误如果编译Petalinux工程时,出现如下图所示的“Fetcher failure: Unable to find file”错误: 图 6.4.1 Fetcher failure: Unable to find file 该压缩包很大,有20多G,里面包含了Petalinux编译需要的各种软件包和库(该压缩包在网盘中已经提供,路径为开发板资料盘(A盘)\4_SourceCode\3_Embedded_Linux\资源文件\downloads.rar)。下载完成后将其复制到Ubuntu虚拟机中并解压。譬如笔者在4.2节创建的share文件夹下创建一个petalinux文件夹,并将该压缩包解压到该文件夹下,如下图所示: 图 6.4.2解压downloads_2019.2.tar.gz得到的文件夹 从Ubuntu虚拟机访问该路径为:/mnt/hgfs/share/petalinux/downloads/。 下面将解压后的路径添加到Petalinux工程中。 进入Petalilnux工程,输入“petalinux-config”配置工程。配置“Yocto Settings ---> Add pre-mirror url”,删除原先的内容,添加解压downloads_2019.2.tar.gz后的绝对路径,添加格式为:file://+downloads_2019.2.tar.gz解压后的路径。对于笔者而言,添加的路径内容为file:///mnt/hgfs/share/petalinux/downloads/,如下图所示: 保存配置,返回到Yocto Settings界面,使能BB_NO_NETWORK,如下图所示: 保存配置并退出。 现在编译就不会出现“Fetcher failure: Unable to find file”错误。
6.5 扩展阅读:3) Petalinux工程目录结构详解:Petalinux用户手册UG1144的附录B(Appendix B)——PetaLinux工程结构 |