Testing Hardware

This page described how to test hardware components of your device (for example if you're mainlining or there's a kernel or firmware change). Previously these topics were hidden across MR instructions and other Wiki pages, so collecting them here to simplify things.
== All-in-one test ==
Use hwtest to get an overview of the different sensors, input and output devices detected:
# Install 
# run hwtest
Example output from asus-grouper on mainline kernel:
$ hwtest
Category Model Path Status Value
framebuffer tegradrmfb /sys/class/graphics/fb0 working U:800x1280p-0
drm - /sys/class/drm/card0-LVDS-1 working 800x1280
magnetometer ami306 /sys/bus/iio/devices/iio:device2 working 0.39, -1.14, -1.64 gauss
accelerometer mpu6050 /sys/bus/iio/devices/iio:device0 working 0.18, 0.16, -10.11 g
gyroscope mpu6050 /sys/bus/iio/devices/iio:device0 working -0.05, -0.02, 0.01 rad/s
temperature mpu6050 /sys/bus/iio/devices/iio:device0 working 17.3 deg C
illuminance al3010 /sys/bus/iio/devices/iio:device1 working 0 lux
input gpio-keys /dev/input/event0 working 
input Elan Touchscreen /dev/input/event1 working 
input ASUS Google Nexus 7 ALC5642 Headphones Jack /dev/input/event2 working 
speaker default:CARD=ALC5642 working 
mic sysdefault:CARD=ALC5642 working 
speaker sysdefault:CARD=ALC5642 working 
mic default:CARD=ALC5642 working 
== Accelerometer ==
Accelerometers should show up as one of the entries in /sys/bus/iio/devices/. The in_*_raw files can be read from directly to see the raw sensor readings.
Since accelerometers are usually used for orienting the UI, you should also check that the device orientation is correct (see :File:PhoneRotation.png for terminology):
# Install 
# Restart the device
# Start the service: rc-service iio-sensor-proxy start
# Read orientation (see other command line options for raw values as well) using monitor-sensor
== Buttons ==
Use .
== Vibrator ==
# Find the vibrator device with evtest
# Install 
# Run e.g. fftest /dev/input/event2
Normally effects "#0 (Periodic sinusoidal)", "#4 (Strong rumble, with heavy motor)" and "#5 (Weak rumble, with light motor)" should be available. They may produce different vibration strengths, or may not.
Alternatively also fbcli -E phone-incoming-call should vibrate the device.
== SD card ==
Check if the SD card shows up via lsblk.
Check if dmesg outputs anything when inserting or removing the card.
== Random number generator ==
Adapted from Brian Masney's description.
# Install 
# Gather some random data: kcapi-rng -b 9000000 > OUTFILE
# Build verification tool: git clone https://github.com/Fourmilab/ent_random_sequence_tester && make -C ent_random_sequence_tester/src/
# Verify data is actually random: ./ent_random_sequence_tester/src/ent -c OUTFILE
It should say something like "Chi square distribution for 9000000 samples is 251.61, and randomly would exceed this value 54.83 percent of the times.". If it would say something like "and randomly would exceed this value less than 0.01 percent of the times." then something's quite wrong with the random number generator.
== Linux Kernel Crypto API ==
# Install 
# Run kcapi-speed --all
This seems to try all of the registered crypto ciphers, a part of the output may look like the following:
HMAC SHA-1 DRBG NOPR |d| 20 bytes| 16.12 MB/s|845280 ops/s
HMAC SHA-256 DRBG NOPR |d| 32 bytes| 24.44 MB/s|800352 ops/s
HMAC SHA-384 DRBG NOPR |d| 48 bytes| 11.26 MB/s|245754 ops/s
HMAC SHA-512 DRBG NOPR |d| 64 bytes| 15.1 MB/s|245930 ops/s
== Hardware video acceleration ==
See Hardware_video_acceleration#Testing.
Category:Hardware