1FWTS(1) General Commands Manual FWTS(1)
2
3
4
6 fwts - a firmware test suite to identify firmware bugs.
7
8
10 fwts [options] [test(s)]
11
12
14 This manual page documents briefly the fwts firmware test suite. The
15 tool fwts is comprised of over fifty tests that are designed to examine
16 and test different aspects of PC firmware. Many of these tests need
17 super user access to extract tables and interact with the firmware and
18 ACPI, so running fwts using sudo is required.
19 Running fwts with no options will run through all the batch tests that
20 require no user interaction. However, one can select just specific
21 tests to run if required.
22
23 By default fwts outputs the test results into the log file results.log
24 however a different log file name can be specified and if required,
25 output to stderr or stdout can be selected.
26
27 Note that there a variety of tests, including tests that can poten‐
28 tially hang a machine (such as a suspend/hibernate/resume).
29
30
32 fwts options are as follow:
33
34 - output results to stdout.
35
36 --acpica
37 enable ACPICA execution mode options. These can be specified as
38 a comma separated list of one or more options. Avaiable options
39 are: serialized (serialized execution of AML), slack (run in
40 less pedeantic mode), ignore-errors (ignore ACPICA exception
41 errors), disable-auto-repair (disable ACPICA from automatically
42 fixing broken ACPICA controls). Note that the slack mode will
43 turn on implicit returns of zero on control methods to attempt
44 to allow buggy AML to work on non-Windows systems.
45
46 --acpica-debug
47 enable ACPICA debug warning and error messages when invoking the
48 ACPICA subsystem. This is mainly for fwts developers to help
49 track down any ACPICA interfacing issues with fwts.
50
51 --acpicompliance
52 run only those tests that specifically check for compliance with
53 the ACPI specifications. This may be a subset of the ACPI
54 tests.
55
56 --acpitests
57 run all general ACPI tests.
58
59 -a, --all
60 run all the tests.
61
62 --arch=name
63 specify the target architecture whose firmware is being tested.
64 This allows fwts to run on one architecture (the host) but per‐
65 form tests for a different architecture (the target). Known
66 architecture strings are: x86, x86_32, or x86_64 for Intel; ia64
67 for Itanium; arm64 or aarch64 for ARMv8. Unless this option is
68 specified, the target is assumed to be the same as the host.
69
70 -b, --batch
71 run the non-interactive batch tests. Batch tests require no user
72 interaction.
73
74 --batch-experimental
75 run only batch experimental tests.
76
77 --clog specify a coreboot logfile dump.
78
79 --disassemble-aml
80 disassemble AML (ACPI machine language) byte code. This attempts
81 to disassemble AML in DSDT and SSDT tables and generates
82 DSDT.dsl and SSDTx.dsl sources.
83
84 -d, --dump
85 extracts firmware data and dumps it into log files. This gener‐
86 ates:
87 acpidump.log - containing a hex dump of the ACPI tables (which
88 can be read using acpixtract).
89 dmesg.log - containing the current kernel log messages.
90 dmidecode.log - containing the output from dmidecode.
91 lspci.log - containing the output from lspci -vv -nn
92 cpuinfo.log - containing the output from cat /proc/cpuinfo
93 README.txt - containing a timestamp and kernel version informa‐
94 tion.
95
96 --dump-acpi-from-sysfs
97 specify dumping acpi table log default from sysfs.
98
99 --dumpfile=acpidump.log
100 load ACPI tables from output generated from acpidump or from
101 sudo fwts --dump. The latter is preferred as fwts --dump is
102 able to dump more tables than acpidump. This allows one to dump
103 tables from one machine and processes them with fwts on another
104 machine.
105
106 --ebbr run ARM EBBR tests.
107
108 --uefi-get-var-multiple
109 specifies the number of times to get a variable in the uefirt‐
110 variable get variable stress test.
111
112 --uefi-set-var-multiple
113 specifies the number of times to set a variable in the uefirt‐
114 variable set variable stress test.
115
116 --uefi-query-var-multiple
117 specifies the number of times to query a variable in the uefirt‐
118 variable query variable stress test.
119
120 --uefitests
121 run all general UEFI tests.
122
123 --filter-error-discard
124 specifies the errors that one wants to silently ignore. One
125 supplies a comma sperated list of fwts error message labels that
126 one wants fwts to not report as errors. fwts will run the test
127 but if there is a test failure and the label matches the one
128 supplied in this list fwts will then just ignore this error.
129 This cannot be used with --filter-error-keep.
130
131 --filter-error-keep
132 specifies the errors that one wants to keep, all other errors
133 are silently ignored. One supplies a comma sperated list of
134 fwts error message labels that one wants fwts report as errors,
135 other test failures will be not reported and silently ignored.
136 This cannot be used with --filter-error-discard.
137
138 -f, --force-clean
139 creates a new results log file, rather than just appending to
140 any existing one (default).
141
142 -h, --help
143 outputs the internal help page.
144
145 -i, --interactive
146 run the interactive tests. These tests require user interaction.
147
148 --ifv run tests in firmware-vendor modes.
149
150 --interactive-experimental
151 run only interactive experimental tests.
152
153 -j, --json-data-path
154 specifies the path to the fwts json data files. These files con‐
155 tain json formatted configuration tables, for example klog scan‐
156 ning patterns.
157
158 -k, --klog=file
159 read the kernel log from the specified file rather than from the
160 kernel log ring buffer. This allows one to run the kernel log
161 scanning tests such as klog against pre-gathered log data.
162
163 --log-fields
164 show the available log filtering fields. Specifying these fields
165 with --log-filter to select which fields one wants to log.
166
167 --log-filter
168 specify which particular types of log data to be output into the
169 log file. Each line of log data is tagged with a special marker
170 depending on what type of log information is being output. The
171 available types can be see by using --log-fields. Specify the
172 desired log types with comma separated list. To disable a field,
173 prefix the name with ~, for example:
174 --log-filter=RES,SUM logs just the results and summary lines.
175 --log-filter=ALL,~INF logs all lines except for the information
176 lines.
177
178 --log-format
179 specify the information in each log line. The following speci‐
180 fiers are available:
181 %date - date
182 %time - time
183 %field - log-filter fields
184 %owner - name of the test routine
185 %level - test failure level
186 %line - log line
187 e.g. --log-format="%date %time [%field] (%owner): "
188
189 --log-level [critical|high|medium|low|info|all]
190 specify the test failure level to log. Test failure levels equal
191 to and higher than the specified are logged and recorded as
192 failures. The default is 'all' (which is identical to 'info').
193 For example, a log level of 'medium' will just log test failures
194 of level 'medium', 'high' and 'critical', where as a log level
195 of 'critical' will just log 'critical' level failures.
196
197 --log-type
198 specify the log type. Currently plaintext, json and xml log
199 types are available and the default is plaintext.
200
201 --lspci=path
202 specify the full path and filename to the the lspci binary.
203
204 -P, --power-states
205 run S3 and S4 power state tests (s3, s4 tests)
206
207 --results-no-separators
208 no pretty printing of horizontal separators in the results log
209 file.
210
211 -r, --results-output=filename
212 specify the results output log file. One can also specify std‐
213 out and stderr to redirect to these output streams.
214
215 -R, --rsdp=physaddr
216 specify the physical address of ACPI RSDP. This is useful on
217 some systems where it cannot be automatically detected.
218
219 --pm-method=method
220 specify the power method to use to enter S3 or S4 (or autodetec‐
221 tion will be used). The following specifiers are available:
222 logind - the default method, where available (requires dbus
223 and logind).
224 pm-utils - the previous default method, now deprecated.
225 sysfs - the fallback, used when logind is not available.
226 e.g. --pm-method=sysfs
227
228 --s3-delay-delta=N
229 time to be added onto delay between each S3 iteration.
230
231 --s3-device-check
232 check differences between device configurations over a S3 cycle.
233 Note this adds 15 seconds delay after each s3 resume to allow
234 wifi to re-associate.
235
236 --s3-device-check-delay
237 specify the time to wait while devices re-configure (e.g. wifi
238 to re-associate, ethernet to connect..) before a device config‐
239 uration check is run. The default is 15 seconds. If this option
240 is used the device checking is assumed so one does not also need
241 to use the --s3-device-check flag.
242
243 --s3-hybrid
244 enables fwts to run Hybrid Sleep.
245
246 --s3-min-delay=N
247 minimum time between S3 iterations.
248
249 --s3-max-delay=N
250 maximum time between S3 iterations.
251
252 --s3-multiple=N
253 specified the number of multiple S3 suspend/resume tests to run.
254 The default is 2 tests.
255
256 --s3-resume-hook=hookscript
257 specifies a script or program to run after each S3 resume. The
258 hookscript must return 0 to indicate success, or non-zero to
259 indicate failure. Failures will abort subsequent S3 test itera‐
260 tions.
261
262 --s3-quirks=--quirk[,--quirk]
263 specify a comma separated list of quirk arguments to pass to pm-
264 suspend, for example:
265 --s3-quirks=--quirk-s3-bios,--quirk-save-pci
266
267 --s3-sleep-delay=N
268 sleep N seconds from the start of the suspend to the wakeup
269 time. Note that this time MUST be longer than the time it takes
270 to suspend the machine otherwise the wakeup timer will fire dur‐
271 ing the suspend state. The default is 30 seconds.
272
273 --s3-suspend-time=N
274 specify the maximum allowed suspend time in seconds. If suspend
275 takes longer than this then an error is logged.
276
277 --s3-resume-time=N
278 specify the maximum allowed resume time in seconds. If resume
279 takes longer than this then an error is logged.
280
281 --s3power-sleep-delay=N
282 specify the suspend duration in seconds. The higher the value
283 the more accurate the s3power test result. Durations less than
284 10 minutes are not recommended.
285
286 --s4-delay-delta=N
287 time to be added onto delay between each S4 iteration.
288
289 --s4-device-check
290 check differences between device configurations over a S4 cycle.
291 Note this adds 15 seconds delay after each s3 resume to allow
292 wifi to re-associate.
293
294 --s4-device-check-delay
295 specify the time to wait while devices re-configure (e.g. wifi
296 to re-associate, ethernet to connect..) before a device config‐
297 uration check is run. The default is 15 seconds. If this option
298 is used the device checking is assumed so one does not also need
299 to use the --s4-device-check flag.
300
301 --s4-min-delay=N
302 minimum time between S4 iterations.
303
304 --s4-max-delay=N
305 maximum time between S4 iterations.
306
307 --s4-multiple=N
308 specified the number of multiple S4 hibernate/resume tests to
309 run. The default is 2 tests.
310
311 --s4-quirks=--quirk[,--quirk]
312 specify a comma separated list of quirk arguments to pass to pm-
313 hibernate, for example: --s4-quirks=--quirk-save-pci
314
315 --s4-sleep-delay=N
316 sleep N seconds from the start of the hibernate to the wakeup
317 time. Note that this time MUST be longer than the time it takes
318 to hibernate the machine otherwise the wakeup timer will fire
319 during the hibernate state. The default is currently 90 seconds.
320
321 --sbbr run ARM SBBR tests
322
323 -p, --show-progress
324 show the progress of the tests being run. Each test will identi‐
325 fied as it is being run. For long tests, a percentage of comple‐
326 tion time will be displayed. As of fwts 0.19.06 this is enabled
327 by default and can be disabled with --quiet (or -q).
328
329 -q, --quiet
330 run quietly with no output to stdout.
331
332 -D, --show-progress-dialog
333 output the progress of tests being run in a form that can be
334 piped into the dialog tool with the --gauge option.
335
336 -s, --show-tests
337 show the names of available tests. By default will show all
338 tests. Use the --batch, --interactive, --batch-experimental,
339 --interactive-experimental, --utils options to show these spe‐
340 cific tests.
341
342 --show-tests-full
343 show all the available tests listed by minor test description.
344 By default will show all tests. Use the --batch, --interactive,
345 --batch-experimental, --interactive-experimental options to show
346 these specific tests.
347
348 --show-tests-categories
349 show all the available tests and the categories they belong to.
350
351 --skip-test=test[,test..]
352 specify tests to skip over and not run. List must be comma sepa‐
353 rated.
354
355 --stdout-summary
356 output SUCCESS or FAILED to stdout at end of tests.
357
358 -t, --table-path=path
359 specify the path containing ACPI tables. These tables need to be
360 named in the format: tablename.dat, for example DSDT.dat, for
361 example, as extracted using acpidump or fwts --dump and then
362 acpixtract.
363
364 -u, --utils
365 run utilities. Designed to dump system information, such as
366 annotated ACPI tables, CMOS memory, Int 15 E820 memory map,
367 firmware ROM data.
368
369 -v, --version
370 output version number and build date of the fwts tool.
371
372 -w, --width=N
373 specify the width in characters of the output logfile. The
374 default is 130.
375
376
378 Run all the batch tests and append the results into the default log
379 results.log:
380 sudo fwts
381
382 Run all the interactive tests and start a clean results log called
383 interactive.log:
384 sudo fwts -i -f -r interactive.log
385
386 Run all the tests, interactive and batch:
387 sudo fwts -i -b
388
389 Run just the battery and cpufreq tests:
390 sudo fwts battery cpufreq
391
392 Run all the batch tests and define a new log format using just the date
393 and line number:
394 sudo fwts --log-format="%date %line: "
395
396 Run all the interative tests and log just the results, info and summary
397 data:
398 sudo fwts -i --log-filter=RES,INF,SUM
399
400 Dump all the interesting firmware information into log files for analy‐
401 sis later:
402 sudo fwts --dump
403
404 View kernel and ACPI driver version and BIOS information:
405 sudo fwts -w 80 -r stdout version bios_info --log-filter=INF
406 --log-format=""
407
408 Show the batch and batch experimental tests:
409 fwts --show-tests --batch --batch-experimental
410
411 Run multiple S3 tests with delay between each test ranging from 1 sec‐
412 ond to 10 seconds with a delay delta per test of 0.2 seconds
413 sudo fwts s3 --s3-multiple=100 --s3-min-delay=1
414 --s3-max-delay=10 --s3-delay-delta=0.2
415
416
418 iasl(1), acpixtract(1), acpidump(1), dtc(1), dmidecode(8), lspci(8)
419
421 fwts was originally written by Colin King with much of the original
422 test code derived from the Intel Linux Firmware test kit. Many thanks
423 also for contributions from (in alpabetical order): AceLan Kao, Al
424 Stone, Alberto Milone, Alex Hung, Anthony Wong, Björn Esser, Chris
425 Goldsworthy, Chris Van Hoof, David Ward, Deb McLemore, Erico Nunes, Fan
426 Wu, Fu Wei, Heyi Guo, Ivan Hu, Jeffrey Hugo, Jeremy Kerr, Jiri Vohanka,
427 Kamal Mostafa, Keng-Yu Lin, Mahesh Bireddy, Matt Flemimg, Naresh Bhat,
428 Paul Menzel, Phidias Chiang, Pradeep Gaddam, Prarit Bhargava, Rajat
429 Goyal, Ricardo Neri, Robert Hooker, Rudolf Marek, Sakar Arora, Seth
430 Forshee, Yang Kun, Yi Li and Zhang Rui.
431
432 This manual page was written by Colin King for the Ubuntu project (but
433 may be used by others).
434
435 This is free software; see the source for copying conditions. There is
436 NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
437 PURPOSE.
438
439
440
441 24 August, 2017 FWTS(1)