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

   ## Summary
   
   * interpreters/python: Enable Python's socket module
   
   Enables the Python's socket module. This allows applications to be built to 
interact with POSIX-compatible sockets, which is supported by NuttX.
   
   ## Impact
   
   Allows application to use system's sockets within Python interpreter. Once 
accepted, I will update the `rv-virt:cpython` defconfig on NuttX's repository 
and provide a proper documentation on how to use it.
   
   ## Testing
   
   Internal CI testing + `rv-virt:python`:
   
   Copy the following `defconfig` to 
`boards/risc-v/qemu-rv/rv-virt/configs/python/defconfig`:
   
   ```
   #
   # This file is autogenerated: PLEASE DO NOT EDIT IT.
   #
   # You can use "make menuconfig" to make any modifications to the installed 
.config file.
   # You can then do "make savedefconfig" to generate a new defconfig file that 
includes your
   # modifications.
   #
   # CONFIG_DISABLE_OS_API is not set
   # CONFIG_NSH_DISABLE_LOSMART is not set
   CONFIG_16550_ADDRWIDTH=0
   CONFIG_16550_UART0=y
   CONFIG_16550_UART0_BASE=0x10000000
   CONFIG_16550_UART0_CLOCK=3686400
   CONFIG_16550_UART0_IRQ=37
   CONFIG_16550_UART0_SERIAL_CONSOLE=y
   CONFIG_16550_UART=y
   CONFIG_ALLOW_BSD_COMPONENTS=y
   CONFIG_ARCH="risc-v"
   CONFIG_ARCH_BOARD="rv-virt"
   CONFIG_ARCH_BOARD_QEMU_RV_VIRT=y
   CONFIG_ARCH_CHIP="qemu-rv"
   CONFIG_ARCH_CHIP_QEMU_RV32=y
   CONFIG_ARCH_CHIP_QEMU_RV=y
   CONFIG_ARCH_CHIP_QEMU_RV_ISA_A=y
   CONFIG_ARCH_CHIP_QEMU_RV_ISA_C=y
   CONFIG_ARCH_CHIP_QEMU_RV_ISA_M=y
   CONFIG_ARCH_FLOAT_H=y
   CONFIG_ARCH_INTERRUPTSTACK=2048
   CONFIG_ARCH_RISCV=y
   CONFIG_ARCH_STACKDUMP=y
   CONFIG_AUDIO=y
   CONFIG_BOARDCTL_ROMDISK=y
   CONFIG_BOARD_LOOPSPERMSEC=6366
   CONFIG_BUILTIN=y
   CONFIG_CODECS_HASH_MD5=y
   CONFIG_DEBUG_FEATURES=y
   CONFIG_DEBUG_FULLOPT=y
   CONFIG_DEBUG_SYMBOLS=y
   CONFIG_DEV_SIMPLE_ADDRENV=y
   CONFIG_DEV_URANDOM=y
   CONFIG_DRIVERS_AUDIO=y
   CONFIG_DRIVERS_VIRTIO=y
   CONFIG_DRIVERS_VIRTIO_BLK=y
   CONFIG_DRIVERS_VIRTIO_MMIO=y
   CONFIG_DRIVERS_VIRTIO_NET=y
   CONFIG_DRIVERS_VIRTIO_RNG=y
   CONFIG_DRIVERS_VIRTIO_SERIAL=y
   CONFIG_DRIVERS_VIRTIO_SOUND=y
   CONFIG_ELF=y
   CONFIG_EVENT_FD=y
   CONFIG_EXAMPLES_HELLO=m
   CONFIG_EXAMPLES_LEDS=y
   CONFIG_EXPERIMENTAL=y
   CONFIG_FAT_LCNAMES=y
   CONFIG_FAT_LFN=y
   CONFIG_FRAME_POINTER=y
   CONFIG_FS_FAT=y
   CONFIG_FS_FATTIME=y
   CONFIG_FS_HOSTFS=y
   CONFIG_FS_PROCFS=y
   CONFIG_FS_ROMFS=y
   CONFIG_FS_TMPFS=y
   CONFIG_IDLETHREAD_STACKSIZE=4096
   CONFIG_INIT_ENTRYPOINT="nsh_main"
   CONFIG_INIT_STACKSIZE=4096
   CONFIG_INTELHEX_BINARY=y
   CONFIG_INTERPRETER_CPYTHON=y
   CONFIG_IOB_BUFSIZE=1530
   CONFIG_IOB_THROTTLE=2
   CONFIG_LIBC_ENVPATH=y
   CONFIG_LIBC_EXECFUNCS=y
   CONFIG_LIBC_LOCALE=y
   CONFIG_LIBC_LOCALE_GETTEXT=y
   CONFIG_LIBC_PERROR_STDOUT=y
   CONFIG_LIBC_STRERROR=y
   CONFIG_LIBM_NEWLIB=y
   CONFIG_LIB_SYSCALL=y
   CONFIG_LIB_ZLIB=y
   CONFIG_NET=y
   CONFIG_NETDB_DNSCLIENT=y
   CONFIG_NETDB_DNSCLIENT_ENTRIES=4
   CONFIG_NETDB_DNSSERVER_NOADDR=y
   CONFIG_NETINIT_DNS=y
   CONFIG_NETINIT_DNSIPADDR=0x08080808
   CONFIG_NETINIT_DRIPADDR=0x0a000202
   CONFIG_NETINIT_IPADDR=0x0a00020f
   CONFIG_NETINIT_NOMAC=y
   CONFIG_NETUTILS_CODECS=y
   CONFIG_NETUTILS_IPERF=y
   CONFIG_NETUTILS_TELNETD=y
   CONFIG_NETUTILS_TFTPC=y
   CONFIG_NETUTILS_WEBCLIENT=y
   CONFIG_NET_BROADCAST=y
   CONFIG_NET_ETH_PKTSIZE=1514
   CONFIG_NET_ICMP_SOCKET=y
   CONFIG_NET_LL_GUARDSIZE=28
   CONFIG_NET_MAX_LISTENPORTS=8
   CONFIG_NET_RECV_BUFSIZE=16384
   CONFIG_NET_STATISTICS=y
   CONFIG_NET_TCP=y
   CONFIG_NET_TCPBACKLOG=y
   CONFIG_NET_UDP=y
   CONFIG_NFS=y
   CONFIG_NSH_ARCHINIT=y
   CONFIG_NSH_BUILTIN_APPS=y
   CONFIG_NSH_FILEIOSIZE=512
   CONFIG_NSH_FILE_APPS=y
   CONFIG_NSH_LINELEN=300
   CONFIG_NSH_READLINE=y
   CONFIG_NSH_SYMTAB=y
   CONFIG_NSH_SYMTAB_ARRAYNAME="g_symtab"
   CONFIG_NSH_SYMTAB_COUNTNAME="g_nsymbols"
   CONFIG_NSH_VARS=y
   CONFIG_NXPLAYER_HTTP_STREAMING_SUPPORT=y
   CONFIG_NXPLAYER_MAINTHREAD_STACKSIZE=3072
   CONFIG_PATH_INITIAL="/system/bin"
   CONFIG_PIPES=y
   CONFIG_PSEUDOFS_SOFTLINKS=y
   CONFIG_RAM_SIZE=33554432
   CONFIG_RAM_START=0x80000000
   CONFIG_READLINE_CMD_HISTORY=y
   CONFIG_RISCV_SEMIHOSTING_HOSTFS=y
   CONFIG_RR_INTERVAL=200
   CONFIG_SCHED_HAVE_PARENT=y
   CONFIG_SCHED_HPWORK=y
   CONFIG_SCHED_LPWORK=y
   CONFIG_SCHED_WAITPID=y
   CONFIG_SERIAL_UART_ARCH_MMIO=y
   CONFIG_STACK_COLORATION=y
   CONFIG_START_DAY=2
   CONFIG_START_MONTH=11
   CONFIG_START_YEAR=2022
   CONFIG_SYMTAB_ORDEREDBYNAME=y
   CONFIG_SYSLOG_TIMESTAMP=y
   CONFIG_SYSTEM_DHCPC_RENEW=y
   CONFIG_SYSTEM_NSH=y
   CONFIG_SYSTEM_NSH_STACKSIZE=3072
   CONFIG_SYSTEM_NXPLAYER=y
   CONFIG_SYSTEM_NXRECORDER=y
   CONFIG_SYSTEM_PING=y
   CONFIG_TESTING_GETPRIME=y
   CONFIG_TESTING_OSTEST=y
   CONFIG_TIMER_FD=y
   CONFIG_TLS_NELEM=10
   CONFIG_TLS_TASK_NELEM=10
   CONFIG_USERLED=y
   CONFIG_USERLED_LOWER=y
   ```
   
   Build the firmware:
   
   ```
   make -j distclean && ./tools/configure.sh rv-virt:python && make -j$(nproc)
   ```
   
   Run it on RISC-V QEMU:
   ```
   $ qemu-system-riscv32 -semihosting -M virt,aclint=on -cpu rv32 -smp 8 \
     -global virtio-mmio.force-legacy=false \
     -device virtio-serial-device,bus=virtio-mmio-bus.0 \
     -chardev 
socket,telnet=on,host=127.0.0.1,port=3450,server=on,wait=off,id=foo \
     -device virtconsole,chardev=foo \
     -device virtio-rng-device,bus=virtio-mmio-bus.1 \
     -netdev 
user,id=u1,hostfwd=tcp:127.0.0.1:10023-10.0.2.15:23,hostfwd=tcp:127.0.0.1:15001-10.0.2.15:5001
 \
     -device virtio-net-device,netdev=u1,bus=virtio-mmio-bus.2 \
     -drive file=./mydisk-1gb.img,if=none,format=raw,id=hd \
     -device virtio-blk-device,bus=virtio-mmio-bus.3,drive=hd \
     -bios none -kernel ./nuttx -nographic
   ABC[    0.041713] board_userled: LED 1 set to 0
   [    0.042368] board_userled: LED 2 set to 0
   [    0.042450] board_userled: LED 3 set to 0
   telnetd [4:100]
   
   NuttShell (NSH) NuttX-10.4.0
   nsh>
   ```
   
   And, finally, test connecting to a server on web, for instance:
   
   ```
   nsh> python_mount_modules
   Mounting ROMFS filesystem at target=/usr/local/lib/ with source=/dev/ram1
   nsh> export PYTHONHOME /usr/local
   nsh> export PYTHON_BASIC_REPL 1
   nsh> python
   Python 3.13.0 (main, Jan  6 2025, 16:47:32) [GCC 13.2.0] on nuttx
   Type "help", "copyright", "credits" or "license" for more information.
   >>> import socket
   >>> sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
   >>> sock.settimeout(5)
   >>> sock.connect(("www.google.com", 80))
   ```


-- 
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: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to