Questions related to Custom 3.0 images


I am wondering what is the best way to add a package a custom 3.0 image.

If I add the package to multistrap.config and build with

make BOARDDIR=<abs path> BOARD=<board> PYNQ_SDIST=<abs path> REBUILD_PYNQ_ROOTFS=true

Does it end up in jammy.<board>.tar.gz?

Is there a board specific way to do this? I tried creating a package but it appears apt-get cannot be used in

The 3.0 custom build process is much improved and I understand the broad strokes. What I am not clear on is the config file in sdbuild/ubuntu/<codename>/<arch>, I have not come across this in the multistrap docs. Is it a PYNQ thing or more general?

Thanks for the excellent work,

1 Like


It has been days after the build and test. I forgot some details but the prebuilt image now is split into two major sections. If you see there are two zip files would require during build. I need to open up the build machine to study back if you really need deep answer.

However, if you just need to build custom board without a guide, See link should help you out:


Thanks I do have a custom image building (was easy in 3.0) so it’s more the finer details I am chasing.


Hi Geoff,

You should be able to use apt to install ubuntu packages in a script – we do it in the sdfec package.

The config in sdbuild/ubuntu is a PYNQ thing, the makefile splits the generation of an image into multiple stages. If one stage breaks you can make fixes and re-run make without having to rebuild the entire ubuntu rootfs or some of the chunkier packages all over again.

  • STAGE1 is the base ubuntu rootfs, this is what multistrap gives us.
  • STAGE2 and STAGE3 are pynq essentials, like all the python pynq-venv packages, jupyter, pynq itself and xrt
  • STAGE4 are board specific packages that you insert into your .spec file

If you include a ubuntu package in the multistrap.config, then it will be included in STAGE1 and, you are correct, show up as the agnostic rootfs output tarball.



Thanks I’ll check that package out.