Skip to content

boards/linum-stm32h753bi: Add zbus board integration and configuration - #19916

Open
JorgeGzm wants to merge 3 commits into
apache:masterfrom
JorgeGzm:port_zbus
Open

boards/linum-stm32h753bi: Add zbus board integration and configuration#19916
JorgeGzm wants to merge 3 commits into
apache:masterfrom
JorgeGzm:port_zbus

Conversation

@JorgeGzm

@JorgeGzm JorgeGzm commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

Summary

Integration of the zbus message bus port (apache/nuttx-apps#3743) on
top of the iterable sections infrastructure (#19927), in two commits:

  1. zbus linker support: include/nuttx/linker/zbus.ld + a
    tools/Config.mk hook (CONFIG_ZBUS_LINKER_INSERT), an optional
    zero-touch mode using GNU ld INSERT AFTER for boards that do not
    include the common fragments (constraints documented in the file);
    plus the zbus Sphinx documentation.
  2. linum-stm32h753bi adoption (first adopter board): 2 #include
    lines in flash.ld and a zbus board configuration enabling the
    zbus example and its cmocka test suite, reproducible with
    ./tools/configure.sh linum-stm32h753bi:zbus.

Impact

  • Users: zbus becomes usable out of the box on the
    linum-stm32h753bi through the new :zbus configuration; any other
    board can adopt it the same way (two linker-script lines, or the
    INSERT mode with no board edit).
  • Existing boards/configs: none. The included fragments expand to
    nothing unless CONFIG_ZBUS is enabled (verified: the stock :nsh
    map has zero zbus sections), and the Config.mk hook is inert unless
    CONFIG_ZBUS_LINKER_INSERT=y.
  • Build process: Make and CMake both supported (both preprocess the
    board linker script, so the #include lines work on either).
  • Hardware: only the linum-stm32h753bi board is touched.
  • Documentation: zbus application pages and a zbus entry in the
    board configuration list.
  • Tooling: the reused zbus SVG diagrams are added to the
    .codespellrc skip list (their embedded base64 raster data trips the
    spell checker with false positives).
  • Security / compatibility: no changes to existing runtime code.

Testing

Target: linum-stm32h753bi (STM32H753BI),

  • :zbus build (Make and CMake): OK, the three _zbus_*_list sections
    collected name-sorted in flash as required by the zbus VDED algorithm.
  • On hardware: the 16-test zbus cmocka suite passes twice
    in the same boot and the zbus example produces the expected output,
    with the fourth message correctly masked for the listener and the
    listener notified before the subscriber:
nsh> zbus
zbus: publishing 5 messages to acc_chan
zbus:  listener: x=1 y=10 z=100
zbus:  subscriber: x=1 y=10 z=100
zbus:  listener: x=2 y=20 z=200
zbus:  subscriber: x=2 y=20 z=200
zbus:  listener: x=3 y=30 z=300
zbus: listener masked
zbus:  subscriber: x=3 y=30 z=300
zbus: listener unmasked
zbus:  subscriber: x=4 y=40 z=400
zbus:  listener: x=5 y=50 z=500
zbus:  subscriber: x=5 y=50 z=500
zbus: done
  • INSERT mode validated in a standalone ld harness (placement, sorting,
    no overlap).
  • tools/checkpatch.sh -c -u -m -g on both commits (nxstyle +
    codespell, same flags as CI): all checks pass. sphinx-build -W:
    clean.

Depends-On: apache/nuttx-apps#3743
Depends-On: #19927

@github-actions github-actions Bot added Area: Build system Size: XL The size of the change in this PR is very large. Consider breaking down the PR into smaller pieces. Board: arm labels Aug 21, 2026
@github-actions

github-actions Bot commented Aug 21, 2026

Copy link
Copy Markdown

MemBrowse Memory Report

No memory changes detected for:

@xiaoxiang781216

Copy link
Copy Markdown
Contributor

@JorgeGzm could you split iterator section from zbus to new pr?

@github-actions

Copy link
Copy Markdown

🔗 Cross-repo PR dependencies

The read-only Build run reported the following dependent PR(s) and fetched head SHA(s):

CI run: https://github.com/apache/nuttx/actions/runs/32439921078

@linguini1

Copy link
Copy Markdown
Contributor

Do not list "new files". This is visible in the diff already. Please review the AI-generated PR descriptions and revise them for correctness and simplicity.

@github-actions github-actions Bot added Size: L The size of the change in this PR is large and removed Size: XL The size of the change in this PR is very large. Consider breaking down the PR into smaller pieces. labels Aug 21, 2026
@JorgeGzm JorgeGzm changed the title include/nuttx: Add link-time iterable sections infrastructure boards/linum-stm32h753bi: Add zbus board integration and configuration Aug 21, 2026
@JorgeGzm

Copy link
Copy Markdown
Contributor Author

@JorgeGzm could you split iterator section from zbus to new pr?

Done, the PR #19927 whas created.

@github-actions

Copy link
Copy Markdown

🔗 Cross-repo PR dependencies

The read-only Build run reported the following dependent PR(s) and fetched head SHA(s):

CI run: https://github.com/apache/nuttx/actions/runs/32515058484

@github-actions

Copy link
Copy Markdown

🔗 Cross-repo PR dependencies

The read-only Build run reported the following dependent PR(s) and fetched head SHA(s):

CI run: https://github.com/apache/nuttx/actions/runs/32531266071

@github-actions

Copy link
Copy Markdown

🔗 Cross-repo PR dependencies

The read-only Build run reported the following dependent PR(s) and fetched head SHA(s):

CI run: https://github.com/apache/nuttx/actions/runs/32757958806

jerpelea
jerpelea previously approved these changes Aug 25, 2026
@github-actions github-actions Bot added Size: XL The size of the change in this PR is very large. Consider breaking down the PR into smaller pieces. and removed Size: L The size of the change in this PR is large labels Aug 25, 2026
Comment thread tools/Config.mk Outdated
Comment thread tools/Config.mk Outdated
@github-actions

Copy link
Copy Markdown

🔗 Cross-repo PR dependencies

The read-only Build run reported the following dependent PR(s) and fetched head SHA(s):

CI run: https://github.com/apache/nuttx/actions/runs/32880838739

Add generic support for link-time registration of struct instances,
modeled after the Zephyr STRUCT_SECTION_* mechanism:

- include/nuttx/iterable_sections.h: STRUCT_SECTION_ITERABLE/DECLARE/
  FOREACH/GET/COUNT macros placing instances in name-sorted linker
  sections delimited by _<type>_list_start/_end symbols (attributes
  through the nuttx/compiler.h macros; FOREACH takes a caller-declared
  iterator, like list_for_every_entry).
- include/nuttx/linker/iterable_sections.ld: ITERABLE_SECTION() macro
  emitting the KEEP + SORT_BY_NAME collection statements (linker
  scripts in ARCHSCRIPT are CPP-preprocessed).
- include/nuttx/linker/common-rom.ld / common-ram.ld: central
  aggregators meant to be included by board linker scripts (inside
  .text and .data respectively); subsystems register their sections
  here guarded by their Kconfig options, so the fragments expand to
  nothing on configurations that do not use them.
- CONFIG_ITERABLE_SECTIONS_LINKER_INSERT + tools/Config.mk hook +
  include/nuttx/linker/common-insert.ld: optional zero-touch mode that
  supplements the board script through GNU ld INSERT AFTER (the central
  file includes the per-subsystem fragments, each guarded by its Kconfig
  option); see the option help for the constraints.
- Documentation/components/iterable_sections.rst.

First user: the Zephyr zbus message bus port (apps/system/zbus in
nuttx-apps); its board integration comes in a companion PR.

Signed-off-by: Jorge Guzman <jorge.gzm@gmail.com>
NuttX-side support for the zbus message bus port (apps/system/zbus in
nuttx-apps), built on the link-time iterable sections infrastructure
added in a companion PR:

- include/nuttx/linker/common-rom.ld: register the zbus channel,
  observer and channel observation iterable sections (guarded by
  CONFIG_ZBUS, no-op otherwise); common-ram.ld: note that zbus needs no
  RAM sections.
- include/nuttx/linker/zbus.ld, included from common-insert.ld under
  CONFIG_ZBUS: the zbus fragment for the zero-touch INSERT mode
  (CONFIG_ITERABLE_SECTIONS_LINKER_INSERT), for boards that do not
  include the iterable sections common fragments.
- Documentation/applications/system/zbus: Sphinx documentation for the
  zbus application, with the upstream Zephyr diagrams (Apache-2.0).
- .codespellrc: skip the reused zbus SVG diagrams (embedded base64
  raster data trips the spell checker).

Signed-off-by: Jorge Guzman <jorge.gzm@gmail.com>
Adopt the zbus message bus on the linum-stm32h753bi (first adopter
board):

- scripts/flash.ld: include the iterable sections common fragments
  (2 lines: common-rom.ld inside .text, common-ram.ld inside .data).
- configs/zbus/defconfig: board configuration enabling zbus with all
  observer types, the zbus example and its cmocka test suite
  (./tools/configure.sh linum-stm32h753bi:zbus).
- Board documentation: describe the new configuration.

Validated on hardware: the 16-test cmocka suite passes twice in the
same boot and the zbus example produces the expected output.

Signed-off-by: Jorge Guzman <jorge.gzm@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Area: Build system Board: arm Size: XL The size of the change in this PR is very large. Consider breaking down the PR into smaller pieces.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants