| .. _module-pw_emu-config: |
| |
| ============= |
| Configuration |
| ============= |
| .. pigweed-module-subpage:: |
| :name: pw_emu |
| |
| ``pw_emu`` configuration is done in the ``pw.pw_emu`` namespace of |
| :ref:`pigweed.json <seed-0101>`. |
| |
| The target configuration allows users to start other programs before |
| or after starting the main emulator process. This allows extending the |
| emulated target with simulation or emulation outside of the main |
| emulator. For example, for BLE emulation the main emulator could |
| emulate just the serial port while the HCI emulation done is in an |
| external program (e.g. `bumble <https://google.github.io/bumble>`_, |
| `netsim <https://android.googlesource.com/platform/tools/netsim>`_). |
| |
| .. _module-pw_emu-config-fragments: |
| |
| ----------------------- |
| Configuration fragments |
| ----------------------- |
| Emulation targets can be stored in JSON files outside of ``pigweed.json``. |
| These are known as *configuration fragments*. ``pigweed.json`` imports these |
| fragments via ``target_files``. |
| |
| Example configuration fragments: |
| |
| * `//pw_emu/qemu-lm3s6965evb.json <https://cs.opensource.google/pigweed/pigweed/+/main:pw_emu/qemu-lm3s6965evb.json>`_ |
| * `//pw_emu/renode-stm32f4_discovery.json <https://cs.opensource.google/pigweed/pigweed/+/main:pw_emu/renode-stm32f4_discovery.json>`_ |
| |
| .. _module-pw_emu-config-options: |
| |
| ----------------------- |
| Configuration reference |
| ----------------------- |
| The following list explains the valid schema for the ``pw_emu`` dict in |
| :ref:`pigweed.json <seed-0101>`. |
| |
| .. caution:: |
| |
| All the values below should be nested under ``pw.pw_emu`` in ``pigweed.json``. |
| For example, the top-level ``gdb`` item in the list below actually lives |
| here: |
| |
| .. code-block:: json |
| |
| { |
| "pw": { |
| "pw_emu": { |
| "gdb": ["..."] |
| } |
| } |
| } |
| |
| .. Note to maintainers: Multi-level unordered lists in reST are very finicky. |
| .. The syntax below is the only one that works (e.g. spaces are significant). |
| |
| * ``gdb`` (list of strings) - The default GDB command to run. |
| Can be overridden at the target level. |
| |
| * ``target_files`` (list of strings) - Relative or absolute paths |
| to :ref:`module-pw_emu-config-fragments`. Relative paths are |
| interpreted relative to the project root directory. |
| |
| * ``qemu`` (dict) - QEMU options. |
| |
| * ``executable`` (string) - The default command for starting |
| QEMU, e.g. ``system-arm-qemu``. Can be overridden at the target level. |
| |
| * ``args`` (list of strings) - Command line options to pass |
| directly to QEMU when ``executable`` is invoked. Can be **extended** (not |
| overridden) at the target level. |
| |
| * ``channels`` (dict) - Channel options. |
| |
| * ``type`` (string) - The :ref:`channel type |
| <module-pw_emu-config-channel-types>`. Optional. |
| |
| * ``gdb`` (dict) - Channel-specific GDB options. Optional. |
| |
| * ``type`` (string) - The :ref:`channel type |
| <module-pw_emu-config-channel-types>`. Optional. |
| |
| * ``qmp`` (dict) - Channel-specific QMP options. Optional. |
| |
| * ``type`` (string) - The :ref:`channel type |
| <module-pw_emu-config-channel-types>`. Optional. |
| |
| * ``monitor`` (dict) - Channel-specific Monitor options. Optional. |
| |
| * ``type`` (string) - The :ref:`channel type |
| <module-pw_emu-config-channel-types>`. Optional. |
| |
| * ``renode`` (dict) - Renode options. |
| |
| * ``executable`` (string) - The default command for starting Renode. Can be |
| overridden at the target level. |
| |
| * ``channels`` (dict) - Channel options. |
| |
| * ``terminals`` (dict) - Generic options for exposed terminal devices, e.g. |
| serial ports. |
| |
| * ``type`` (string) - The :ref:`channel type |
| <module-pw_emu-config-channel-types>`. Optional. |
| |
| * ``targets`` (dict) - Target configuration. Each key of this dict represents |
| a target name. |
| |
| * ``<target-name>`` (dict) - Configuration for a single target. Replace |
| ``<target-name>`` with a real target name, e.g. ``qemu-lm3s6965evb``. |
| |
| * ``gdb`` (list of strings) - The GDB command to run for this target. |
| Overrides the top-level ``gdb`` command. |
| |
| * ``pre-start-cmds`` (dict) - Commands to run before the emulator |
| is started. See also :ref:`module-pw_emu-config-pre-post-substitutions`. |
| |
| * ``<command-id>`` (list of strings) - A pre-start command. |
| Replace ``<command-id>`` with a descriptive name for the command. |
| |
| * ``post-start-cmds`` (dict) - Commands to run after the emulator |
| is started. See also :ref:`module-pw_emu-config-pre-post-substitutions`. |
| |
| * ``<command-id>`` (list of strings) - A post-start command. |
| Replace ``<command-id>`` with a descriptive name. |
| |
| * ``qemu`` (dict) - QEMU options for this target. Overrides the top-level |
| ``qemu`` command. |
| |
| * ``executable`` (string) - The command for starting QEMU on this target. |
| Required. |
| |
| * ``machine`` (string) - The QEMU ``-machine`` value for this target, |
| e.g. ``stm32vldiscovery``. See ``qemu-system-<arch> -machine help`` |
| for a list of supported machines. Required. |
| |
| * ``args`` (list of strings) - Command line options to pass |
| directly to QEMU when ``executable`` is invoked. This value **extends** |
| the top-level ``args`` value; it does *not* override it. Optional. |
| |
| * ``channels`` (dict) - Channel options for this target. |
| |
| * ``chardevs`` (dict) - QEMU chardev device configuration. Usually |
| serial ports. |
| |
| * ``<channel-name>`` (dict) - The configuration for a single channel. |
| Replace ``<channel-name>`` with a descriptive name. |
| |
| * ``id`` (string) - The ID of the QEMU chardev. |
| |
| * ``type`` (string) - The :ref:`channel type |
| <module-pw_emu-config-channel-types>`. Optional. |
| |
| * ``gdb`` (dict) - Channel-specific GDB options. Optional. |
| |
| * ``type`` (string) - The :ref:`channel type |
| <module-pw_emu-config-channel-types>`. Optional. |
| |
| * ``qmp`` (dict) - Channel-specific QMP options. Optional. |
| |
| * ``type`` (string) - The :ref:`channel type |
| <module-pw_emu-config-channel-types>`. Optional. |
| |
| * ``monitor`` (dict) - Channel-specific Monitor options. Optional. |
| |
| * ``type`` (string) - The :ref:`channel type |
| <module-pw_emu-config-channel-types>`. Optional. |
| |
| * ``renode`` (dict) - Renode options for this target. |
| |
| * ``executable`` (string) - The command for starting Renode on this target, |
| e.g. ``renode``. |
| |
| * ``machine`` (string) - The Renode script to use for machine definitions, |
| e.g. ``platforms/boards/stm32f4_discovery-kit.repl``. |
| |
| * ``channels`` (dict) - Channel options. |
| |
| * ``terminals`` (dict) - Exposed terminal devices, usually serial ports. |
| |
| * ``<device-name>`` (dict) - Device configuration. Replace ``<device-name>`` |
| with a descriptive name, e.g. ``serial0``. |
| |
| * ``device-path`` (string) - The path to the device, e.g. |
| ``sysbus.usart1``. |
| |
| * ``type`` (string) - The :ref:`channel type |
| <module-pw_emu-config-channel-types>`. Optional. |
| |
| .. _module-pw_emu-config-channel-types: |
| |
| Channel types |
| ============= |
| The following channel types are currently supported: |
| |
| * ``pty`` - Full support on macOS and Linux. Renode only supports PTYs for |
| ``terminals``. |
| |
| * ``tcp`` - Full support on all platforms and channels. This is the default |
| value if no channel type is configured. |
| |
| The channel configuration can be set at the emulator, target, or channel level. |
| The channel level takes precedence, then the target level, then the emulator |
| level. |
| |
| .. _module-pw_emu-config-pre-post-substitutions: |
| |
| Pre-start and post-start expression substitutions |
| ================================================= |
| The following expressions are substituted in the ``pre-start-cmd`` and |
| ``post-start-cmd`` strings: |
| |
| * ``$pw_emu_wdir{relative-path}`` - Replaces the statement with an absolute path |
| by concatenating the emulator's working directory with the given relative path. |
| |
| * ``$pw_emu_channel_port{channel-name}`` - Replaces the statement with the port |
| number for the given channel name. The channel type should be ``tcp``. |
| |
| * ``$pw_emu_channel_host{channel-name}`` - Replaces the statement with the host |
| for the given channel name. The channel type should be ``tcp``. |
| |
| * ``$pw_emu_channel_path{channel-name}`` - Replaces the statement with the path |
| for the given channel name. The channel type should be ``pty``. |
| |
| .. _module-pw_emu-config-string-substitutions: |
| |
| Configuration string substitutions |
| ================================== |
| The following expressions are substituted in configuration strings, including |
| :ref:`module-pw_emu-config-fragments`: |
| |
| * ``$pw_env{envvar}`` - Replaces the statement with the value of ``envvar``. |
| If ``envvar`` doesn't exist a configuration error is raised. |
| |
| ---------------- |
| More pw_emu docs |
| ---------------- |
| .. include:: docs.rst |
| :start-after: .. pw_emu-nav-start |
| :end-before: .. pw_emu-nav-end |