This is an automated email from the ASF dual-hosted git repository. xiaoxiang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/nuttx.git
commit aa0467057cc3e6f2f4192d4fcce43df72b9e5d91 Author: Bowen Wang <[email protected]> AuthorDate: Sun Jan 4 22:44:00 2026 +0800 qemu-armv8a/rpserver and rpproxy: support the rpmsg port uart Use virtio-serial as the rpmsg-port-uart serial device, so we can bringup the rpmsg-port-uart in qemu platform. Server command: qemu-system-aarch64 -cpu cortex-a53 -nographic \ -machine virt,virtualization=on,gic-version=3 \ -chardev stdio,id=con,mux=on -serial chardev:con \ -object memory-backend-file,discard-data=on,id=shmmem-shmem0,mem-path=/dev/shm/my_shmem0,size=4194304,share=yes \ -device ivshmem-plain,id=shmem0,memdev=shmmem-shmem0,addr=0xb \ -device virtio-serial-device,bus=virtio-mmio-bus.0 \ -chardev socket,path=/tmp/rpmsg_port_uart_socket,server=on,wait=off,id=foo \ -device virtconsole,chardev=foo \ -mon chardev=con,mode=readline -kernel ./out/nuttx_qemu-armv8a_rpserver_ivshmem/nuttx \ -gdb tcp::7775 Proxy command: qemu-system-aarch64 -cpu cortex-a53 -nographic \ -machine virt,virtualization=on,gic-version=3 \ -chardev stdio,id=con,mux=on -serial chardev:con \ -object memory-backend-file,discard-data=on,id=shmmem-shmem0,mem-path=/dev/shm/my_shmem0,size=4194304,share=yes \ -device ivshmem-plain,id=shmem0,memdev=shmmem-shmem0,addr=0xb \ -device virtio-serial-device,bus=virtio-mmio-bus.0 \ -chardev socket,path=/tmp/rpmsg_port_uart_socket,server=off,id=foo \ -device virtconsole,chardev=foo \ -mon chardev=con,mode=readline -kernel ./out/nuttx_qemu-armv8a_rpproxy_ivshmem/nuttx \ -gdb tcp::7776 Signed-off-by: Bowen Wang <[email protected]> --- .../arm64/qemu/boards/qemu-armv8a/index.rst | 10 +++- .../qemu-armv8a/configs/rpproxy_ivshmem/defconfig | 5 ++ .../qemu-armv8a/configs/rpserver_ivshmem/defconfig | 5 ++ boards/arm64/qemu/qemu-armv8a/src/qemu_bringup.c | 59 ++++++++++++++++++++++ 4 files changed, 77 insertions(+), 2 deletions(-) diff --git a/Documentation/platforms/arm64/qemu/boards/qemu-armv8a/index.rst b/Documentation/platforms/arm64/qemu/boards/qemu-armv8a/index.rst index 2966720638d..e46b0238f09 100644 --- a/Documentation/platforms/arm64/qemu/boards/qemu-armv8a/index.rst +++ b/Documentation/platforms/arm64/qemu/boards/qemu-armv8a/index.rst @@ -450,7 +450,10 @@ Steps for Using NuttX as IVSHMEM host and guest $ qemu-system-aarch64 -cpu cortex-a53 -nographic -machine virt,virtualization=on,gic-version=3 -kernel server/nuttx \ -device ivshmem-plain,id=shmem0,memdev=shmmem-shmem0,addr=0xb \ - -object memory-backend-file,id=shmmem-shmem0,mem-path=/dev/shm/ivshmem0,size=4194304,share=yes + -object memory-backend-file,id=shmmem-shmem0,mem-path=/dev/shm/ivshmem0,size=4194304,share=yes \ + -device virtio-serial-device,bus=virtio-mmio-bus.0 \ + -chardev socket,path=/tmp/rpmsg_port_uart_socket,server=on,wait=off,id=foo \ + -device virtconsole,chardev=foo b. Start ``rpproxy_ivshmem`` @@ -458,7 +461,10 @@ Steps for Using NuttX as IVSHMEM host and guest $ qemu-system-aarch64 -cpu cortex-a53 -nographic -machine virt,virtualization=on,gic-version=3 -kernel proxy/nuttx \ -device ivshmem-plain,id=shmem0,memdev=shmmem-shmem0,addr=0xb \ - -object memory-backend-file,discard-data=on,id=shmmem-shmem0,mem-path=/dev/shm/ivshmem0,size=4194304,share=yes + -object memory-backend-file,discard-data=on,id=shmmem-shmem0,mem-path=/dev/shm/ivshmem0,size=4194304,share=yes \ + -device virtio-serial-device,bus=virtio-mmio-bus.0 \ + -chardev socket,path=/tmp/rpmsg_port_uart_socket,server=off,id=foo \ + -device virtconsole,chardev=foo c. Check the RPMSG Syslog in rpserver shell: diff --git a/boards/arm64/qemu/qemu-armv8a/configs/rpproxy_ivshmem/defconfig b/boards/arm64/qemu/qemu-armv8a/configs/rpproxy_ivshmem/defconfig index 17c0fe38379..8c25974985a 100644 --- a/boards/arm64/qemu/qemu-armv8a/configs/rpproxy_ivshmem/defconfig +++ b/boards/arm64/qemu/qemu-armv8a/configs/rpproxy_ivshmem/defconfig @@ -33,6 +33,9 @@ CONFIG_DEBUG_SYMBOLS=y CONFIG_DEFAULT_TASK_STACKSIZE=8192 CONFIG_DEVICE_TREE=y CONFIG_DEV_SIMPLE_ADDRENV=y +CONFIG_DRIVERS_VIRTIO=y +CONFIG_DRIVERS_VIRTIO_MMIO=y +CONFIG_DRIVERS_VIRTIO_SERIAL=y CONFIG_EXAMPLES_HELLO=y CONFIG_EXAMPLES_RPMSGSOCKET=y CONFIG_EXPERIMENTAL=y @@ -71,11 +74,13 @@ CONFIG_RAW_BINARY=y CONFIG_READLINE_CMD_HISTORY=y CONFIG_READLINE_TABCOMPLETION=y CONFIG_RPMSG_PING=y +CONFIG_RPMSG_PORT_UART=y CONFIG_RPTUN=y CONFIG_RPTUN_IVSHMEM=y CONFIG_RPTUN_IVSHMEM_NAME="0:server:s" CONFIG_RPTUN_STACKSIZE=8192 CONFIG_SCHED_BACKTRACE=y +CONFIG_SCHED_EVENTS=y CONFIG_SCHED_HAVE_PARENT=y CONFIG_SCHED_HPWORK=y CONFIG_SCHED_HPWORKPRIORITY=192 diff --git a/boards/arm64/qemu/qemu-armv8a/configs/rpserver_ivshmem/defconfig b/boards/arm64/qemu/qemu-armv8a/configs/rpserver_ivshmem/defconfig index f201c63fb00..3304f82a7a7 100644 --- a/boards/arm64/qemu/qemu-armv8a/configs/rpserver_ivshmem/defconfig +++ b/boards/arm64/qemu/qemu-armv8a/configs/rpserver_ivshmem/defconfig @@ -33,6 +33,9 @@ CONFIG_DEFAULT_TASK_STACKSIZE=8192 CONFIG_DEVICE_TREE=y CONFIG_DEV_RPMSG=y CONFIG_DEV_SIMPLE_ADDRENV=y +CONFIG_DRIVERS_VIRTIO=y +CONFIG_DRIVERS_VIRTIO_MMIO=y +CONFIG_DRIVERS_VIRTIO_SERIAL=y CONFIG_EXAMPLES_HELLO=y CONFIG_EXAMPLES_RPMSGSOCKET=y CONFIG_EXPERIMENTAL=y @@ -72,11 +75,13 @@ CONFIG_RAW_BINARY=y CONFIG_READLINE_CMD_HISTORY=y CONFIG_READLINE_TABCOMPLETION=y CONFIG_RPMSG_PING=y +CONFIG_RPMSG_PORT_UART=y CONFIG_RPTUN=y CONFIG_RPTUN_IVSHMEM=y CONFIG_RPTUN_IVSHMEM_NAME="0:proxy:m" CONFIG_RPTUN_STACKSIZE=8192 CONFIG_SCHED_BACKTRACE=y +CONFIG_SCHED_EVENTS=y CONFIG_SCHED_HAVE_PARENT=y CONFIG_SCHED_HPWORK=y CONFIG_SCHED_HPWORKPRIORITY=192 diff --git a/boards/arm64/qemu/qemu-armv8a/src/qemu_bringup.c b/boards/arm64/qemu/qemu-armv8a/src/qemu_bringup.c index 64f009643d5..e7e53ffaf69 100644 --- a/boards/arm64/qemu/qemu-armv8a/src/qemu_bringup.c +++ b/boards/arm64/qemu/qemu-armv8a/src/qemu_bringup.c @@ -26,6 +26,7 @@ #include <nuttx/config.h> +#include <string.h> #include <sys/types.h> #include <syslog.h> @@ -33,6 +34,7 @@ #include <nuttx/virtio/virtio-mmio.h> #include <nuttx/fdt.h> #include <nuttx/pci/pci_ecam.h> +#include <nuttx/rpmsg/rpmsg_port.h> #ifdef CONFIG_LIBC_FDT # include <libfdt.h> @@ -178,6 +180,54 @@ static void register_devices_from_fdt(void) #endif +/**************************************************************************** + * Name: rpmsg_port_uart_init + ****************************************************************************/ + +#ifdef CONFIG_RPMSG_PORT_UART +static int rpmsg_port_uart_init(void) +{ + const char *remotecpu; + const char *localcpu; + int ret; + + if (strcmp(CONFIG_LIBC_HOSTNAME, "server") == 0) + { + localcpu = "server2"; + remotecpu = "proxy2"; + } + else if (strcmp(CONFIG_LIBC_HOSTNAME, "proxy") == 0) + { + localcpu = "proxy2"; + remotecpu = "server2"; + } + else + { + syslog(LOG_ERR, "ERROR: hostname must be server or proxy, now: %s\n", + CONFIG_LIBC_HOSTNAME); + return -EINVAL; + } + + const struct rpmsg_port_config_s cfg = + { + .remotecpu = remotecpu, + .txnum = 8, + .rxnum = 8, + .txlen = 2048, + .rxlen = 2048, + }; + + ret = rpmsg_port_uart_initialize(&cfg, "/dev/ttyV0", localcpu); + if (ret < 0) + { + syslog(LOG_ERR, + "ERROR: Failed to initialize rpmsg port uart: %d\n", ret); + } + + return ret; +} +#endif + /**************************************************************************** * Public Functions ****************************************************************************/ @@ -218,6 +268,15 @@ int qemu_bringup(void) register_devices_from_fdt(); #endif +#ifdef CONFIG_RPMSG_PORT_UART + ret = rpmsg_port_uart_init(); + if (ret < 0) + { + syslog(LOG_ERR, + "ERROR: Failed to initialize rpmsg port uart: %d\n", ret); + } +#endif + UNUSED(ret); return OK; }
