boards/linum-stm32h753bi: Add zbus board integration and configuration - #19916
boards/linum-stm32h753bi: Add zbus board integration and configuration#19916JorgeGzm wants to merge 3 commits into
Conversation
|
@JorgeGzm could you split iterator section from zbus to new pr? |
🔗 Cross-repo PR dependenciesThe 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 |
|
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. |
🔗 Cross-repo PR dependenciesThe 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 |
🔗 Cross-repo PR dependenciesThe 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 |
🔗 Cross-repo PR dependenciesThe 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 |
🔗 Cross-repo PR dependenciesThe 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>
Summary
Integration of the zbus message bus port (apache/nuttx-apps#3743) on
top of the iterable sections infrastructure (#19927), in two commits:
include/nuttx/linker/zbus.ld+ atools/Config.mkhook (CONFIG_ZBUS_LINKER_INSERT), an optionalzero-touch mode using GNU ld
INSERT AFTERfor boards that do notinclude the common fragments (constraints documented in the file);
plus the zbus Sphinx documentation.
#includelines in
flash.ldand azbusboard configuration enabling thezbus example and its cmocka test suite, reproducible with
./tools/configure.sh linum-stm32h753bi:zbus.Impact
linum-stm32h753bi through the new
:zbusconfiguration; any otherboard can adopt it the same way (two linker-script lines, or the
INSERT mode with no board edit).
nothing unless
CONFIG_ZBUSis enabled (verified: the stock:nshmap has zero zbus sections), and the
Config.mkhook is inert unlessCONFIG_ZBUS_LINKER_INSERT=y.board linker script, so the
#includelines work on either).zbusentry in theboard configuration list.
.codespellrcskip list (their embedded base64 raster data trips thespell checker with false positives).
Testing
Target: linum-stm32h753bi (STM32H753BI),
:zbusbuild (Make and CMake): OK, the three_zbus_*_listsectionscollected name-sorted in flash as required by the zbus VDED algorithm.
in the same boot and the
zbusexample produces the expected output,with the fourth message correctly masked for the listener and the
listener notified before the subscriber:
no overlap).
tools/checkpatch.sh -c -u -m -gon both commits (nxstyle +codespell, same flags as CI): all checks pass.
sphinx-build -W:clean.
Depends-On: apache/nuttx-apps#3743
Depends-On: #19927