The simulated UART driver currently opens the host path configured by CONFIG_SIM_UARTx_NAME directly. This requires the host-side serial endpoint to exist before NuttX opens the UART, so users and CI jobs need an external setup step such as socat to create a PTY pair. It also means the host endpoint path is effectively a build-time choice: changing the host device path requires changing configuration and rebuilding, which is inconvenient for tests that allocate a fresh PTY path on each run. Add CONFIG_SIM_UART_PTY for Linux sim builds. When enabled, non-console simulated UART ports allocate a host pseudoterminal from /dev/ptmx, put the host master side in raw mode, and print the host slave path when the NuttX UART is opened. The NuttX-side device name remains CONFIG_SIM_UARTx_NAME, for example /dev/ttySIM0, so applications continue to use the normal NuttX serial API. Keep the option disabled by default so existing configurations still open the configured host path directly. Console UART handling is also left on the existing host-open path. Also make host_uart_checkin() and host_uart_checkout() check the actual POLLIN/POLLOUT bits returned by poll(). This avoids treating error-only or unrelated poll events as readable or writable serial readiness. The main benefit is simpler and more deterministic simulator integration: a simulated UART can expose a real host-visible /dev/pts/N endpoint by itself, without pre-creating a matching host device and without rebuilding NuttX when the host PTY path changes. This is useful for host-side test scripts and external protocol tools while keeping application code on the standard NuttX UART interface. Companion apps-side test branch: https://github.com/LingaoM/nuttx-apps/tree/sim_uart_tester Testing: Host: Ubuntu 22.04 x86_64 Board/config: sim:nsh Apps test code: https://github.com/LingaoM/nuttx-apps/tree/sim_uart_tester Common test configuration: CONFIG_NSH_BUILTIN_APPS=y CONFIG_EXAMPLES_HELLO=y CONFIG_SIM_UART_NUMBER=1 CONFIG_SIM_UART0_NAME="/dev/ttySIM0" CONFIG_SIM_UART_PTY=y DMA-mode build and test: 1. Configure sim:nsh with the companion apps tree: ./tools/configure.sh -a ../nuttx-apps sim:nsh 2. Enable the common test configuration above and keep DMA enabled: CONFIG_SIM_UART_DMA=y CONFIG_SERIAL_TXDMA=y CONFIG_SERIAL_RXDMA=y 3. Build: make clean make -j16 4. Start NuttX: ./nuttx 5. In NSH, run the hello test app: nsh> hello /dev/ttySIM0 connected to pseudotty: /dev/pts/73 6. In another terminal, run the host-side tester from the companion apps branch with the printed PTY path: cd ../nuttx-apps ./examples/hello/test_sim_uart_pty.py /dev/pts/73 7. The host-side tester sends 32768 bytes from the host to NuttX and receives 49152 bytes from NuttX to the host. The payload includes non-text binary bytes. Both sides validate deterministic payload contents and checksums, then exchange an ACK. 8. Observed host-side output: HOST_OPEN: /dev/pts/73 HOST_TX: 32768 bytes checksum=0x1f9989f4 HOST_RX: 49152 bytes checksum=0x06a45c69 HOST_TX: ACK TEST PASSED 9. Observed NuttX output: sim_uart_pty_test: binary RX 32768 TX 49152 passed Non-DMA build and test: 1. Disable DMA for the same sim:nsh configuration: # CONFIG_SIM_UART_DMA is not set # CONFIG_SERIAL_TXDMA is not set # CONFIG_SERIAL_RXDMA is not set 2. Refresh the configuration and rebuild. On this host, the installed Python olddefconfig shim is broken, so I refreshed Kconfig directly with kconfig-conf and the same environment that the NuttX Makefile passes to Kconfig: APPSDIR=/mnt/ssd/code/code/nuttx-apps \ APPSBINDIR=/mnt/ssd/code/code/nuttx-apps \ BINDIR=/mnt/ssd/code/code/nuttx \ EXTERNALDIR=/mnt/ssd/code/code/nuttx/dummy \ kconfig-conf --olddefconfig Kconfig make clean make -j16 3. Repeated the same runtime steps as the DMA test: ./nuttx nsh> hello cd ../nuttx-apps ./examples/hello/test_sim_uart_pty.py /dev/pts/73 4. Observed the same successful binary transfer result: HOST_TX: 32768 bytes checksum=0x1f9989f4 HOST_RX: 49152 bytes checksum=0x06a45c69 HOST_TX: ACK TEST PASSED sim_uart_pty_test: binary RX 32768 TX 49152 passed After the non-DMA test, I restored the default DMA configuration, rebuilt, and reran the same binary PTY test successfully so the final local build state was back on CONFIG_SIM_UART_DMA=y. Assisted-by: Claude:Claude-Fable-5 Signed-off-by: Lingao Meng <menglingao@xiaomi.com> |
||
|---|---|---|
| .github | ||
| arch | ||
| audio | ||
| binfmt | ||
| boards | ||
| cmake | ||
| crypto | ||
| Documentation | ||
| drivers | ||
| dummy | ||
| fs | ||
| graphics | ||
| include | ||
| libs | ||
| mm | ||
| net | ||
| openamp | ||
| pass1 | ||
| sched | ||
| syscall | ||
| tools | ||
| video | ||
| wireless | ||
| .asf.yaml | ||
| .codespell-ignore-lines | ||
| .codespellrc | ||
| .editorconfig | ||
| .gitignore | ||
| .gitmessage | ||
| .pre-commit-config.yaml | ||
| .yamllint | ||
| AUTHORS | ||
| CMakeLists.txt | ||
| CONTRIBUTING.md | ||
| INVIOLABLES.md | ||
| Kconfig | ||
| LICENSE | ||
| Makefile | ||
| NOTICE | ||
| README.md | ||
| ReleaseNotes | ||
Apache NuttX is a real-time operating system (RTOS) with an emphasis on standards compliance and small footprint. Scalable from 8-bit to 64-bit microcontroller environments, the primary governing standards in NuttX are POSIX and ANSI standards. Additional standard APIs from Unix and other common RTOSs (such as VxWorks) are adopted for functionality not available under these standards, or for functionality that is not appropriate for deeply-embedded environments (such as fork()).
For brevity, many parts of the documentation will refer to Apache NuttX as simply NuttX.
Getting Started
First time on NuttX? Read the Getting Started guide! If you don't have a board available, NuttX has its own simulator that you can run on terminal.
Documentation
You can find the current NuttX documentation on the Documentation Page.
Alternatively, you can build the documentation yourself by following the Documentation Build Instructions.
The old NuttX documentation is still available in the Apache wiki.
Supported Boards
NuttX supports a wide variety of platforms. See the full list on the Supported Platforms page.
Contributing
If you wish to contribute to the NuttX project, read the Contributing guidelines for information on Git usage, coding standard, workflow and the NuttX principles.
License
The code in this repository is under either the Apache 2 license, or a license compatible with the Apache 2 license. See the License Page for more information.