您尚未登录。

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

metro
会员
注册时间: 2019-03-09
已发帖子: 445
积分: 489

在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
已发帖子: 445
积分: 489

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
已发帖子: 445
积分: 489

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
已发帖子: 445
积分: 489

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
已发帖子: 445
积分: 489

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

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

离线

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

metro
会员
注册时间: 2019-03-09
已发帖子: 445
积分: 489

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

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,349
积分: 9202

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

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





离线

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

huangrunlei
会员
注册时间: 2020-01-23
已发帖子: 4
积分: 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
积分: 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
已发帖子: 445
积分: 489

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
积分: 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
已发帖子: 445
积分: 489

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
积分: 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
已发帖子: 445
积分: 489

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部分一样手动修改吧。

离线

#15 2020-06-29 19:08:26

panezion
会员
注册时间: 2020-06-29
已发帖子: 4
积分: 4

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

谢谢,和楼主同样的板子,用了petalinux-package --wic生成了wic镜像,但是无法启动啊,xsa文件是官方的那个release生成的。

离线

#16 2020-06-29 19:23:53

panezion
会员
注册时间: 2020-06-29
已发帖子: 4
积分: 4

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

楼主可以共享一下vivado的项目嘛 想试试怎么从--get-hw-description=xxx.xsa 生成项目,我这边用的2020.01 过程是这样的
用了官方的vivado项目生成xsa文件,
1. petalinux-create -t project --template zynqMP -n my_xxx
2. petalinux-config --get-hw-description=xxx.xsa  只配置uart
3. petalinux-build
4. petalinux-package --boot --u-boot
5. petalinux-package --wic

离线

#17 2020-07-08 04:05:59

光圈电子科技
会员
注册时间: 2020-07-08
已发帖子: 1
积分: 1

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

楼主可以详细说明一下petalinux-config内的配置嘛?Edgeboard这块板是不是要用ZCU-102的配置?那个MACHINE NAME怎么填?
我现在填了zcu102编译以后启动卡在
Xilinx Zynq MP First Stage Boot Loader
Release 2019.1   Jul  7 2020  -  18:17:40

后面就没有下文了

离线

#18 2020-07-08 16:24:56

zww
会员
注册时间: 2020-02-24
已发帖子: 4
积分: 4

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

我试一下看能不能把openwrt移植上去

离线

#19 2020-07-21 17:17:22

finelei2002
会员
注册时间: 2020-07-21
已发帖子: 3
积分: 3

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

这是升级后的芯片版本吧,这个开发还是有一定难度的,资料不是太多

离线

#20 2020-08-06 08:13:13

hellosunshine
会员
注册时间: 2020-08-05
已发帖子: 1
积分: 1

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

你好, 你找到可用的vivado工程了吗, 我也在重新编译系统,但是不知道怎么配置.


panezion 说:

楼主可以共享一下vivado的项目嘛 想试试怎么从--get-hw-description=xxx.xsa 生成项目,我这边用的2020.01 过程是这样的
用了官方的vivado项目生成xsa文件,
1. petalinux-create -t project --template zynqMP -n my_xxx
2. petalinux-config --get-hw-description=xxx.xsa  只配置uart
3. petalinux-build
4. petalinux-package --boot --u-boot
5. petalinux-package --wic

离线

#21 2021-02-26 11:42:30

tom
会员
注册时间: 2018-03-14
已发帖子: 128
积分: 127.5

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

metro 说:

又尝试了一下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


我也遇到这个问题了,我的qspi flash为MX25L25635F,部署jffs2出现jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0078ff58: 0x00bf instead 错误。

按照你的方法,修改了下内核spi擦除大小,错误依旧。  网上有人说是内核版本问题,目前没有尝试,感觉这么基础的问题,不应该发生

edgeboard lite 用的是什么qspi?  一般的qspi都是支持4k扇区擦除才对呀

离线

#22 2021-02-26 11:52:35

tom
会员
注册时间: 2018-03-14
已发帖子: 128
积分: 127.5

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

刚查到edgeboard lite的原理图了,用的MT25QU256ABA1EW9-0SIT,对着手册看了下,是支持4k sector擦除的。

离线

#23 2021-02-27 10:26:50

tom
会员
注册时间: 2018-03-14
已发帖子: 128
积分: 127.5

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

换了个版本内核,OK了。原来使用的Xilinx 2016.4版本,切换到2019.1版本,jffs2可以了。

离线

#24 2022-03-05 17:51:04

liyucai
会员
注册时间: 2019-12-06
已发帖子: 45
积分: 22

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

petalinux 把所有文件都集成为 BOOT.bin 和 image.ub,这样要修改一些设置不方便。
正点原子的文档里有讲怎么把它们分开为几个文件。
另外,如果能不安装 petalinux ,只安装几个必要的工具就好了。 petalinux 太大了。

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn