nuttx/arch/sim/Kconfig

450 lines
12 KiB
Plaintext
Raw Normal View History

#
# 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.
2015-09-24 22:53:04 +02:00
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_ASAN
bool "Address Sanitizer"
default n
depends on MM_CUSTOMIZE_MANAGER && FRAME_POINTER
---help---
AddressSanitizer (ASan) is a fast compiler-based tool for detecting memory
bugs in native code.
config SIM_UBSAN
bool "Undefined Behaviour Sanitizer"
default n
depends on FRAME_POINTER
---help---
Compile-time instrumentation is used to detect various undefined behaviours
at runtime.
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
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: 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
config SIM_STACKSIZE_ADJUSTMENT
int "The adjustment of stack size for sim"
default 65536
---help---
The adjustment of stack size for sim. When the task is created,
the stack size is increased by this amount.
config SIM_HOSTFS
bool "Simulated HostFS"
depends on FS_HOSTFS
---help---
Access host filesystem through HostFS.
choice
prompt "Simulated Network Interface"
default SIM_NETDEV
depends on NET
optional
config SIM_NETDEV
bool "Simulated Network Device"
select ARCH_HAVE_NETDEV_STATISTICS
select SCHED_LPWORK
select NET_ETHERNET
2020-03-18 13:12:26 +01:00
---help---
Build in support for a simulated network device.
config SIM_NETUSRSOCK
bool "Simulated Network Device with Native Stack via usrsock"
select NET_USRSOCK
---help---
Built-in support for a simulated network device using native stack via usrsock
endchoice
2020-03-18 13:12:26 +01:00
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.
2020-03-18 13:12:26 +01:00
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
SUMMARY ------- This patch enhances networking support for the simulation under Linux. Includes updated support for Linux TUN/TAP, and the addition of support for Linux bridge devices. CHANGES ------- o Check to see if the d_txavail callback is present before calling it in the arp send code. This prevents a segfault when simulating the telnetd daemon with arp send enabled. o Adjust the simulation's netdriver_loop() so it will detect and respond to ARP requests. o Do not attempt to take the tap device's hardware address for use by the simulation. That hardware address belongs to the host end of the link, not the simulation end. Generate a randomized MAC address instead. o Do not assign an IP address to the interface on the host side of the TAP link. + Provide two modes: "host route" and "bridge". + In host route mode, maintain a host route that points any traffic for the simulation's IP address to the tap device. In this mode, so long as the simulation's IP is a free address in the same subnet as the host, no additional configuration will be required to talk to it from the host. Note that address changes are handled automatically if they follow the rule of if-down/set-address/if-up, which everything seems to. + In bridge mode, add the tap device to the specified bridge instance. See configs/sim/NETWORK-LINUX.txt for information and usage examples. This enables much more flexible configurations (with fewer headaches), such as running multiple simulations on a single host, all of which can access the network the host is connected to. o Refresh configurations in configs/sim where CONFIG_NET=y. They default to "host route" mode. o Add configs/sim/NETWORK-LINUX.txt CAVEATS ------- - The MAC address generation code is extremely simplistic, and does not check for potential conflicts on the network. Probably not an issue, but something to be aware of. - I was careful to leave it in a state where Cygwin/pcap should still work, but I don't have a Windows environment to test in. This should be checked. - I don't know if this was ever intended to work with OS X. I didn't even try to test it there. NOTES ----- - Was able to get telnetd working and simulate nsh over telnet, but only so long as listen backlogs were disabled. There appears to be a bug in the backlog code where sockets are being returned in SYN_RCVD state instead of waiting until they're ESTABLISHED; if you perform an immediate send after accepting the connection, it will confuse the stack and the send will hang; additionally, the connection will never reach ESTABLISHED state. Can be worked around by adding a sleep(1) after the accept in telnetd. I don't have the necessary knowledge of the IP stack to know what the correct fix is.
2016-05-21 01:36:14 +02:00
if HOST_LINUX
choice
prompt "Simulation Network Type"
default SIM_NET_HOST_ROUTE
2020-03-18 13:12:26 +01:00
depends on SIM_NETDEV_TAP
SUMMARY ------- This patch enhances networking support for the simulation under Linux. Includes updated support for Linux TUN/TAP, and the addition of support for Linux bridge devices. CHANGES ------- o Check to see if the d_txavail callback is present before calling it in the arp send code. This prevents a segfault when simulating the telnetd daemon with arp send enabled. o Adjust the simulation's netdriver_loop() so it will detect and respond to ARP requests. o Do not attempt to take the tap device's hardware address for use by the simulation. That hardware address belongs to the host end of the link, not the simulation end. Generate a randomized MAC address instead. o Do not assign an IP address to the interface on the host side of the TAP link. + Provide two modes: "host route" and "bridge". + In host route mode, maintain a host route that points any traffic for the simulation's IP address to the tap device. In this mode, so long as the simulation's IP is a free address in the same subnet as the host, no additional configuration will be required to talk to it from the host. Note that address changes are handled automatically if they follow the rule of if-down/set-address/if-up, which everything seems to. + In bridge mode, add the tap device to the specified bridge instance. See configs/sim/NETWORK-LINUX.txt for information and usage examples. This enables much more flexible configurations (with fewer headaches), such as running multiple simulations on a single host, all of which can access the network the host is connected to. o Refresh configurations in configs/sim where CONFIG_NET=y. They default to "host route" mode. o Add configs/sim/NETWORK-LINUX.txt CAVEATS ------- - The MAC address generation code is extremely simplistic, and does not check for potential conflicts on the network. Probably not an issue, but something to be aware of. - I was careful to leave it in a state where Cygwin/pcap should still work, but I don't have a Windows environment to test in. This should be checked. - I don't know if this was ever intended to work with OS X. I didn't even try to test it there. NOTES ----- - Was able to get telnetd working and simulate nsh over telnet, but only so long as listen backlogs were disabled. There appears to be a bug in the backlog code where sockets are being returned in SYN_RCVD state instead of waiting until they're ESTABLISHED; if you perform an immediate send after accepting the connection, it will confuse the stack and the send will hang; additionally, the connection will never reach ESTABLISHED state. Can be worked around by adding a sleep(1) after the accept in telnetd. I don't have the necessary knowledge of the IP stack to know what the correct fix is.
2016-05-21 01:36:14 +02:00
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.
SUMMARY ------- This patch enhances networking support for the simulation under Linux. Includes updated support for Linux TUN/TAP, and the addition of support for Linux bridge devices. CHANGES ------- o Check to see if the d_txavail callback is present before calling it in the arp send code. This prevents a segfault when simulating the telnetd daemon with arp send enabled. o Adjust the simulation's netdriver_loop() so it will detect and respond to ARP requests. o Do not attempt to take the tap device's hardware address for use by the simulation. That hardware address belongs to the host end of the link, not the simulation end. Generate a randomized MAC address instead. o Do not assign an IP address to the interface on the host side of the TAP link. + Provide two modes: "host route" and "bridge". + In host route mode, maintain a host route that points any traffic for the simulation's IP address to the tap device. In this mode, so long as the simulation's IP is a free address in the same subnet as the host, no additional configuration will be required to talk to it from the host. Note that address changes are handled automatically if they follow the rule of if-down/set-address/if-up, which everything seems to. + In bridge mode, add the tap device to the specified bridge instance. See configs/sim/NETWORK-LINUX.txt for information and usage examples. This enables much more flexible configurations (with fewer headaches), such as running multiple simulations on a single host, all of which can access the network the host is connected to. o Refresh configurations in configs/sim where CONFIG_NET=y. They default to "host route" mode. o Add configs/sim/NETWORK-LINUX.txt CAVEATS ------- - The MAC address generation code is extremely simplistic, and does not check for potential conflicts on the network. Probably not an issue, but something to be aware of. - I was careful to leave it in a state where Cygwin/pcap should still work, but I don't have a Windows environment to test in. This should be checked. - I don't know if this was ever intended to work with OS X. I didn't even try to test it there. NOTES ----- - Was able to get telnetd working and simulate nsh over telnet, but only so long as listen backlogs were disabled. There appears to be a bug in the backlog code where sockets are being returned in SYN_RCVD state instead of waiting until they're ESTABLISHED; if you perform an immediate send after accepting the connection, it will confuse the stack and the send will hang; additionally, the connection will never reach ESTABLISHED state. Can be worked around by adding a sleep(1) after the accept in telnetd. I don't have the necessary knowledge of the IP stack to know what the correct fix is.
2016-05-21 01:36:14 +02:00
config SIM_NET_BRIDGE
bool "Attach to Linux bridge"
---help---
SUMMARY ------- This patch enhances networking support for the simulation under Linux. Includes updated support for Linux TUN/TAP, and the addition of support for Linux bridge devices. CHANGES ------- o Check to see if the d_txavail callback is present before calling it in the arp send code. This prevents a segfault when simulating the telnetd daemon with arp send enabled. o Adjust the simulation's netdriver_loop() so it will detect and respond to ARP requests. o Do not attempt to take the tap device's hardware address for use by the simulation. That hardware address belongs to the host end of the link, not the simulation end. Generate a randomized MAC address instead. o Do not assign an IP address to the interface on the host side of the TAP link. + Provide two modes: "host route" and "bridge". + In host route mode, maintain a host route that points any traffic for the simulation's IP address to the tap device. In this mode, so long as the simulation's IP is a free address in the same subnet as the host, no additional configuration will be required to talk to it from the host. Note that address changes are handled automatically if they follow the rule of if-down/set-address/if-up, which everything seems to. + In bridge mode, add the tap device to the specified bridge instance. See configs/sim/NETWORK-LINUX.txt for information and usage examples. This enables much more flexible configurations (with fewer headaches), such as running multiple simulations on a single host, all of which can access the network the host is connected to. o Refresh configurations in configs/sim where CONFIG_NET=y. They default to "host route" mode. o Add configs/sim/NETWORK-LINUX.txt CAVEATS ------- - The MAC address generation code is extremely simplistic, and does not check for potential conflicts on the network. Probably not an issue, but something to be aware of. - I was careful to leave it in a state where Cygwin/pcap should still work, but I don't have a Windows environment to test in. This should be checked. - I don't know if this was ever intended to work with OS X. I didn't even try to test it there. NOTES ----- - Was able to get telnetd working and simulate nsh over telnet, but only so long as listen backlogs were disabled. There appears to be a bug in the backlog code where sockets are being returned in SYN_RCVD state instead of waiting until they're ESTABLISHED; if you perform an immediate send after accepting the connection, it will confuse the stack and the send will hang; additionally, the connection will never reach ESTABLISHED state. Can be worked around by adding a sleep(1) after the accept in telnetd. I don't have the necessary knowledge of the IP stack to know what the correct fix is.
2016-05-21 01:36:14 +02:00
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.
SUMMARY ------- This patch enhances networking support for the simulation under Linux. Includes updated support for Linux TUN/TAP, and the addition of support for Linux bridge devices. CHANGES ------- o Check to see if the d_txavail callback is present before calling it in the arp send code. This prevents a segfault when simulating the telnetd daemon with arp send enabled. o Adjust the simulation's netdriver_loop() so it will detect and respond to ARP requests. o Do not attempt to take the tap device's hardware address for use by the simulation. That hardware address belongs to the host end of the link, not the simulation end. Generate a randomized MAC address instead. o Do not assign an IP address to the interface on the host side of the TAP link. + Provide two modes: "host route" and "bridge". + In host route mode, maintain a host route that points any traffic for the simulation's IP address to the tap device. In this mode, so long as the simulation's IP is a free address in the same subnet as the host, no additional configuration will be required to talk to it from the host. Note that address changes are handled automatically if they follow the rule of if-down/set-address/if-up, which everything seems to. + In bridge mode, add the tap device to the specified bridge instance. See configs/sim/NETWORK-LINUX.txt for information and usage examples. This enables much more flexible configurations (with fewer headaches), such as running multiple simulations on a single host, all of which can access the network the host is connected to. o Refresh configurations in configs/sim where CONFIG_NET=y. They default to "host route" mode. o Add configs/sim/NETWORK-LINUX.txt CAVEATS ------- - The MAC address generation code is extremely simplistic, and does not check for potential conflicts on the network. Probably not an issue, but something to be aware of. - I was careful to leave it in a state where Cygwin/pcap should still work, but I don't have a Windows environment to test in. This should be checked. - I don't know if this was ever intended to work with OS X. I didn't even try to test it there. NOTES ----- - Was able to get telnetd working and simulate nsh over telnet, but only so long as listen backlogs were disabled. There appears to be a bug in the backlog code where sockets are being returned in SYN_RCVD state instead of waiting until they're ESTABLISHED; if you perform an immediate send after accepting the connection, it will confuse the stack and the send will hang; additionally, the connection will never reach ESTABLISHED state. Can be worked around by adding a sleep(1) after the accept in telnetd. I don't have the necessary knowledge of the IP stack to know what the correct fix is.
2016-05-21 01:36:14 +02:00
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
menu "Simulated Graphics/Input"
config SIM_X11FB
bool "X11 graphics/input"
default n
select SCHED_LPWORK
---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
config SIM_VNCSERVER
bool "VNC server"
depends on VNCSERVER
---help---
Serve a VNC server
endchoice
if INPUT
choice
prompt "Input Device"
default SIM_NOINPUT
config SIM_TOUCHSCREEN
bool "X11 mouse-based touchscreen emulation"
select INPUT_TOUCHSCREEN
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_HCISOCKET
bool "Attach Host Bluetooth"
default false
depends on HOST_LINUX
---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_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_SPI
bool "Simulated SPI port"
default n
select SPI
---help---
Build in support for simulated spi port
if SIM_SPI
choice
prompt "Simulated SPI Type"
default SIM_SPI_LINUX
config SIM_SPI_LINUX
bool "Linux SPI Character Dev"
depends on HOST_LINUX
---help---
Attach a Linux SPI port via the character device
interface. To achieve a SPI port on Linux host, it is
recommended to use a USB<>SPI device such as CH341A/B.
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