Skip to content

Comments

!apps: Simplify NuttX initialization#3405

Open
linguini1 wants to merge 2 commits intoapache:masterfrom
linguini1:byebye-archinit
Open

!apps: Simplify NuttX initialization#3405
linguini1 wants to merge 2 commits intoapache:masterfrom
linguini1:byebye-archinit

Conversation

@linguini1
Copy link
Contributor

@linguini1 linguini1 commented Feb 19, 2026

Summary

BREAKING:

In an effort to simplify board initialization logic for NuttX, NSH will no longer support architecture initialization. This will happen during boot via the BOARD_LATE_INITIALIZE option. The boardctl command BOARDIOC_INIT is also no longer available from user-space.

Quick fix: Any application relying on BOARDIOC_INIT should now enable BOARD_LATE_INITIALIZE to have initialization performed by the kernel in advance of the application running. If control over initialization is still necessary, BOARDIOC_FINALINIT should be implemented and used. Boards relying on NSH for initialization should also enable BOARD_LATE_INITIALIZE instead.

Part of apache/nuttx#11321.

To be merged with twin PR to NuttX kernel: apache/nuttx#18408

Impact

This reduces the complexity of NuttX initialization by keeping it within the
kernel logic for the normal case. Users can still control initialization from
their application using BOARDIOC_FINALINIT instead.

This impacts almost every NuttX supported board, as many configurations relied
on NSH for initialization. This also impacts each application in the diff which
relied on BOARDIOC_INIT.

Testing

TBD, I will likely need help testing the affected applications (for this PR).

Testing of modified NuttX kernel defconfigs can be found in the twin PR: apache/nuttx#18408

@linguini1
Copy link
Contributor Author

NOTE: The CI will always fail since it will be using a version of NuttX where the defconfigs still contain references to NSH_ARCHINIT.

@linguini1 linguini1 marked this pull request as ready for review February 19, 2026 22:04
boardctl(BOARDIOC_INIT, 0);

# ifdef CONFIG_BOARDCTL_FINALINIT
#if defined(CONFIG_BOARDCTL_FINALINIT) && !defined(CONFIG_BOARD_LATE_INITIALIZE)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why check CONFIG_BOARD_LATE_INITIALIZE

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I suppose my idea here was the use-case raiden mentioned, where users that still want control over the init process put a custom one in board_finalinitialize. But, I guess in that case they should be allowed to enable both options anyways. I will modify this (and anywhere else I did this) to just check for CONFIG_BOARD_FINALINIT.

BREAKING: In an effort to simplify board initialization logic for NuttX,
NSH will no longer support architecture initialization. This will happen
during boot via the BOARD_LATE_INITIALIZE option. The boardctl command
BOARDIOC_INIT is also no longer available from user-space.

Quick fix:
Any application relying on BOARDIOC_INIT should now enable
BOARD_LATE_INITIALIZE to have initialization performed by the kernel in
advance of the application running. If control over initialization is
still necessary, BOARDIOC_FINALINIT should be implemented and used.
Boards relying on NSH for initialization should also enable
BOARD_LATE_INITIALIZE instead.

Signed-off-by: Matteo Golin <matteo.golin@gmail.com>
Ignore some new lines with incorrect spelling error detection.

Signed-off-by: Matteo Golin <matteo.golin@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants