Files
forgefirm/BUILD.md
T
ScottW514 0a05b6b114 docs: present-state build and update docs; fix the ring-size arithmetic
- kas/README.md: the real-time rationale rests on the feeder's bounded
  queue depth, not ring size; the ring is 16 MiB (~84 s at 200 kHz,
  ~28 min at the 10 kHz cloud tick), a capacity for cloud-mode preload.
- BUILD.md, kas config, release checklist, cold-build workflow: only
  forgefirm and meta-openglow (branch scarthgap) are cloned as
  siblings; every ForgeFIRM source repo is fetched by pinned SRCREV.
- UPDATE-SYSTEM.md reads as the present-state design: the cloud-mode
  compatibility baseline is the cloud client's configured firmware
  version, not release metadata; decisions and open items listed
  plainly.
- README.md states what GRBL mode still needs the Glowforge service
  for (camera-referenced homing) and what runs without it.
- BRINGUP.md: generic build-host and fwup-lab references, the retained
  reproductions of the no-fire drill, the System tab.
- LIGHTBURN.md: the arm-window timeouts are machine settings.
- forgefirm-image.bb describes forgectrl as the machine-services
  daemon and points at the right backlog entry.
- American spelling throughout.
2026-08-15 06:12:51 -04:00

3.1 KiB

Build

ForgeFIRM is built with kas, which manages the Yocto layers and pins their versions. The forgefirm repo is the base of the build.

Builds run on a Linux host, or on WSL2 (officially supported by Yocto — keep the tree on the native ext4 filesystem, not /mnt/c).

Host setup

On Ubuntu/Debian (including WSL2), install the Yocto host packages and kas:

sudo apt-get install -y gawk wget git diffstat unzip texinfo gcc build-essential \
  chrpath socat cpio python3 python3-pip python3-pexpect xz-utils debianutils \
  iputils-ping python3-git python3-jinja2 python3-subunit zstd liblz4-tool file \
  locales libacl1 lz4 rsync
sudo locale-gen en_US.UTF-8
pipx install kas        # use pipx — Ubuntu 24.04 (PEP 668) blocks `pip install --user`

For other distros, see the Yocto Project Quick Build. Do not build as root (the Yocto sanity checks refuse it).

Get the sources

Clone the two repos as siblings (the kas config references meta-openglow, branch scarthgap, at ../meta-openglow; kas fetches the upstream Yocto layers itself, and every ForgeFIRM source repo — the kernel module, the controller, the daemon, the cloud apps — is fetched by its recipe at a pinned revision):

git clone https://github.com/ScottW514/forgefirm.git
git clone -b scarthgap https://github.com/ScottW514/meta-openglow.git
openglow-forgefirm/
├── forgefirm/                 ← base repo, build runs here
└── meta-openglow/

Build the image

cd forgefirm
kas build kas/forgefirm-glowforge.yml

kas fetches the upstream layers into forgefirm/layers/, builds in forgefirm/build/, and produces the bootable image at:

forgefirm/build/tmp/deploy/images/glowforge/forgefirm-image-glowforge.rootfs.wic.gz

(The u-boot-glowforge.imx also deployed there is reference-only: every supported install/boot flow keeps the factory bootloader on the eMMC. Its env Kconfig now matches the factory layout — 0x80000 primary / 0x82000 redundant — but it is not wired into any install path and flashing it is unsupported.)

For exact, reproducible layer versions, generate a lockfile once:

kas lock kas/forgefirm-glowforge.yml

See kas/README.md for details, the container-build option, and the Scarthgap migration backlog.

Third-party firmware licensing

The i.MX6 BSP installs NXP firmware blobs (VPU, EPDC) that are distributed under NXP's firmware EULA. The build config accepts it (ACCEPT_FSL_EULA = "1"), and the image ships the license text alongside the blobs at /usr/share/licenses/firmware-imx/EULA — keep it there in any redistributed image. The SDMA firmware comes from linux-firmware, which carries its own license package.

Write to an SD card

cd build/tmp/deploy/images/glowforge
sudo zcat forgefirm-image-glowforge.rootfs.wic.gz | dd of=/dev/sdX bs=1M

To install onto the factory eMMC (into the unused A/B slot, with the factory firmware archived first — one OS runs at a time), see INSTALL.md.