uSD Image Builder
Scripts to build uSD images for NDI demo platforms based on Debian.
README.md
This file
CHANGELOG.md
List of notable changes
a10-socdk.conf
Config file for Arria-10 SoC Development Kit
sockit.conf
Config file for SoCKit image
zcu104.conf
Config file for ZCU104
zybo.conf
Config file for Zybo-Z7-20 and Arty-Z7-20
build.sh
Main image build script
common.sh
Functions common to several scripts
boot.sh
Extracts boot files from a PetaLinux project
debootstrap.sh
Creates a Debian root filesystem from scratch
second-stage.sh
The debootstrap second-stage and rootfs customizations
mk.uSD.sh
Creates a uSD image from boot files and a rootfs
part.txt
Partion table for the uSD
part.a2.txt
Partion table for uSD images with Altera A2 partition
update.*.tgz.sh
Example to generate optional tgz files
The build scripts are based on a config script which provides details needed to create an image. The main details required are a pointer to the boot files and various architecture specific information (eg: the Debian architecture name and the qemu static binary to use for an emulated chroot environment). Various other settings may be tweaked as well, including the uSD target size, system host name, etc. Refer to the existing *.conf files for details.
Build Dependencies
debootstrap
Used to create a root filesystem image. Currently using version 1.0.128nmu2 with Debian 12 (bullseye). Many operating systems ship with an older version of debootstrap that is available through their package managers. It is recommended that a more recent version be installed from a preexisting .deb package. See sect D.3.2 for more details.
qemu-static
Required to run debootstrap second-stage. Currently tested with version 4.2.1. Note that transparent emulation needs to be set up on the host system. See the QEMU documentation for more details on how to configure this.
Build an image
To build an image from scratch, simply run the build.sh script with the desired configuration specified:
Rebuild an image
It is often not necessary to run all steps from scratch. Once an initial build has created the required bootfs and rootfs directories, each component of the uSD image may be updated independently. The components that makeup the uSD image are:
bootfs.<board>/
This directory contains the Xilinx boot files and linux kernel modules extracted from the PetaLinux project. This directory is created and updated by running the
boot.sh
script.../linux_kernel/<board>/boot
This directory contains the Altera boot files and linux kernel modules. This directory is created and updated by running make in the
../linux_kernel/<board>
directory.root.<deb_arch>.tgz
This file is manually generated and if present will be extracted to the root directory of the target file-system by the root user. This is currently used to install pre-compiled NDI example binaries to /usr/local/bin and the required shared libraries to /usr/local/lib.
This file is processed by the
second-stage.sh
script, so any changes require re-runningdebootstrap.sh
or manually applying the changes to the rootfs directory.Note this file should include full paths preceded by a leading ./ eg:
./usr/local/lib/file.so
. Below is one example of how to properly create this file:user.<deb_arch>.tgz
This file is similar to the
root.<deb_arch>.tgz
file, above, except it is extracted into the default user's home directory by the default user. This file is used to install the HDMI start and stop scripts for the ZCU104, and is unused by the Zybo-Z7-20 example. Place any files that need to be owned by the default user and thus cannot be placed in the root archive (since the default username, uid/gid, and home directory may change) into this archive.This file is processed by the
second-stage.sh
script, so any changes require re-runningdebootstrap.sh
or manually applying the changes to the rootfs directory.rootfs.<deb_arch>/
This directory contains a stock Debian install generated by debootstrap along with some modifications required to make a usable image (eg: create /etc/fstab and enable networking) and tweaks required for this example (eg: build and install the libuio package). This directory is generated by running the
debootstrap.sh
script, while most of the customizations to the rootfs occur in thesecond-stage.sh
script.Running debootstrap.sh deletes any existing rootfs and recreates it from scratch, which is a lengthy process and does not allow for modifications other than editing the
second-stage.sh
script. Once created, however, the rootfs directory may be edited manually, just be careful with file-system permissions and user ids. It is also possible to chroot to the rootfs and execute native commands, eg:
Once any desired changes have been made to the above components, a new image can be created by running:
Last updated
Was this helpful?