[LTP] [PATCH v2 0/5] Another attempt at hardware discovery
Cyril Hrubis
chrubis@suse.cz
Wed Feb 24 17:50:40 CET 2021
This is a second attempt on hardware discovery LTP support. The main
difference between the previous attempts is that this version uses JSON,
which allows us propagate structured data to the test.
This is still an early protototype but I'm seding it out to get more
feedback before I continue to work on it.
So how is this supposed to work:
* Test that needs particular hardware sets the needs_hardware filed in
the test test structure. This is a free form string, in the uart
example it's called 'UART-loopback'. If we ever add a test for i2c
eeprom it would be probably called 'I2C-eeprom', etc.
* The test library takes this and passes it to the hardware discovery
script/binary. The example scipt that is included in this patchset
just hardcodes configuration for a usb-to-serial cable. In real world
lab this would be either prepared for each board specifically and
injected to the filesystem before the test happens, or may be a simple
script that calls curl with a request to a lab sever, etc.
* The output from the script is a JSON object. If there is a need to
reconfigure lab hardware before the test, the JSON contains a path to
a script/binary that has to be called to do so. Again this may be a
script that calls curl with a request to a lab sever which would, for
example, interconnect different serial ports with relays.
The parameter to that script is an unique ID for the hardware
configuration that is listed in each hardware configuration in the
hwconfs array of objects that follows.
I'm not sure if this actually belongs there, maybe it would be
cleaner to have one reconfigure script for the whole LTP and we would
pass the needs_hardware content as well as the unique ID, e.g.
'hardware-reconfigure.sh UART-loopback ttyUSB0-ttyS0'
but that is a minor detail that could be easily sorted out later.
The most important part of the JSON is the hwconfs array, which
consists of hardware description objects, which, apart form the uid,
are not interpreted by the library, but rather passed to the test. The
test library loops over the array and forks a testrun for each entry
in the array.
Each iteration of the test then gets it's parameters as a JSON object.
In the case of the UART one of the objects in the array looks like:
{
"uid": "ttyUSB0-ttyUSB0-01",
"rx": "ttyUSB0",
"tx": "ttyUSB0",
"hwflow": 0,
"baud_rates": [
9600,
19200
]
}
Which is mostly self-explanatory, the test then parses the structure
and executes one test per each baud rate.
What is still missing is the ability to pass the JSON hardware
description directly to the test, so that we can execute the test
manually, but that would be fairly easy to add.
Cyril Hrubis (5):
lib: tst_cmd: Make tst_cmd() usable for global paths
lib: Add minimalistic json parser
lib: Add hardware discovery code
Sample hardware discovery and reconfigure scripts
testcases: uart01: Add.
hardware-discovery.sh | 36 +
hardware-reconfigure.sh | 3 +
include/tst_hwconf.h | 13 +
include/tst_json.h | 177 +++++
include/tst_test.h | 3 +
lib/tst_cmd.c | 2 +-
lib/tst_hardware.c | 218 ++++++
lib/tst_hardware.h | 83 +++
lib/tst_json.c | 679 ++++++++++++++++++
lib/tst_test.c | 30 +
runtest/device_drivers | 2 +
testcases/kernel/device-drivers/Makefile | 1 +
.../kernel/device-drivers/uart/.gitignore | 1 +
testcases/kernel/device-drivers/uart/Makefile | 3 +
testcases/kernel/device-drivers/uart/uart01.c | 620 ++++++++++++++++
15 files changed, 1870 insertions(+), 1 deletion(-)
create mode 100755 hardware-discovery.sh
create mode 100755 hardware-reconfigure.sh
create mode 100644 include/tst_hwconf.h
create mode 100644 include/tst_json.h
create mode 100644 lib/tst_hardware.c
create mode 100644 lib/tst_hardware.h
create mode 100644 lib/tst_json.c
create mode 100644 runtest/device_drivers
create mode 100644 testcases/kernel/device-drivers/uart/.gitignore
create mode 100644 testcases/kernel/device-drivers/uart/Makefile
create mode 100644 testcases/kernel/device-drivers/uart/uart01.c
--
2.26.2
More information about the ltp
mailing list