You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by "JianyuWang0623 (via GitHub)" <gi...@apache.org> on 2026/10/09 08:38:36 UTC

[PR] system/nxinit: register g_builtins with the kernel under PROTECTED build [nuttx-apps]

JianyuWang0623 opened a new pull request, #3821:
URL: https://github.com/apache/nuttx-apps/pull/3821

   ## Summary
   
   Under `CONFIG_BUILD_PROTECTED`, `nxinit`'s `init_main()` runs in user space while the binfmt builtin loader and BINFS run in kernel space. The builtin application table (`g_builtins`/`g_builtin_count`) is linked only into the user blob (`nuttx_user`) and is never present in the kernel image. As a result, any kernel-space lookup against that table — such as the `posix_spawnp()` call that starts the `console sh` service from `init.rc` — fails with `ENOENT`, because the kernel-side `g_builtins[]` was never populated.
   
   NuttX already ships the fix for this gap: `include/nuttx/lib/builtin.h` documents that `boardctl(BOARDIOC_BUILTINS)` must be called by the application layer to register the table with the kernel. This change wires that call up in `init_main()`, before any service is started. The block is guarded by `#if defined(CONFIG_BUILD_PROTECTED) && defined(CONFIG_BUILTIN)` and compiled out entirely for FLAT and KERNEL builds, which are unaffected (in FLAT, there is no separate address space; in KERNEL, user-space addresses cannot meaningfully be passed across the boundary in this way).
   
   `nsh` is not affected by this problem: `exec_builtin()` has a `task_spawn()` fallback path that does not require a populated kernel-side table.
   
   ## Impact
   
   Only affects `CONFIG_BUILD_PROTECTED && CONFIG_BUILTIN` builds. FLAT and KERNEL builds are not changed. The apache/nuttx `rv-virt:pnsh` configuration (already switched to nxinit on master) currently fails to start its console service with `Error Starting service 'console': 2`; this PR fixes that. A pending nuttx PR that switches `qemu-armv7r` to nxinit also depends on this change.
   
   ## Testing
   
   **Host**: Linux x86_64, `arm-none-eabi-gcc 10.3.1`
   
   **Target**: `qemu-armv7r:pnsh` (PROTECTED build)
   
   **QEMU**: 10.2.1, `-M virt -cpu cortex-r5f`
   
   **Before this change**: boot log prints `Error Starting service 'console': 2` and the console service never starts.
   
   **After this change**, three consecutive runs:
   
   ```
   nsh> ps
     TID   PID  PPID PRI POLICY   TYPE    NPX STATE    EVENT     SIGMASK            STACK    USED FILLED COMMAND
       0     0     0   0 FIFO     Kthread   - Ready    ...                                                Idle_Task
       1     0     0 192 RR       Kthread   - Waiting  Semaphore ...                                      hpwork
       3     3     0 100 RR       Task      - Waiting  Semaphore ...                                      init_main
       4     4     3 100 RR       Task      - Running  ...                                                sh
   ```
   
   `init_main` (PID 3, PPID 0) and `sh` (PID 4, PPID 3) confirm the expected parent-child relationship.
   
   `qemu-armv7r:nsh` (flat build): compiles cleanly with this change; the `#if` guard excludes the new code entirely.
   
   `rv-virt:pnsh`: not built or run on this branch; it is known to exhibit the same failure on apache/nuttx master without this fix.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@nuttx.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] system/nxinit: register g_builtins with the kernel under PROTECTED build [nuttx-apps]

Posted by "JianyuWang0623 (via GitHub)" <gi...@apache.org>.
JianyuWang0623 closed pull request #3821: system/nxinit: register g_builtins with the kernel under PROTECTED build
URL: https://github.com/apache/nuttx-apps/pull/3821


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@nuttx.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org