mirror of
https://github.com/apache/nuttx-apps.git
synced 2026-09-12 13:40:16 +00:00
Services started by nxinit (e.g. "sh") do not open a console device on their own, unlike nsh_main, which explicitly does so via nsh_consolemain()/nsh_waitusbready() for USB gadget consoles (CDC-ACM/PL2303). When such a board switches its top-level init from nsh_main to nxinit, no code path ever registers/connects the USB console gadget, and a service that just execs a plain "sh" inherits whatever (invalid, for a USB gadget console not yet opened at the time the idle task file descriptors are set up) stdio nxinit itself has. Add a "console [<device>]" service option: a service declared with it gets the given device (CONFIG_SYSTEM_NXINIT_CONSOLE_DEV, "/dev/console" by default, if no device is given) opened and dup'd onto its stdin, stdout and stderr via posix_spawn_file_actions before it is spawned. This does not depend on nsh being enabled at all. For a USB gadget console, the device does not exist until the gadget is actually registered; boards using one are expected to bring it up themselves before any service using "console" is started (e.g. via an "exec -- sercon" action in their init.rc, since apps/system/cdcacm already implements exactly that registration step and does not depend on nxinit or nsh either). console_file_actions() runs after the previous commit's time_started update, so a failure to build the console's file actions is covered by the same up to date timestamp - no separate clock_gettime() call is needed on this failure path. Covered by a new unit test, test_nxinit_service_console_option, that exercises the option with and without an explicit device, and confirms services without the option are left untouched. Assisted-by: Kiro:claude-sonnet-5 Signed-off-by: wangjianyu3 <wangjianyu3@xiaomi.com> |
||
|---|---|---|
| .. | ||
| test_nxinit.c | ||
| test_nxinit.h | ||
| test_nxinit_action.c | ||
| test_nxinit_common.c | ||
| test_nxinit_parser.c | ||
| test_nxinit_service.c | ||