From f33d8fd2b080408ce6656f00645512ca9d8ff706 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20Cab=C3=A9?= Date: Fri, 5 Sep 2025 14:08:32 +0200 Subject: [PATCH 1/2] boards: doc: arm: mps2: fix documentation structure MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Prevent board docs to be mounted twice in the doc hierarchy ; also leverage zephyr:board-supported-hw:: to provide a short overview of the features supported by each board variant. Signed-off-by: Benjamin Cabé --- boards/arm/mps2/doc/index.rst | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/boards/arm/mps2/doc/index.rst b/boards/arm/mps2/doc/index.rst index b102b37fd8046..fbdfd3d0aa0ec 100644 --- a/boards/arm/mps2/doc/index.rst +++ b/boards/arm/mps2/doc/index.rst @@ -1,10 +1,10 @@ .. zephyr:board:: mps2 -ARM Ltd. -######## +The MPS2 board family includes the following board targets. Click on +the links below to get more information about each board target. -.. toctree:: - :maxdepth: 1 - :glob: +* :ref:`mps2_an521_board` +* :ref:`mps2_armv6m_board` +* :ref:`mps2_armv7m_board` - * +.. zephyr:board-supported-hw:: From f45de5996874d16cc848f7adf6e17eafd7e27033 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20Cab=C3=A9?= Date: Fri, 5 Sep 2025 14:14:46 +0200 Subject: [PATCH 2/2] boards: doc: arm: fvp_baser_aemv8r: documentation cleanup MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Consolidate board documentation into a single page to avoid duplication and, more importantly, ensure the board documentation is properly displayed in the documentation website. Signed-off-by: Benjamin Cabé --- boards/arm/fvp_baser_aemv8r/doc/aarch32.rst | 105 ------- boards/arm/fvp_baser_aemv8r/doc/aarch64.rst | 116 -------- .../doc/debug-with-arm-ds.rst | 147 ---------- .../doc/images/perspective-choose-other.jpg | Bin 22686 -> 0 bytes boards/arm/fvp_baser_aemv8r/doc/index.rst | 273 ++++++++++++++++++ doc/_scripts/redirects.py | 3 + samples/net/dhcpv4_client/README.rst | 2 +- 7 files changed, 277 insertions(+), 369 deletions(-) delete mode 100644 boards/arm/fvp_baser_aemv8r/doc/aarch32.rst delete mode 100644 boards/arm/fvp_baser_aemv8r/doc/aarch64.rst delete mode 100644 boards/arm/fvp_baser_aemv8r/doc/debug-with-arm-ds.rst delete mode 100644 boards/arm/fvp_baser_aemv8r/doc/images/perspective-choose-other.jpg create mode 100644 boards/arm/fvp_baser_aemv8r/doc/index.rst diff --git a/boards/arm/fvp_baser_aemv8r/doc/aarch32.rst b/boards/arm/fvp_baser_aemv8r/doc/aarch32.rst deleted file mode 100644 index 080d316e6b783..0000000000000 --- a/boards/arm/fvp_baser_aemv8r/doc/aarch32.rst +++ /dev/null @@ -1,105 +0,0 @@ -.. _fvp_baser_aemv8r_aarch32: - -Arm FVP BaseR AEMv8-R AArch32 -############################# - -Overview -******** - -This board configuration uses Armv8-R AEM FVP [1]_ to emulate a generic -Armv8-R [2]_ 32-bit hardware platform. - -Fixed Virtual Platforms (FVP) are complete simulations of an Arm system, -including processor, memory and peripherals. These are set out in a -"programmer's view", which gives you a comprehensive model on which to build -and test your software. - -The Armv8-R AEM FVP is a free of charge Armv8-R Fixed Virtual Platform. It -supports the latest Armv8-R feature set. Please refer to FVP documentation -page [3]_ for more details about FVP. - -To Run the Fixed Virtual Platform simulation tool you must download "Armv8-R AEM -FVP" from Arm developer [1]_ (This might require the user to register) and -install it on your host PC. - -Hardware -******** - -Supported Features -================== - -The following hardware features are supported: - -+-----------------------+------------+----------------------+ -| Interface | Controller | Driver/Component | -+=======================+============+======================+ -| GICv3 | on-chip | interrupt controller | -+-----------------------+------------+----------------------+ -| PL011 UART | on-chip | serial port | -+-----------------------+------------+----------------------+ -| Arm GENERIC TIMER | on-chip | system clock | -+-----------------------+------------+----------------------+ - -The kernel currently does not support other hardware features on this platform. - -When FVP is launched with ``-a, --application FILE`` option, the kernel will be -loaded into DRAM region ``[0x0-0x7FFFFFFF]``. For more information, please refer -to the official Armv8-R AEM FVP memory map document [4]_. - -Devices -======= - -System Clock ------------- - -This board configuration uses a system clock frequency of 100 MHz. - -Serial Port ------------ - -This board configuration uses a single serial communication channel with the -UART0. - -Programming and Debugging -************************* - -Environment -=========== - -First, set the ``ARMFVP_BIN_PATH`` environment variable before building. -Optionally, set ``ARMFVP_EXTRA_FLAGS`` to pass additional arguments to the FVP. - -.. code-block:: bash - - export ARMFVP_BIN_PATH=/path/to/fvp/directory - -Programming -=========== - -Use this configuration to build basic Zephyr applications and kernel tests in the -Arm FVP emulated environment, for example, with the :zephyr:code-sample:`synchronization` sample: - -.. zephyr-app-commands:: - :zephyr-app: samples/synchronization - :host-os: unix - :board: fvp_baser_aemv8r/fvp_aemv8r_aarch32 - :goals: build - -This will build an image with the synchronization sample app. -Then you can run it with ``west build -t run``. - -Debugging -========= - -Refer to the detailed overview about :ref:`application_debugging`. - -References -********** - -.. target-notes:: - -.. [1] https://developer.arm.com/tools-and-software/simulation-models/fixed-virtual-platforms/arm-ecosystem-models -.. [2] Arm Architecture Reference Manual Supplement - Armv8, for Armv8-R AArch32 architecture profile - https://developer.arm.com/documentation/ddi0568/latest -.. [3] https://developer.arm.com/tools-and-software/simulation-models/fixed-virtual-platforms/docs -.. [4] https://developer.arm.com/documentation/100964/1114/Base-Platform/Base---memory/BaseR-Platform-memory-map diff --git a/boards/arm/fvp_baser_aemv8r/doc/aarch64.rst b/boards/arm/fvp_baser_aemv8r/doc/aarch64.rst deleted file mode 100644 index 0f9a28d0a8107..0000000000000 --- a/boards/arm/fvp_baser_aemv8r/doc/aarch64.rst +++ /dev/null @@ -1,116 +0,0 @@ -.. _fvp_baser_aemv8r: - -Arm FVP BaseR AEMv8-R -##################### - -.. toctree:: - :maxdepth: 1 - - debug-with-arm-ds.rst - -Overview -******** - -This board configuration uses Armv8-R AEM FVP [1]_ to emulate a generic -Armv8-R [2]_ 64-bit hardware platform. - -Fixed Virtual Platforms (FVP) are complete simulations of an Arm system, -including processor, memory and peripherals. These are set out in a -"programmer's view", which gives you a comprehensive model on which to build -and test your software. - -The Armv8-R AEM FVP is a free of charge Armv8-R Fixed Virtual Platform. It -supports the latest Armv8-R feature set. Please refer to FVP documentation -page [3]_ for more details about FVP. - -To Run the Fixed Virtual Platform simulation tool you must download "Armv8-R AEM -FVP" from Arm developer [1]_ (This might require the user to register) and -install it on your host PC. - -The current minimum required version of "Armv8-R AEM FVP" is 11.16.16. - -Hardware -******** - -Supported Features -================== - -The following hardware features are supported: - -+-----------------------+------------+----------------------+ -| Interface | Controller | Driver/Component | -+=======================+============+======================+ -| GICv3 | on-chip | interrupt controller | -+-----------------------+------------+----------------------+ -| PL011 UART | on-chip | serial port | -+-----------------------+------------+----------------------+ -| Arm GENERIC TIMER | on-chip | system clock | -+-----------------------+------------+----------------------+ -| SMSC_91C111 | on-chip | ethernet device | -+-----------------------+------------+----------------------+ - -The kernel currently does not support other hardware features on this platform. - -When FVP is launched with ``-a, --application FILE`` option, the kernel will be -loaded into DRAM region ``[0x0-0x7FFFFFFF]``. For more information, please refer -to the official Armv8-R AEM FVP memory map document [4]_. - -Devices -======= - -System Clock ------------- - -This board configuration uses a system clock frequency of 100 MHz. - -Serial Port ------------ - -This board configuration uses a single serial communication channel with the -UART0. - -Programming and Debugging -************************* - -Environment -=========== - -First, set the ``ARMFVP_BIN_PATH`` environment variable before building. -Optionally, set ``ARMFVP_EXTRA_FLAGS`` to pass additional arguments to the FVP. - -.. code-block:: bash - - export ARMFVP_BIN_PATH=/path/to/fvp/directory - -Programming -=========== - -Use this configuration to build basic Zephyr applications and kernel tests in the -Arm FVP emulated environment, for example, with the :zephyr:code-sample:`synchronization` sample: - -.. zephyr-app-commands:: - :zephyr-app: samples/synchronization - :host-os: unix - :board: fvp_baser_aemv8r/fvp_aemv8r_aarch64 - :goals: build - -This will build an image with the synchronization sample app. -Then you can run it with ``west build -t run``. - -Debugging -========= - -Refer to the detailed overview about :ref:`application_debugging`. -See :ref:`debug_with_arm_ds` for how to debug with Arm Development Studio [5]_. - -References -********** - -.. target-notes:: - -.. [1] https://developer.arm.com/tools-and-software/simulation-models/fixed-virtual-platforms/arm-ecosystem-models -.. [2] Arm Architecture Reference Manual Supplement - Armv8, for Armv8-R AArch64 architecture profile - https://developer.arm.com/documentation/ddi0600/latest/ -.. [3] https://developer.arm.com/tools-and-software/simulation-models/fixed-virtual-platforms/docs -.. [4] https://developer.arm.com/documentation/100964/1114/Base-Platform/Base---memory/BaseR-Platform-memory-map -.. [5] https://developer.arm.com/tools-and-software/embedded/arm-development-studio diff --git a/boards/arm/fvp_baser_aemv8r/doc/debug-with-arm-ds.rst b/boards/arm/fvp_baser_aemv8r/doc/debug-with-arm-ds.rst deleted file mode 100644 index 79b48aca53568..0000000000000 --- a/boards/arm/fvp_baser_aemv8r/doc/debug-with-arm-ds.rst +++ /dev/null @@ -1,147 +0,0 @@ -.. _debug_with_arm_ds: - -Debug with Arm DS -################# - -Install Arm DS -************** - -Please refer to the official Arm Development Studio Page [1]_ for details. Here -``Version: 2020.b Build: 2020110909`` is used in the following example. - -.. image:: images/version-info.jpg - :align: center - :alt: Arm DS Version - -Download Arm FVP BaseR AEMv8-R -****************************** - -Please refer to official FVP page [2]_ for download instructions. Here ``$FVP_D`` -is used to indicate which directory is FVP located. - -Use DS perspective -****************** - -From menu choose ``Window -> Perspective -> Open Perspective -> Other...``: - -.. image:: images/perspective-choose-other.jpg - :align: center - :alt: Arm DS Perspective choose Other... - -In the opened window, choose ``Development Studio (default)``: - -.. image:: images/perspective-choose-ds.jpg - :align: center - :alt: Arm DS Perspective choose DS - -Create a new configuration database -*********************************** - -Create a new configuration database by selecting ``File -> New -> Other... -> Configuration Database``: - -.. image:: images/create-new-configuration-database.jpg - :align: center - :alt: Arm DS create new configuration database - -Choose a name for the database. Here ``Zephyr`` is used: - -.. image:: images/create-new-configuration-database_database-name.jpg - :align: center - :alt: Arm DS create new configuration database: choose database name - -Click ``Finish`` and the new configuration database can be seen in ``Project Explorer``: - -.. image:: images/create-new-configuration-database_shown-in-project-explorer.jpg - :align: center - :alt: Arm DS create new configuration database: shown in project explorer - -Create a new model configuration -******************************** - -Right click ``Zephyr`` in ``Project Explorer``, choose ``New -> Model Configuration``: - -.. image:: images/create-new-model-configuration.jpg - :align: center - :alt: Arm DS create new model configuration - -In the opened window: - -1. Choose ``Iris`` for ``Model Interface``, then ``Next >``. -2. Choose ``Launch and connect to specific model``, then ``Next >``. -3. Set ``Model Path`` to ``$FVP_D/FVP_BaseR_AEMv8R``, then ``Finish``. - -.. image:: images/create-new-model-configuration_model-path.jpg - :align: center - :alt: Arm DS create new model configuration: set model path - -Then in ``FVP_BaseR_AEMv8R`` tab, change ``ARMAEMv8-R_`` to ``V8R64-Generic``, -click ``Save`` and then click ``Import``: - -.. image:: images/create-new-model-configuration_model-use-V8R64-Generic.jpg - :align: center - :alt: Arm DS create new model configuration: import - -Create a new launch configuration -********************************* - -From ``Project Explorer``, right click ``FVP_BaseR_AEMv8R`` and select ``Debug as -> Debug configurations...``: - -.. image:: images/create-new-launch-configuration_context-menu.jpg - :align: center - :alt: Arm DS create new launch configuration: context menu - -Select ``Generic Arm C/C++ Application`` and click ``New launch configuration`` button. -A new configuration named ``New_configuration`` will be created. - -1. In ``Connection`` tab: - - - In ``Select target`` box, select ``Imported -> FVP_BaseR_AEMv8R -> Bare Metal Debug -> ARMAEMv8-R_MP_0`` - - In ``Connections`` box, set ``Model parameters`` to:: - - -C bp.dram.enable_atomic_ops=1 -C bp.sram.enable_atomic_ops=1 -C bp.refcounter.non_arch_start_at_default=1 -C gic_distributor.GICD_CTLR-DS-1-means-secure-only=1 -C gic_distributor.has-two-security-states=0 -C bp.vis.disable_visualisation=1 -C cluster0.has_aarch64=1 -a /home/fengqi/zephyrproject/build/zephyr/zephyr.elf - - These parameters are passed to ``FVP_BaseR_AEMv8R`` when launches. Run ``FVP_BaseR_AEMv8R --help`` - to see all command line options. Run ``FVP_BaseR_AEMv8R --list-params`` to see all supported parameters. - The file ``zephyr.elf`` specified by ``-a`` is the binary built from Zephyr. - -.. image:: images/create-new-launch-configuration_connection.jpg - :align: center - :alt: Arm DS create new launch configuration: connection - -2. In ``Files`` tab: - - In ``Files`` box, set ``Load symbols from file`` to full path of ``zephyr.elf`` that you built. - -.. image:: images/create-new-launch-configuration_files.jpg - :align: center - :alt: Arm DS create new launch configuration: files - -3. In ``Debugger`` tab: - - - In ``Run control`` box, check ``Execute debugger commands`` and insert:: - - add-symbol-file "/home/fengqi/zephyrproject/build/zephyr/zephyr.elf" EL1S:0 - - Replace ``/home/fengqi/zephyrproject/build/zephyr/zephyr.elf`` with your local path. - - - In ``Paths`` box, set ``Source search directory`` to the path to Zephyr source code. - -.. image:: images/create-new-launch-configuration_debugger.jpg - :align: center - :alt: Arm DS create new launch configuration: debugger - -After all these changes are made, click ``Apply``, then click ``Debug``. DS will -launch ``FVP_BaseR_AEMv8R`` and connect to it. You can see a new session is -connected in ``Debug Control`` window. - -.. image:: images/DS-debug-working.jpg - :align: center - :alt: Arm DS working - -References -********** - -.. target-notes:: - -.. [1] https://developer.arm.com/tools-and-software/embedded/arm-development-studio -.. [2] https://developer.arm.com/tools-and-software/simulation-models/fixed-virtual-platforms/arm-ecosystem-models diff --git a/boards/arm/fvp_baser_aemv8r/doc/images/perspective-choose-other.jpg b/boards/arm/fvp_baser_aemv8r/doc/images/perspective-choose-other.jpg deleted file mode 100644 index cbaa0a21049533a878a23814970fb392197d2766..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22686 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 Q7r@{DN(TS4;IEN?0G6K>&j0`b diff --git a/boards/arm/fvp_baser_aemv8r/doc/index.rst b/boards/arm/fvp_baser_aemv8r/doc/index.rst new file mode 100644 index 0000000000000..a61e6031f0ff7 --- /dev/null +++ b/boards/arm/fvp_baser_aemv8r/doc/index.rst @@ -0,0 +1,273 @@ +.. zephyr:board:: fvp_baser_aemv8r + +Overview +******** + +This board configuration uses Armv8-R AEM FVP [1]_ to emulate a generic +Armv8-R [2]_ hardware platform supporting both 32-bit (AArch32) and 64-bit (AArch64) architectures. + +Fixed Virtual Platforms (FVP) are complete simulations of an Arm system, +including processor, memory and peripherals. These are set out in a +"programmer's view", which gives you a comprehensive model on which to build +and test your software. + +The Armv8-R AEM FVP is a free of charge Armv8-R Fixed Virtual Platform. It +supports the latest Armv8-R feature set. Please refer to FVP documentation +page [3]_ for more details about FVP. + +To Run the Fixed Virtual Platform simulation tool you must download "Armv8-R AEM +FVP" from Arm developer [1]_ (This might require the user to register) and +install it on your host PC. + +The current minimum required version of "Armv8-R AEM FVP" is 11.16.16. + +Hardware +******** + +Supported Features +================== + +.. zephyr:board-supported-hw:: + +When FVP is launched with ``-a, --application FILE`` option, the kernel will be +loaded into DRAM region ``[0x0-0x7FFFFFFF]``. For more information, please refer +to the official Armv8-R AEM FVP memory map document [4]_. + +Devices +======= + +System Clock +------------ + +This board configuration uses a system clock frequency of 100 MHz. + +Serial Port +----------- + +This board configuration uses a single serial communication channel with the +UART0. + +Programming and Debugging +************************* + +Environment +=========== + +First, set the ``ARMFVP_BIN_PATH`` environment variable before building. +Optionally, set ``ARMFVP_EXTRA_FLAGS`` to pass additional arguments to the FVP. + +.. code-block:: bash + + export ARMFVP_BIN_PATH=/path/to/fvp/directory + +Programming +=========== + +Use this configuration to build basic Zephyr applications and kernel tests in the +Arm FVP emulated environment. + +For AArch64 (64-bit) applications, use the :zephyr:code-sample:`synchronization` sample: + +.. zephyr-app-commands:: + :zephyr-app: samples/synchronization + :host-os: unix + :board: fvp_baser_aemv8r/fvp_aemv8r_aarch64 + :goals: build + +For AArch32 (32-bit) applications, use: + +.. zephyr-app-commands:: + :zephyr-app: samples/synchronization + :host-os: unix + :board: fvp_baser_aemv8r/fvp_aemv8r_aarch32 + :goals: build + +This will build an image with the synchronization sample app. +Then you can run it with ``west build -t run``. + +Debugging +========= + +Refer to the detailed overview about :ref:`application_debugging`. + +You may use the instructions below to debug with Arm Development Studio [5]_. + +Debugging with Arm DS +--------------------- + +Install Arm DS +^^^^^^^^^^^^^^ + +Please refer to the official Arm Development Studio Page [5]_ for details. Here +``Version: 2020.b Build: 2020110909`` is used in the following example. + +.. image:: images/version-info.jpg + :align: center + :alt: Arm DS Version + +Download Arm FVP BaseR AEMv8-R +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Please refer to official FVP page [1]_ for download instructions. Here ``$FVP_D`` +is used to indicate which directory is FVP located. + +Use DS perspective +^^^^^^^^^^^^^^^^^^ + +- From menu choose :menuselection:`Window --> Perspective --> Open Perspective --> Other...`: + +- In the opened window, choose :guilabel:`Development Studio (default)`: + + .. figure:: images/perspective-choose-ds.jpg + :align: center + :alt: Arm DS Perspective choose DS + + Select the Development Studio perspective + +Create a new configuration database +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +- Create a new configuration database by selecting + :menuselection:`File --> New --> Other... --> Configuration Database`: + + .. figure:: images/create-new-configuration-database.jpg + :align: center + :alt: Arm DS create new configuration database + + Create new configuration database + +- Choose a name for the database. Here :guilabel:`Zephyr` is used: + + .. figure:: images/create-new-configuration-database_database-name.jpg + :align: center + :alt: Arm DS create new configuration database: choose database name + + Choose a database name + +- Click :guilabel:`Finish` and the new configuration database can be seen in + :guilabel:`Project Explorer`: + + .. figure:: images/create-new-configuration-database_shown-in-project-explorer.jpg + :align: center + :alt: Arm DS create new configuration database: shown in project explorer + + New configuration database can be seen in Project Explorer + +Create a new model configuration +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +- Right click :guilabel:`Zephyr` in :guilabel:`Project Explorer`, choose + :menuselection:`New --> Model Configuration`: + + .. figure:: images/create-new-model-configuration.jpg + :align: center + :alt: Arm DS create new model configuration + + Create new model configuration + +- In the opened window: + + 1. Choose :guilabel:`Iris` for :guilabel:`Model Interface`, then :guilabel:`Next >`. + 2. Choose :guilabel:`Launch and connect to specific model`, then :guilabel:`Next >`. + 3. Set :guilabel:`Model Path` to ``$FVP_D/FVP_BaseR_AEMv8R``, then :guilabel:`Finish`. + + .. figure:: images/create-new-model-configuration_model-path.jpg + :align: center + :alt: Arm DS create new model configuration: set model path + + Set model path + +- Then in :guilabel:`FVP_BaseR_AEMv8R` tab, change :guilabel:`ARMAEMv8-R_` to + :guilabel:`V8R64-Generic`, click :guilabel:`Save` and then click :guilabel:`Import`: + + .. figure:: images/create-new-model-configuration_model-use-V8R64-Generic.jpg + :align: center + :alt: Arm DS create new model configuration: import + + Import model configuration + +Create a new launch configuration +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +- From :guilabel:`Project Explorer`, right click :guilabel:`FVP_BaseR_AEMv8R` and select + :menuselection:`Debug as --> Debug configurations...`: + + .. figure:: images/create-new-launch-configuration_context-menu.jpg + :align: center + :alt: Arm DS create new launch configuration: context menu + + Create new launch configuration: context menu + +- Select :guilabel:`Generic Arm C/C++ Application` and click :guilabel:`New launch configuration` + button. + + A new configuration named :guilabel:`New_configuration` will be created. + +1. In :guilabel:`Connection` tab: + + - In :guilabel:`Select target` box, select + :guilabel:`Imported -> FVP_BaseR_AEMv8R -> Bare Metal Debug -> ARMAEMv8-R_MP_0` + - In :guilabel:`Connections` box, set :guilabel:`Model parameters` to:: + + -C bp.dram.enable_atomic_ops=1 -C bp.sram.enable_atomic_ops=1 -C bp.refcounter.non_arch_start_at_default=1 -C gic_distributor.GICD_CTLR-DS-1-means-secure-only=1 -C gic_distributor.has-two-security-states=0 -C bp.vis.disable_visualisation=1 -C cluster0.has_aarch64=1 -a /home/fengqi/zephyrproject/build/zephyr/zephyr.elf + + These parameters are passed to :guilabel:`FVP_BaseR_AEMv8R` when launches. + Run :guilabel:`FVP_BaseR_AEMv8R --help` to see all command line options. + Run :guilabel:`FVP_BaseR_AEMv8R --list-params` to see all supported parameters. + The file ``zephyr.elf`` specified by ``-a`` is the binary built from Zephyr. + +.. figure:: images/create-new-launch-configuration_connection.jpg + :align: center + :alt: Arm DS create new launch configuration: connection + + Create new launch configuration: connection + +2. In :guilabel:`Files` tab: + + In the :guilabel:`Files` group, set :guilabel:`Load symbols from file` to full path of + :guilabel:`zephyr.elf` that you built. + +.. figure:: images/create-new-launch-configuration_files.jpg + :align: center + :alt: Arm DS create new launch configuration: files + + Create new launch configuration: files + +3. In :guilabel:`Debugger` tab: + + - In :guilabel:`Run control` box, check :guilabel:`Execute debugger commands` and insert:: + + add-symbol-file "/home/fengqi/zephyrproject/build/zephyr/zephyr.elf" EL1S:0 + + Replace :guilabel:`/home/fengqi/zephyrproject/build/zephyr/zephyr.elf` with your local path. + + - In :guilabel:`Paths` box, set :guilabel:`Source search directory` to the path to Zephyr source + code. + +.. figure:: images/create-new-launch-configuration_debugger.jpg + :align: center + :alt: Arm DS create new launch configuration: debugger + + Create new launch configuration: debugger + +After all these changes are made, click :guilabel:`Apply`, then click :guilabel:`Debug`. DS will +launch :guilabel:`FVP_BaseR_AEMv8R` and connect to it. You can see a new session is +connected in :guilabel:`Debug Control` window. + +.. figure:: images/DS-debug-working.jpg + :align: center + :alt: Arm DS working + + Arm DS is now working! + +References +********** + +.. target-notes:: + +.. [1] https://developer.arm.com/tools-and-software/simulation-models/fixed-virtual-platforms/arm-ecosystem-models +.. [2] Arm Architecture Reference Manual Supplement - Armv8, for Armv8-R AArch64 architecture profile + https://developer.arm.com/documentation/ddi0600/latest/ +.. [3] https://developer.arm.com/tools-and-software/simulation-models/fixed-virtual-platforms/docs +.. [4] https://developer.arm.com/documentation/100964/1114/Base-Platform/Base---memory/BaseR-Platform-memory-map +.. [5] https://developer.arm.com/tools-and-software/embedded/arm-development-studio diff --git a/doc/_scripts/redirects.py b/doc/_scripts/redirects.py index 427a7e38b2e2e..68100002e1802 100644 --- a/doc/_scripts/redirects.py +++ b/doc/_scripts/redirects.py @@ -16,6 +16,9 @@ # zephyr-keep-sorted-start ('application/index', 'develop/application/index'), ('boards/arduino/uno_r4_minima/doc/index', 'boards/arduino/uno_r4/doc/index'), + ('boards/arm/fvp_baser_aemv8r/doc/aarch32', 'boards/arm/fvp_baser_aemv8r/doc/index'), + ('boards/arm/fvp_baser_aemv8r/doc/aarch64', 'boards/arm/fvp_baser_aemv8r/doc/index'), + ('boards/arm/fvp_baser_aemv8r/doc/debug-with-arm-ds', 'boards/arm/fvp_baser_aemv8r/doc/index'), ('boards/nordic/nrf54l20pdk/doc/index', 'boards/nordic/nrf54lm20dk/doc/index'), ('boards/panasonic/panb511evb/doc/index', 'boards/panasonic/panb611evb/doc/index'), ('boards/phytec/mimx8mm_phyboard_polis/doc/index', 'boards/phytec/phyboard_polis/doc/index'), diff --git a/samples/net/dhcpv4_client/README.rst b/samples/net/dhcpv4_client/README.rst index 54e77cfd97d9e..05d9df3c95640 100644 --- a/samples/net/dhcpv4_client/README.rst +++ b/samples/net/dhcpv4_client/README.rst @@ -195,7 +195,7 @@ an ip address by typing: Arm FVP ======== -* :ref:`fvp_baser_aemv8r` +* :zephyr:board:`fvp_baser_aemv8r` * :ref:`fvp_base_revc_2xaemv8a` This sample application running on Arm FVP board can negotiate IP