# # For a description of the syntax of this configuration file, # see the file kconfig-language.txt in the NuttX tools repository. # if ARCH_SIM comment "Simulation Configuration Options" choice prompt "Host CPU Type" default HOST_X86_64 config HOST_X86_64 bool "x86_64" select ARCH_HAVE_STACKCHECK select LIBC_ARCH_ELF_64BIT if LIBC_ARCH_ELF && !SIM_M32 config HOST_X86 bool "x86" select ARCH_HAVE_STACKCHECK config HOST_ARM bool "arm" select ARCH_HAVE_STACKCHECK endchoice # Host CPU Type config ARCH_CHIP string default "sim" config SIM_M32 bool "Build 32-bit simulation on 64-bit machine" default n depends on HOST_X86_64 ---help--- Simulation context switching is based on logic like setjmp and longjmp. This context switching is only available for 32-bit targets. On 64-bit machines, this context switching will fail. The workaround on 64-bit machines for now is to build for a 32-bit target on the 64-bit machine. The workaround for this issue has been included in NuttX 6.15 and beyond. For those versions, you must add SIM_M32=y to the .config file in order to enable building a 32-bit image on a 64-bit platform. config SIM_CYGWIN_DECORATED bool "Decorated Cygwin names" default n depends on WINDOWS_CYGWIN ---help--- Older versions of Cygwin tools decorated C symbol names by adding an underscore to the beginning of the symbol name. Newer versions of Cygwin do not seem to do this. How do you know if you need this option? You could look at the generated symbol tables to see if there are underscore characters at the beginning of the symbol names. Or, if you need this option, the simulation will not run: It will crash early, probably in some function due to the failure to allocate memory. config SIM_SANITIZE bool "Address Sanitizer" default n depends on MM_CUSTOMIZE_MANAGER ---help--- AddressSanitizer (ASan) is a fast compiler-based tool for detecting memory bugs in native code. choice prompt "X64_64 ABI" default SIM_X8664_SYSTEMV if HOST_LINUX default SIM_X8664_MICROSOFT if HOST_WINDOWS depends on HOST_X86_64 && !SIM_32 config SIM_X8664_SYSTEMV bool "System V AMD64 ABI" ---help--- The calling convention of the System V AMD64 ABI is followed on Solaris, Linux, FreeBSD, macOS, and other UNIX-like or POSIX-compliant operating systems. The first six integer or pointer arguments are passed in registers RDI, RSI, RDX, RCX, R8, and R9, while XMM0, XMM1, XMM2, XMM3, XMM4, XMM5, XMM6 and XMM7 are used for floating point arguments. For system calls, R10 is used instead of RCX. As in the Microsoft x64 calling convention, additional arguments are passed on the stack and the return value is stored in RAX. Registers RBP, RBX, and R12-R15 are callee-save registers; all others must be saved by the caller if they wish to preserve their values. Unlike the Microsoft calling convention, a shadow space is not provided; on function entry, the return address is adjacent to the seventh integer argument on the stack. config SIM_X8664_MICROSOFT bool "Microsoft x64 calling convention" ---help--- The Microsoft x64 calling convention is followed on Microsoft Windows and pre-boot UEFI (for long mode on x86-64). It uses registers RCX, RDX, R8, R9 for the first four integer or pointer arguments (in that order), and XMM0, XMM1, XMM2, XMM3 are used for floating point arguments. Additional arguments are pushed onto the stack (right to left). Integer return values (similar to x86) are returned in RAX if 64 bits or less. Floating point return values are returned in XMM0. Parameters less than 64 bits long are not zero extended; the high bits are not zeroed. endchoice config SIM_WALLTIME bool "Run the simulation at a fixed cadence in near real-time" default y if SIM_WALLTIME choice prompt "Simulation at a fixed cadence in near real-time" default SIM_WALLTIME_SLEEP config SIM_WALLTIME_SLEEP bool "Execution the simulation in near real-time using host sleep" ---help--- NOTE: In order to facility fast testing, the sim target's IDLE loop, by default, calls the system timer "interrupt handler" as fast as possible. As a result, there really are no noticeable delays when a task sleeps. However, the task really does sleep -- but the time scale is wrong. If you want behavior that is closer to normal timing, then you can define SIM_WALLTIME=y in your configuration file. This configuration setting will cause the sim target's IDLE loop to delay on each call so that the system "timer interrupt" is called at a rate approximately correct for the system timer tick rate. With this definition in the configuration, sleep() behavior is more or less normal. config SIM_WALLTIME_SIGNAL bool "Execute the simulation using a host timer" ---help--- Run the NuttX simulation using a host timer that delivers periodic SIGALRM events at a tick rate specified by CONFIG_USEC_PER_TICK. Enabling this option will generate the timer 'tick' events from the host timer at a fixed rate. The simulated 'tick' events from Idle task are no longer sent. endchoice endif config SIM_NETDEV bool "Simulated Network Device" default y select ARCH_HAVE_NETDEV_STATISTICS select SCHED_LPWORK depends on (NET_ETHERNET && SIM_WALLTIME) ---help--- Build in support for a simulated network device. if SIM_NETDEV choice prompt "Simulated Network Device Type" default SIM_NETDEV_TAP config SIM_NETDEV_TAP bool "Simulated Network Device with TAP/WPCAP" depends on (HOST_LINUX || HOST_WINDOWS) ---help--- Build in support for a simulated network device using a TAP device on Linux or WPCAP on Windows. config SIM_NETDEV_VPNKIT bool "Simulated Network Device with VPNKit" ---help--- Build in support for a simulated network device using VPNKit. endchoice endif config SIM_NETDEV_VPNKIT_PATH string "Unix domain socket to communicate with VPNKit" default "/tmp/vpnkit-nuttx" depends on SIM_NETDEV_VPNKIT if HOST_LINUX choice prompt "Simulation Network Type" default SIM_NET_HOST_ROUTE depends on SIM_NETDEV_TAP config SIM_NET_HOST_ROUTE bool "Use local host route" ---help--- Add a host route for the simulation that points to the created tap device. The simulation will not be able to access the public network unless iptables is configured to masquerade for it. See boards/sim/sim sim/NETWORK-LINUX.txt for more information. config SIM_NET_BRIDGE bool "Attach to Linux bridge" ---help--- Add the created tap device to the specified bridge. You will need to manually configure the bridge IP address (if any) and routes that point to the bridge. See boards/sim/sim/sim/NETWORK-LINUX.txt for more information. endchoice endif if SIM_NET_BRIDGE config SIM_NET_BRIDGE_DEVICE string "Bridge device to attach" default "nuttx0" ---help--- The name of the bridge device (as passed to "brctl create") to which the simulation's TAP interface should be added. endif config SIM_SOUND bool "Simulated sound support" depends on AUDIO default y if SIM_SOUND choice prompt "Simulated sound Type" default SIM_SOUND_ALSA config SIM_SOUND_ALSA bool "alsa support on sim" depends on HOST_LINUX endchoice endif config SIM_RPTUN_MASTER bool "Remote Processor Tunneling Role" depends on RPTUN menu "Simulated Graphics/Input" config SIM_X11FB bool "X11 graphics/input" default n select SCHED_LPWORK depends on SIM_WALLTIME ---help--- Use X11 to provide graphics and input emulation to interact with host. config SIM_X11NOSHM bool "Don't use shared memory with X11" default n depends on SIM_X11FB ---help--- Don't use shared memory with the X11 graphics device emulation. menu "Window Configuration" config SIM_FBHEIGHT int "Display height" default 240 ---help--- Simulated display height. Default: 240 config SIM_FBWIDTH int "Display width" default 320 ---help--- Simulated width of the display. Default: 320 or 480 config SIM_FBBPP int "Pixel depth in bits" default 8 ---help--- Pixel depth in bits. Valid choices are 4, 8, 16, 24, or 32. If you use the X11 display emulation, the selected BPP must match the BPP of your graphics hardware (probably 32 bits). Default: 8 endmenu choice prompt "Graphics Device" default SIM_FRAMEBUFFER ---help--- Choose which kind of graphics device to emulate config SIM_LCDDRIVER bool "LCD device" depends on LCD ---help--- Emulate an LCD driver config SIM_FRAMEBUFFER bool "Framebuffer" depends on VIDEO_FB ---help--- Emulate a framebuffer endchoice if INPUT choice prompt "Input Device" default SIM_NOINPUT config SIM_TOUCHSCREEN bool "X11 mouse-based touchscreen emulation" depends on SIM_X11FB ---help--- Support an X11 mouse-based touchscreen emulation. Also needs INPUT=y config SIM_AJOYSTICK bool "X11 mouse-based analog joystick emulation" depends on SIM_X11FB ---help--- Support an X11 mouse-based analog joystick emulation. Also needs INPUT=y config SIM_BUTTONS bool "X11 mouse-based button emulation" depends on SIM_X11FB ---help--- Support an X11 mouse-based button emulation (left-click mapped to button press). Also needs INPUT=y config SIM_NOINPUT bool "No input device" endchoice # Input Device endif # if INPUT endmenu config SIM_TCNWAITERS bool "Maximum number poll() waiters" default 4 depends on SIM_TOUCHSCREEN ---help--- The maximum number of threads that can be waiting on poll() for a touchscreen event. Default: 4 config SIM_IOEXPANDER bool "Simulated I/O Expander" default n depends on IOEXPANDER select IOEXPANDER_INT_ENABLE ---help--- Build a simple, simulated I/O Expander chip simulation (for testing purposes only). if SIM_IOEXPANDER config SIM_INT_NCALLBACKS int "Max number of interrupt callbacks" default 4 ---help--- This is the maximum number of interrupt callbacks supported config SIM_INT_POLLDELAY int "Interrupt poll delay (used)" default 500000 ---help--- This microsecond delay defines the polling rate for missed interrupts. endif # SIM_IOEXPANDER config SIM_SPIFLASH bool "Simulated SPI FLASH with SMARTFS" default n select FS_SMARTFS select MTD_SMART ---help--- Adds a simulated SPI FLASH that responds to standard M25 style commands on the SPI bus. choice prompt "Simulated SPI FLASH Size" default SIM_SPIFLASH_1M depends on SIM_SPIFLASH config SIM_SPIFLASH_1M bool "1 MBit (128K Byte)" config SIM_SPIFLASH_8M bool "8 MBit (1M Byte)" config SIM_SPIFLASH_32M bool "32 MBit (4M Byte)" config SIM_SPIFLASH_64M bool "64 MBit (8M Byte)" config SIM_SPIFLASH_128M bool "128 MBit (16M Byte)" endchoice config SIM_SPIFLASH_SECTORSIZE int "FLASH Sector Erase Size" default 65536 depends on SIM_SPIFLASH ---help--- Sets the large sector erase size that the part simulates. This driver simulates SPI devices that have both a large sector erase as well as a "sub-sector" (per the datasheet) erase size (typically 4K bytes). config SIM_SPIFLASH_SUBSECTORSIZE int "FLASH Sub-Sector Erase Size" default 4096 depends on SIM_SPIFLASH ---help--- Sets the smaller sub-sector erase size supported by the FLASH emulation config SIM_SPIFLASH_M25P bool "Enable M25Pxx FLASH" depends on MTD_M25P ---help--- Enables simulation of an M25P type FLASH config SIM_SPIFLASH_SST26 bool "Enable SST26 FLASH" depends on MTD_SST26 ---help--- Enables simulation of an SST26 type FLASH config SIM_SPIFLASH_W25 bool "Enable W25 FLASH" depends on MTD_W25 ---help--- Enables simulation of a W25 type FLASH config SIM_SPIFLASH_CUSTOM bool "Enable Emulation of a Custom Manufacturer / ID FLASH" depends on SIM_SPIFLASH ---help--- Enables simulation of FLASH with a custom Manufacturer, ID and Capacity config SIM_SPIFLASH_MANUFACTURER hex "Hex ID of the FLASH manufacturer code" default 0x20 depends on SIM_SPIFLASH_CUSTOM ---help--- Allows the simulated FLASH Manufacturer ID to be set. config SIM_SPIFLASH_MEMORY_TYPE hex "Hex ID of the FLASH Memory Type code" default 0x20 depends on SIM_SPIFLASH_CUSTOM ---help--- Allows the simulated FLASH Memory Type code to be set. config SIM_SPIFLASH_CAPACITY hex "Hex ID of the FLASH capacity code" default 0x14 depends on SIM_SPIFLASH_CUSTOM ---help--- Allows the simulated FLASH Memory Capacity code to be set. config SIM_SPIFLASH_PAGESIZE int "FLASH Write / Program Page Size" default 256 depends on SIM_SPIFLASH ---help--- Sets the size of a page program operation. The page size represents the maximum number of bytes that can be sent for a program operation. If more bytes than this are sent on a single Page Program, then the address will "wrap" causing the initial data sent to be overwritten. This is consistent with standard SPI FLASH operation. config SIM_QSPIFLASH bool "Simulated QSPI FLASH with SMARTFS" default n select FS_SMARTFS select MTD_SMART ---help--- Adds a simulated QSPI FLASH that responds to N25QXXX style commands on the QSPI bus. choice prompt "Simulated QSPI FLASH Size" default SIM_QSPIFLASH_1M depends on SIM_QSPIFLASH config SIM_QSPIFLASH_1M bool "1 MBit (128K Byte)" config SIM_QSPIFLASH_8M bool "8 MBit (1M Byte)" config SIM_QSPIFLASH_32M bool "32 MBit (4M Byte)" config SIM_QSPIFLASH_64M bool "64 MBit (8M Byte)" config SIM_QSPIFLASH_128M bool "128 MBit (16M Byte)" endchoice config SIM_QSPIFLASH_MANUFACTURER hex "Hex ID of the FLASH manufacturer code" default 0x20 depends on SIM_QSPIFLASH ---help--- Allows the simulated FLASH Manufacturer ID to be set. config SIM_QSPIFLASH_MEMORY_TYPE hex "Hex ID of the FLASH Memory Type code" default 0xba depends on SIM_QSPIFLASH ---help--- Allows the simulated FLASH Memory Type code to be set. config SIM_QSPIFLASH_SECTORSIZE int "FLASH Sector Erase Size" default 65536 depends on SIM_QSPIFLASH ---help--- Sets the large sector erase size that the part simulates. This driver simulates QSPI devices that have both a large sector erase as well as a "sub-sector" (per the datasheet) erase size (typically 4K bytes). config SIM_QSPIFLASH_SUBSECTORSIZE int "FLASH Sub-Sector Erase Size" default 4096 depends on SIM_QSPIFLASH ---help--- Sets the smaller sub-sector erase size supported by the FLASH emulation config SIM_QSPIFLASH_PAGESIZE int "FLASH Write / Program Page Size" default 256 depends on SIM_QSPIFLASH ---help--- Sets the size of a page program operation. The page size represents the maximum number of bytes that can be sent for a program operation. If more bytes than this are sent on a single Page Program, then the address will "wrap" causing the initial data sent to be overwritten. This is consistent with standard SPI FLASH operation. config SIM_HCISOCKET bool "Attach Host Bluetooth" default false depends on (WIRELESS_BLUETOOTH && HOST_LINUX && SIM_WALLTIME) ---help--- Attached the local bluetooth device to the simulation target via HCI_CHANNEL_USER. This gives NuttX full control of the device, but is abstracted from the physical interface which is still handled by Linux. config SIM_BTUART bool "Attach Host Bluetooth As TTY Device" default false depends on (DRIVERS_BLUETOOTH && HOST_LINUX && SIM_WALLTIME) select BLUETOOTH_UART_SHIM if BLUETOOTH_UART ---help--- Attached the local bluetooth device to the simulation target via HCI_CHANNEL_USER. This gives NuttX full control of the device, but is abstracted from the physical interface which is still handled by Linux. Unlike SIM_HCISOCKET, BTUART will wrap the bluetooth interface/controller as a TTY device, which provides an option for developers to setup the bluetooth host in userspace. config SIM_I2CBUS bool "Simulated I2C Bus" default n select I2C ---help--- Build in support for simulated i2c bus if SIM_I2CBUS choice prompt "Simulated I2C Bus Type" default SIM_I2CBUS_LINUX config SIM_I2CBUS_LINUX bool "Linux I2C Bus Character Dev" depends on HOST_LINUX ---help--- Attach a Linux I2C bus via the character device interface. This should be used with caution as it could interfere with devices internal to the system. It is recommended to use this with a USB<>I2C device like the MCP2221 and set udev rules so that only the bus provided by this device can be controlled by the user running the simulator. https://www.kernel.org/doc/html/latest/i2c/dev-interface.html endchoice endif config SIM_UART_NUMBER int "The number of tty ports on sim platform, range is 0~4" default 0 config SIM_UART0_NAME string "the name of uart0 on sim" default "/dev/ttySIM0" depends on SIM_UART_NUMBER >= 1 config SIM_UART1_NAME string "the name of uart1 on sim" default "/dev/ttySIM1" depends on SIM_UART_NUMBER >= 2 config SIM_UART2_NAME string "the name of uart2 on sim" default "/dev/ttySIM2" depends on SIM_UART_NUMBER >= 3 config SIM_UART3_NAME string "the name of uart3 on sim" default "/dev/ttySIM3" depends on SIM_UART_NUMBER >= 4 endif # ARCH_SIM