mirror of
https://github.com/openglow-org/forgefirm.git
synced 2026-09-27 08:41:13 -07:00
78 lines
3.4 KiB
BlitzBasic
78 lines
3.4 KiB
BlitzBasic
# SPDX-License-Identifier: MIT
|
|
|
|
require forgefirm-image.bb
|
|
|
|
DESCRIPTION = "OpenGlow/ForgeFIRM development image for Glowforge"
|
|
|
|
# Strict superset of forgefirm-image: everything the main image ships, plus
|
|
# debug tooling. forgetest is the release acceptance tool (HTTP :8090) and
|
|
# the bench diagnostics page; it belongs to the bench, never to a release
|
|
# image (https://docs.forgefirm.org/developers/acceptance/). The gfutilities
|
|
# emulator fixtures are the canned frames its service-protocol test answers
|
|
# the service with.
|
|
IMAGE_INSTALL += " \
|
|
forgetest \
|
|
python3-gfutilities-emulator \
|
|
python3-mmap \
|
|
python3-ctypes \
|
|
htop \
|
|
"
|
|
|
|
# python3-mmap and python3-ctypes serve the bench scripts that read the SoC
|
|
# pads through /dev/mem (resume_dark_lead.py, cp_watchdog_timing.py, the
|
|
# accelerometer probes). They are bench tooling: the release image carries
|
|
# neither, and forgetest itself imports neither.
|
|
|
|
# The release recipe trims nano from the shared base list (bench
|
|
# convenience, 8.7 MB with libmagic); the dev image keeps it. Removal specs
|
|
# accumulate and apply after every append, so the variable inside the
|
|
# release recipe's spec is what gets blanked here.
|
|
FORGEFIRM_RELEASE_TRIM = ""
|
|
|
|
# debug-tweaks (passwordless root, root SSH login) belongs ONLY to the dev
|
|
# image - never the release image. It lives here, not in the shared kas
|
|
# local.conf, so the release forgefirm-image cannot inherit it.
|
|
IMAGE_FEATURES += " \
|
|
tools-debug \
|
|
debug-tweaks \
|
|
"
|
|
|
|
# Dev images boot from SD, never from a 200 MiB eMMC slot: lift the slot
|
|
# ceiling and give the filesystem generous working space instead.
|
|
IMAGE_ROOTFS_MAXSIZE = ""
|
|
IMAGE_ROOTFS_EXTRA_SPACE = "262144"
|
|
|
|
# Dev builds identify by build timestamp (matches the artifact name),
|
|
# tagged so a bench machine is never mistaken for a release.
|
|
FORGEFIRM_VERSION_STRING = "${DATETIME} (dev)"
|
|
# The rootfs functions that write the string are in the do_rootfs
|
|
# signature; DATETIME must not be, or the basehash changes at every parse
|
|
# and bitbake refuses the build as non-deterministic.
|
|
FORGEFIRM_VERSION_STRING[vardepsexclude] += "DATETIME"
|
|
|
|
# /etc/forgefirm-dev marks a dev image on the rootfs; its content is the
|
|
# version string. The sshd init script starts sshd on a dev image without
|
|
# the panel's enable flag (/run/forgefirm/ssh-enabled), and forgectrl
|
|
# reads the same marker. A release image has no such file.
|
|
write_forgefirm_dev_marker() {
|
|
echo "${FORGEFIRM_VERSION_STRING}" > ${IMAGE_ROOTFS}${sysconfdir}/forgefirm-dev
|
|
}
|
|
write_forgefirm_dev_marker[vardepsexclude] += "DATETIME"
|
|
ROOTFS_POSTPROCESS_COMMAND += "write_forgefirm_dev_marker "
|
|
|
|
# The two factory rootfs slots, read-only under /factory/img1 and
|
|
# /factory/img2: a bench convenience for reading a factory image in place
|
|
# (the ffboot inventory reuses the mounts). The release image mounts no
|
|
# factory slot; it reads one through a temporary read-only mount when it
|
|
# needs to (ffboot -l). No nofail: busybox mount hands it to the kernel
|
|
# as a filesystem parameter, which the kernel rejects (the mount fails
|
|
# with EINVAL); mount -a goes on past a slot that does not mount anyway.
|
|
add_factory_slot_mounts() {
|
|
install -d ${IMAGE_ROOTFS}/factory/img1 ${IMAGE_ROOTFS}/factory/img2
|
|
printf '%s\n' \
|
|
'/dev/mmcblk2p1 /factory/img1 auto ro,noatime 0 0' \
|
|
'/dev/mmcblk2p2 /factory/img2 auto ro,noatime 0 0' \
|
|
>> ${IMAGE_ROOTFS}${sysconfdir}/fstab
|
|
}
|
|
ROOTFS_POSTPROCESS_COMMAND += "add_factory_slot_mounts "
|