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.
Many of the commands suggested here require sudo , so switching to the root user can simplify testing if you're doing a lot of it (sudo su ) |
All-in-one test
Use hwtest
to get an overview of the different sensors, input and output devices detected:
- Install hwtestPMOS
- 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 iio-sensor-proxy
- 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 evtest.
Vibrator
- Find the vibrator device with
evtest
- Install linuxconsoletools
- 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 libkcapi-tools
- 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 libkcapi-tools
- 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