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