Skip to content

Fix/stale embedded artifacts - #96

Merged
JohnAmadis merged 3 commits into
masterfrom
fix/stale-embedded-artifacts
Sep 20, 2026
Merged

JohnAmadis merged 3 commits into
masterfrom
fix/stale-embedded-artifacts

Conversation

@JohnAmadis

Copy link
Copy Markdown
Contributor

No description provided.

JohnAmadis and others added 3 commits September 20, 2026 10:14
Three rules along the chain that ends up inside dmboot.elf declared their
inputs as targets or as a directory rather than as the files they
actually consume, so none of them re-ran when dmf-get fetched a different
set of modules:

- config_fs.dmffs depended on the DMBOOT_CONFIG_DIR directory. dmf-get
  drops each module's service=/rules= files into subdirectories that
  already exist, which leaves that directory's own mtime untouched.
- modules.dmp and __modules_dmp.o depended on the download_modules and
  prepare_modules_dmp targets. A target dependency orders the work but
  never marks the output stale.

Each one fails silently: the build succeeds and the firmware is flashed
with whatever was embedded last time. Adding dhcpc to a board's flash.dmd
produced, in turn, a config filesystem with no dhcp@.ini unit, then a ROM
package with no dhcpc module ("module not found: dhcpc"), then an ELF
still linking a modules.dmp object from two builds earlier.

Key them off the files instead - the download marker dmf-get touches, and
modules.dmp itself.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
dhcpc brings dmdhcp with it as a module dependency, and dhcp.rules starts
one dhcp@<iface> instance per interface dmnetif registers, alongside the
networkd@<iface> RX pump it needs to receive the replies.

Note that nothing brings the interface up: eth0 is DOWN after boot, so
the lease only starts progressing after an explicit "ifconfig eth0 up".
Whose job that is has not been settled yet.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
44a0664 raises configTIMER_TASK_STACK_DEPTH above configMINIMAL_STACK_SIZE,
which is what dmdhcp's retransmission and renewal timers need: they
transmit from a dmosi_timer_t callback, and 128 words was not enough to
reach the driver without overflowing the shared timer daemon task.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@JohnAmadis
JohnAmadis merged commit d3b7e4e into master Sep 20, 2026
0 of 4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant