629 lines
17 KiB
Plaintext
629 lines
17 KiB
Plaintext
#
|
|
# 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
|
|
|
|
config SIM_MOTOR_FOC
|
|
bool "Simulated FOC device"
|
|
default n
|
|
depends on MOTOR_FOC
|
|
---help---
|
|
Build a simulated lower-half FOC device
|
|
|
|
endif # ARCH_SIM
|