blob: a8493b10edd5b7ce18b0484857a1006c56607707 [file] [log] [blame]
.. _Intel_Adsp_Generic_Running_Guide:
Intel Adsp Generic Running Guide
################################
This documentation describes how to run the intel_adsp_cavs boards. Including:
- intel_adsp_cavs15
- intel_adsp_cavs18
- intel_adsp_cavs20
- intel_adsp_cavs25
Set up the environment
**********************
1. Copy following two tools to the $HOME directory of the target machine (DUT):
- soc/xtensa/intel_adsp/tools/cavstool.py
(The firmware loader)
- soc/xtensa/intel_adsp/tools/remote-fw-service.py
(The remote service provider)
You can use scp command to copy them to DUT, Ex.
.. code-block:: console
$scp boards/xtensa/intel_adsp/tools/cavstool.py user@myboard:~
$scp boards/xtensa/intel_adsp/tools/remote-fw-service.py user@myboard:~
2. In your build machine, install the rimage tool, the signed key and
the toml config file. Please refer to please refer:
https://github.com/thesofproject/rimage.
How Remote Service works
************************
The CAVS remote service runs on the target board and interacts with
west. Two services working on the server:
- Run Sevice
Run Service (or Request Service) works as a flasher. It will receive and
download the firmware to the intel_adsp_cavs boards then starts the Zephyr
Application. It starts at port 10000 by default.
- Log Service
Log Service redirect the remote target board's /dev/tty console. It will
output Zephyr's log message to user via network. It starts at port 9999
by default.
The --remote-host parameter specify the network address which Run Service
provided, and the --pty parameter specifies the network address of log
output service.
Build and run the tests
***********************
1. In the remote target machine, starting the service by:
.. code-block:: console
sudo ./remote-fw-service.py
2. Build the application. Take hello world as an example:
.. code-block:: console
west build -b intel_adsp_cavs15 samples/hello_world
3. Run the test by:
.. code-block:: console
west flash --remote-host {host}:{port} \
--pty {host}:{port}
Ex.
.. code-block:: console
west flash --remote-host 192.168.0.1 --pty
# with specifying the port
west flash --remote-host 192.168.0.1:12345 \
--pty 192.168.0.1:54321
Now you can see the outout log in your terminal.
If you don't want to use the default location of rimage tools, you can
also specify the rimage tool, config and key by:
.. code-block:: console
west flash --remote-host {host}:{port} \
--pty {host}:{port} \
--rimage-tool [path to the rimage tool] \
--config-dir [path to dir of .toml config file] \
--key [path to signing key]
The cavstool server will listen to the available network interfaces on
port 9999 and 10000 by default. In some case you might need to specify
it only listen on a dedicate IP address, or change the default ports
using, you can do it with following parameters:
.. code-block:: console
# with specifying the port
sudo ./remote-fw-service.py --log-port 54321 --req-port 12345
# can be simplified with
sudo ./remote-fw-service -p 54321 -r 12345
# with specifying a IP address
sudo ./remote-fw-service -s 192.168.0.2
# with specifying the IP address with a log port
sudo ./remote-fw-service -s 192.168.0.2:54321
# with specifying the IP, log and request port
sudo ./remote-fw-service -s 192.168.0.2:54321 -r 12345
# Also works in this way
sudo ./remote-fw-service -s 192.168.0.2 -p 54321 -r 12345
Run by twister
**************
For running by twister, the --remote-host parameter needs to be added into
the content of the --west-flash parameter. Assume the IP address of your CAVS
boarad is 192.168.1.2, the port of the Request Service is 12345, the port of
the Log Service is 54321, this is an example of the twister command:
.. code-block:: console
twister -p intel_adsp_cavs25 --device-testing \
--device-serial-pty="$ZEPHYR_BASE/soc/xtensa/intel_adsp/tools/cavstool_client.py,-s,192.168.1.2:54321,-l" \
--west-flash="--remote-host=192.168.1.4:12345"
Like we run tests by west, if you don't want to use the default location of
SOF tools, you can also specify the rimage tool, config and key by:
.. code-block:: console
twister -p intel_adsp_cavs15 --device-testing \
--device-serial-pty="$ZEPHYR_BASE/soc/xtensa/intel_adsp/tools/cavstool_client.py,-s,192.168.1.2:54321,-l" \
--west-flash="--remote-host=192.168.1.2:12345,\
--rimage-tool=$HOME/sof/rimage/rimage,\
--config-dir=$HOME/sof/rimage/config/,\
--key=$HOME/sof/keys/otc_private_key.pem" \
-T tests/kernel/semaphore/semaphore/ -vv
Note that there should be no space between the arguments in --west-flash,
it use comma to separate the parameters.
Run one or multiple boards
**************************
In the above example, there are many parameters need to be keying in when
running by twister. You can reduce it is by writing a hardware map file.
Ruuning twister with the hardware map file also support you running tests
on single/multiple ADSP boards parallelly.
Let see how to use a hardware map file by twister to run a single board,
this is the content of the hardware map file cavs.map:
.. code-block:: console
- connected: true
id: None
platform: intel_adsp_cavs25
product: None
runner: intel_adsp
serial_pty: "/home/user/zephyrproject/zephyr/soc/xtensa/intel_adsp/tools/cavstool_client.py,-s,192.168.1.4,-l"
runner_params:
- --remote-host=192.168.1.4
If you need to specify the port using, you can write the hardware map file
like following example. Assume you have a log port of 54321 and a req port
12345:
.. code-block:: console
- connected: true
id: None
platform: intel_adsp_cavs25
product: None
runner: intel_adsp
serial_pty: "/home/user/zephyrproject/zephyr/soc/xtensa/intel_adsp/tools/cavstool_client.py,-s,192.168.1.4,--log-port,54321,-l"
runner_params:
- --remote-host=192.168.1.4
- --tool-opt=--req-port
- --tool-opt=12345
And another simplified form of the port specifying is to use {host}:{port}
for the --remote-host of the runner params and -s of the serial-pty, Ex.
.. code-block:: console
- connected: true
id: None
platform: intel_adsp_cavs25
product: None
runner: intel_adsp
serial_pty: "/home/user/zephyrproject/zephyr/soc/xtensa/intel_adsp/tools/cavstool_client.py,-s,192.168.1.4:54321,-l"
runner_params:
- --remote-host=192.168.1.4:12345
Then you can run twister with fewer parameters:
.. code-block:: console
twister --hardware-map ./cavs.map --device-testing -T samples/hello_world -vv
And below example of the hardware map file shows you how to run tests in
mulitple boards:
.. code-block:: console
- connected: true
id: None
platform: intel_adsp_cavs15
product: None
runner: intel_adsp
serial_pty: "/home/user/zephyrproject/zephyr/soc/xtensa/intel_adsp/tools/cavstool_client.py,-s,192.168.1.2,-l"
runner_params:
- --remote-host=192.168.1.2
- connected: true
id: None
platform: intel_adsp_cavs18
product: None
runner: intel_adsp
serial_pty: "/home/user/zephyrproject/zephyr/soc/xtensa/intel_adsp/tools/cavstool_client.py,-s,192.168.1.3,-l"
runner_params:
- --remote-host=192.168.1.3
- connected: true
id: None
platform: intel_adsp_cavs25
product: None
runner: intel_adsp
serial_pty: "/home/user/zephyrproject/zephyr/soc/xtensa/intel_adsp/tools/cavstool_client.py,-s,192.168.1.4,-l"
runner_params:
- --remote-host=192.168.1.4
If you don't want to run certain platform in this file, just make
the "connected" field from "true" to "false", it will be skip.
Again, if you don't use the default location of the SOF tools, you
can remove the --rimage-tool, --config-dir and --key in the extra_params
field. For example:
.. code-block:: console
- connected: true
id: None
platform: intel_adsp_cavs25
product: None
runner: intel_adsp
serial_pty: "/home/user/zephyrproject/zephyr/soc/xtensa/intel_adsp/tools/cavstool_client.py,-s,192.168.1.4,-l"
runner_params:
- --remote-host=192.168.1.4
- --rimage-tool=/home/user/sof/rimage/rimage
- --config-dir=/home/user/sof/rimage/config/
- --key=/home/user/sof/keys/otc_private_key_3k.pem
To run multiple boards does also work when specifying the ports.
Passing extra parameter to tools
********************************
wwe can pass parameters to run/require service by the --tool-opt
option. This is for possible extending in the future. For example:
.. code-block:: console
west flash --remote-host=192.168.0.1 --pty=192.168.0.1 \
--tool-opt=--arg='white space' --tool-opt=-r --tool-opt=12345
That means our optional parameters will be parsed as:
.. code-block:: console
['--arg=white space', '-r', '12345']
Then cavs request service tool can get them.