WhyCan Forum(哇酷论坛)

人过留名,雁过留声,感谢各位朋友不离不弃地支持。 QQ: 516333132, 微信: whycan_cn (哇酷网/挖坑网/填坑网) admin@whycan.cn

您尚未登录。

#1 2019-12-28 17:50:38

metro
会员
注册时间: 2019-03-09
累计积分: 150

在Zynq MPSoC Ultrascale+上移植PetaLinux(以EdgeBoard Lite FX3为例)

近来尝试了一下Xilinx的PetaLinux,感觉十分好用,不到半个小时就可以生成带rootfs的所有文件(包括PMUFW、ATF、bitstream、U-boot、Linux kernel和busybox)并打包,不过在其中也遇到了一些问题,故在此记录移植过程。
本次移植使用的PetaLinux版本是2019.2,软件和相关文档的地址见PetaLinux工具,下文基本是按照文档所述方法进行的。
本次移植是在EdgeBoard Lite FX3开发板上实现的,见收到EdgeBoard Lite了,简单地开个箱

最近编辑记录 metro (2019-12-28 18:01:18)

离线

#2 2019-12-28 18:01:04

metro
会员
注册时间: 2019-03-09
累计积分: 150

Re: 在Zynq MPSoC Ultrascale+上移植PetaLinux(以EdgeBoard Lite FX3为例)

首先,当然是需要先安装PetaLinux。安装包有点大,达到了近8个G。在下载的同时,可以根据PetaLinux工具文档的记述安装所有依赖软件。
安装的方式很简单,直接运行即可,注意文档要求不能以root权限执行安装程序。安装的目标文件夹可以自由指定,命令如下:

./petalinux-v2019.2-final-installer.run <install-path>

之后根据提示完成安装即可。
PS:PetaLinux对Vivado/Vitis的要求并不是必需的,但可以安装Vivado/Vitis以实现完整功能,例如JTAG启动等。

离线

#3 2019-12-28 18:32:23

metro
会员
注册时间: 2019-03-09
累计积分: 150

Re: 在Zynq MPSoC Ultrascale+上移植PetaLinux(以EdgeBoard Lite FX3为例)

接下来是编译PetaLinux。

首先是新建工程,在目标文件夹下运行:

petalinux-create --type project --template zynqMP --name demo

这样就会在当前文件夹下新建一个名为demo的文件夹。之后项目的默认名称均为demo。
在开始下一步操作之前,需要切换到项目文件夹:

cd demo

接下来需要从工程中导入配置文件。在最新的Vivado/Vitis中,导出的配置文件已经从HDF变更为XSA。可以在Vivado中通过File - Export - Export Hardware导出XSA文件。之后在PetaLinux中导入XSA文件:

petalinux-config --get-hw-description=<PATH-TO-HDF/XSA DIRECTORY>

稍等片刻之后,将会弹出menuconfig,这里可以简单地修改配置。特别需要注意的是串口的选择,我们这里需要选择ps_uart_1,以对应板子上的USB UART接口。
在配置完毕后,开始正式编译文件:

petalinux-build

之后等待编译完成即可。在我的笔记本(i5 8300H)上需要10分钟左右。
最后,如果需要在SD卡上执行,需要打包BOOT.bin文件:

petalinux-package --boot --format BIN --fsbl images/linux/zynqmp_fsbl.elf --u-boot --fpga <BITSTREAM-PATH>

之后将images/linux文件夹下的BOOT.bin和image.ub文件复制到SD卡的第一个分区(需要格式化为FAT 16/32),之后将拨码开关调整为SD1,插入SD卡启动即可。
如果需要JTAG启动,则需要将拨码开关调整为JTAG,上电并连接好调试器后执行下面命令即可:

petalinux-boot --jtag --uboot --kernel --fpga

JTAG启动的时间比较长,需要耐心等待。

最近编辑记录 metro (2019-12-28 18:32:45)

离线

#4 2019-12-28 18:38:31

metro
会员
注册时间: 2019-03-09
累计积分: 150

Re: 在Zynq MPSoC Ultrascale+上移植PetaLinux(以EdgeBoard Lite FX3为例)

最后提一下遇到的问题。
第一次移植的时候,我发现USB功能无法正常使用,表现是找不到USB控制器,并且对于U-boot和Linux都是如此。
之后搜索了一下,发现问题是没有正确配置USB所致。USB驱动需要指定dual role的具体使用方式,但是默认的设备树没有配置。其实在U-boot启动时也会报错找不到dr_mode。
解决方案是修改设备树。打开项目文件夹下的project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi文件,在末尾添加以下代码即可:

&dwc3_0 {
	dr_mode = "host";
};

之后重新执行petalinux-build和petalinux-package,即可正常使用USB。

离线

#5 2019-12-28 18:53:27

metro
会员
注册时间: 2019-03-09
累计积分: 150

Re: 在Zynq MPSoC Ultrascale+上移植PetaLinux(以EdgeBoard Lite FX3为例)

上传一个自己编译好的版本,只添加了一些基本的接口,欢迎大家测试 tongue
EdgeBoard_20191228-1853.zip

离线

#6 2019-12-28 22:43:28

metro
会员
注册时间: 2019-03-09
累计积分: 150

Re: 在Zynq MPSoC Ultrascale+上移植PetaLinux(以EdgeBoard Lite FX3为例)

又尝试了一下QSPI Flash的编译,又遇到了一些问题,不过最后还是解决了。
根据PetaLinux工具文档,QSPI Flash的编译需要修改以下配置(还是运行petalinux-config进行修改):

  • Subsystem AUTO Hardware Settings - Advanced Bootable Images Storage Settings,选择JFFS2,并且进行相关配置(主要是把各种device都改成primary flash)。

  • Subsystem AUTO Hardware Settings - Flash Settings,修改分区表信息,需要在boot、bootenv、kernel之后再建立一个jffs2分区,并分配合适的空间。

  • Image Packaging Configuration,确保Root filesystem type为JFFS2,并且调整jffs2 erase block size(本例为64 KiB)。

在修改并重新编译后,将BOOT.bin、image.ub和rootfs.jffs2文件按照分区表拼接在一起,并且通过SD卡写入到QSPI Flash中。
但是,重启之后发现,在Linux启动的时候,将会弹出大量的jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at ...的错误。
搜索了一下,发现是因为内核默认使用了4K大小的erase sector,但当前的QSPI Flash不支持,因此出现此错误。
知道了问题,解决方法就简单了。运行petalinux-config -c kernel进行内核配置,进入到Device Driver - Memory Technology Device (MTD) support - SPI-NOR device support,关闭Use small 4096 B erase sectors即可。

最后同样上传一下编译好的flash镜像:flash.zip

最近编辑记录 metro (2019-12-28 22:45:29)

离线

#7 2019-12-29 19:43:58

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 8,953

Re: 在Zynq MPSoC Ultrascale+上移植PetaLinux(以EdgeBoard Lite FX3为例)

前排围观, 感谢楼主分享!

离线

#8 2020-01-28 20:29:06

huangrunlei
会员
注册时间: 2020-01-23
累计积分: 4

Re: 在Zynq MPSoC Ultrascale+上移植PetaLinux(以EdgeBoard Lite FX3为例)

我也买了EdgeBoard。在楼主的基础上,我想把根文件系统放到SD卡的第二个分区,参考ug1144总是出现下面的错误。
VFS: Cannot open root device "mmcblk1p2" or unknown-block(179,26): error -30

看起来好像是SD卡写保护了。
mmcblk1: mmc1:0001 00000 1.89 GiB (ro)

楼主知道怎么回事吗?

启动串口输出见这里: start_msg.txt

最近编辑记录 huangrunlei (2020-01-28 20:39:22)

离线

#9 2020-01-28 23:56:24

huangrunlei
会员
注册时间: 2020-01-23
累计积分: 4

Re: 在Zynq MPSoC Ultrascale+上移植PetaLinux(以EdgeBoard Lite FX3为例)

自己找到办法了。这个问题比较典型,网上资料也比较少,贴出来可能其他人会有用。我自己折腾了好几天。
主要参考了这个帖子:http://www.zedboard.org/content/ultrazed-iocc-sd-card-ro

简单说一下原因。SD卡是有写保护的,但是TF卡是没有写保护的。根据AR#61064 (https://www.xilinx.com/support/answers/61064.html),硬件设计的时候应该把SDIO的WP脚拉低,但是EdgeBoard并没有这么做。

解决办法是在project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi文件中增加以下内容:
&sdhci1 {
status = "okay";
max-frequency = <50000000>;
no-1-8-v; /* for 1.0 silicon */
disable-wp;
};

最近编辑记录 huangrunlei (2020-01-29 00:02:07)

离线

#10 2020-01-29 00:06:08

metro
会员
注册时间: 2019-03-09
累计积分: 150

Re: 在Zynq MPSoC Ultrascale+上移植PetaLinux(以EdgeBoard Lite FX3为例)

huangrunlei 说:

自己找到办法了。这个问题比较典型,网上资料也比较少,贴出来可能其他人会有用。我自己折腾了好几天。
主要参考了这个帖子:http://www.zedboard.org/content/ultrazed-iocc-sd-card-ro

简单说一下原因。SD卡是有写保护的,但是TF卡是没有写保护的。根据AR#61064 (https://www.xilinx.com/support/answers/61064.html),硬件设计的时候应该把SDIO的WP脚拉低,但是EdgeBoard并没有这么做。

解决办法是在project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi文件中增加以下内容:
&sdhci1 {
status = "okay";
max-frequency = <50000000>;
no-1-8-v; /* for 1.0 silicon */
disable-wp;
};

感谢分享,不过我还没试过把rootfs放在SD卡。。
不过如果我没记错的话,应该是可以在Vivado关闭WP的,不需要在设备树进行额外操作。所以要么是原本的Vivado工程有问题,要么就是PetaLinux的bug了。

最近编辑记录 metro (2020-01-29 00:16:08)

离线

#11 2020-01-29 10:11:31

huangrunlei
会员
注册时间: 2020-01-23
累计积分: 4

Re: 在Zynq MPSoC Ultrascale+上移植PetaLinux(以EdgeBoard Lite FX3为例)

你说的对,我也觉得Vivado项目里应该有办法。但是我本人是软件背景的,Vivado不大会用,做这个用的Vivado项目是淘宝卖家给的。网上找的的资料也是改设备树的,就这样先这样绕过这个问题。
如果有人只读怎么怎么改Vivado,在这里讲一下。

metro 说:

感谢分享,不过我还没试过把rootfs放在SD卡。。
不过如果我没记错的话,应该是可以在Vivado关闭WP的,不需要在设备树进行额外操作。所以要么是原本的Vivado工程有问题,要么就是PetaLinux的bug了。

最近编辑记录 huangrunlei (2020-01-29 10:14:03)

离线

#12 2020-01-29 10:21:27

metro
会员
注册时间: 2019-03-09
累计积分: 150

Re: 在Zynq MPSoC Ultrascale+上移植PetaLinux(以EdgeBoard Lite FX3为例)

huangrunlei 说:

你说的对,我也觉得Vivado项目里应该有办法。但是我本人是软件背景的,Vivado不大会用,做这个用的Vivado项目是淘宝卖家给的。网上找的的资料也是改设备树的,就这样先这样绕过这个问题。
如果有人只读怎么怎么改Vivado,在这里讲一下。

在Vivado的Block Diagram中双击Zynq的IP核,按照图示关闭SD1的WP即可。
(11).png
如果不介意的话,也可以用我之前做好的xsa和bit。不过现在板子不在身边,没法测试是否有你说的问题。
注明一下,xsa和bit是用最新的Vivado 2019.2生成的,不知道会不会有兼容性问题。

最近编辑记录 metro (2020-01-29 10:22:27)

离线

#13 2020-01-29 22:29:31

huangrunlei
会员
注册时间: 2020-01-23
累计积分: 4

Re: 在Zynq MPSoC Ultrascale+上移植PetaLinux(以EdgeBoard Lite FX3为例)

谢谢回复。SD1的WP本来就是关闭的。
今天看了下面这个帖子,还是不知道改怎么做。
https://forums.xilinx.com/t5/Processor-System-Design/Zynq-SDIO-via-EMIO/td-p/327479
还好现在这个问题已经绕过了,不会block下一步,可以慢慢想办法。

metro 说:

在Vivado的Block Diagram中双击Zynq的IP核,按照图示关闭SD1的WP即可。
https://whycan.cn/files/members/1510/(11).png
如果不介意的话,也可以用我之前做好的xsa和bit。不过现在板子不在身边,没法测试是否有你说的问题。
注明一下,xsa和bit是用最新的Vivado 2019.2生成的,不知道会不会有兼容性问题。

离线

#14 2020-01-30 09:02:44

metro
会员
注册时间: 2019-03-09
累计积分: 150

Re: 在Zynq MPSoC Ultrascale+上移植PetaLinux(以EdgeBoard Lite FX3为例)

huangrunlei 说:

谢谢回复。SD1的WP本来就是关闭的。
今天看了下面这个帖子,还是不知道改怎么做。
https://forums.xilinx.com/t5/Processor-System-Design/Zynq-SDIO-via-EMIO/td-p/327479
还好现在这个问题已经绕过了,不会block下一步,可以慢慢想办法。

昨天有其他人反应了相同的问题,这可能确实是PetaLinux的bug。可能暂时也没有什么好的解决方法,只能像USB部分一样手动修改吧。

离线

页脚