I am working on integrating Mender with a Zynq 7000 series board from Xilinx and I am wondering if there is interest in putting together a standard board integration. I have seen two posts on here with people asking for help:
A couple of challenges that I see are:
- Xilinx pushes you to use their Petalinux tool which adds a custom wrapper around bitbake and Yocto. This makes some of the instructions quite custom to Xilinx.
- The current version of Petalinux (18.3) uses the Rocko version from Yocto and there isn’t an easy upgrade (That I know of) so the integration would likely only support that version.
- Xilinx uses FIT (Flattened image tree) files for both the initial boot and for the kernel and device-tree secondary boot. FIT files don’t currently seem to be supported by Mender.
I am, hopefully, close to getting an initial install of Mender working and will be happy to provide the changes I made but I think it could be useful to the community to have a reference integration board.
We have several other integration setups that use Vendor provided BSPs so I think this would be a fine approach for the Zynq platforms. There are many vender BSPs stuck on Rocko so that shouldn’t be a problem.
If you get FIT images working I suspect that would be interesting to have submitted back.
I am also integrating Mender on a Zynq 7000 series board using Petalinux 2018.3.
To balance what you said, there are some Xilinx wiki pages on how to work with pure Yocto. Plus I did not have particular problems using rocko version of Yocto.
However, I agree on using Petalinux being the main challenge : I have been struggling (and still am) with Petalinux scripts which are not open-source and perform obscure and awkward Yocto files generation…
I think having a Xilinx Zynq board integration could be nice, but I am afraid it should not use Petalinux tools, because it seem to require a lot of work - sometimes only just trying to bypass petalinux logic. Also it does not seem stable enough, they regularly change a lot of stuff between versions.
Concerning FIT images:
Maybe this is not what you want, but I managed to disable FIT image generation to use a zImage instead (compatible with mender), ask me if you need help for that !
A quick update on my progress. I have continued to use the Petalinux wrapper (interface?) and managed to get a build working that generates a .sdimg that can be flashed and work (As per the Integration Checklist) with no modifications.
I have still have a couple of hard-coded paths, and some extraneous debug code but I believe it is close. The next step is to try and reproduce the result from a clean build and produce some cleaner modification instructions. I will try and post some usable reference material in the next few days.
I am still on the fence about using Petalinux or not. There are some features of it that I can’t easily see getting rid of without adding other manual processes. For the near term, I don’t plan on further exploring removing Petalinux.
On a side note, I was mistaken about the FIT images. Mender doesn’t seem to require a specific file format. It is U-Boot that loads the FIT image and as long as the file was in the right location then I didn’t have any issues.
Out of interest, what value are you getting out of Petalinux?
This would also have been my expectation
Thank you for your work and our community will greatly benefit if there is a reference integration for the Xilinx Zynq Board and if there are any questions I will gladly assist along the way.
Regarding “Petalinux”, I do not really know what this is but generally when we have done board reference board integrations we have tried to minimize the impact on the workflow due to an Mender integration. Meaning if upstream is using a “custom” tool to setup/configure the environment I have tried keeping that workflow intact, even if I might not agree with the approach.
One example is the IOT2000 boards from Siemens who use a custom tool to setup and build Yocto,
To be honest it probably isn’t a huge amount of value but the main feature I have been using is on the hardware (FPGA) to Linux integration. The petalinux-config --set-hw-description generates/updates some initialization scripts that I haven’t had to worry about yet. As part of this Mender integration I have started to realize though that it is likely generating a bunch of things I don’t need. For example, the platform-auto.h for uboot, I am guessing the majority of it is actually ignored when using Mender.
The other area is in the documentation and support. This is a minor point but as part of getting started with the Zynq processor it helped (I think) to use the Petalinux workflow. The documentation for the module I am using from Trenz also makes use of Petalinux.
Finally, I probably should have worded my comment a bit differently. I am on the fence as of right now, but looking ahead I would much prefer to use Yocto natively. I think the value in getting a reference design out sooner outweighed spending the time to remove Petalinux.
Sorry for the long-winded reply.
OK, I have created a github repo and a board integration post here: [INCOMPLETE] Xilinx Zynq 7000
Feedback is requested but hopefully this can help get other people started.
I will take a closer look at this.