From: Eric Biggers <ebiggers3@gmail.com>
To: Theodore Ts'o <tytso@mit.edu>
Cc: fstests@vger.kernel.org, Eric Biggers <ebiggers@google.com>
Subject: [PATCH 2/2] android-xfstests: update documentation
Date: Tue, 25 Jul 2017 17:18:38 -0700 [thread overview]
Message-ID: <20170726001838.80452-2-ebiggers3@gmail.com> (raw)
In-Reply-To: <20170726001838.80452-1-ebiggers3@gmail.com>
From: Eric Biggers <ebiggers@google.com>
Update the list of known issues, document that specifying a kernel works
now, and make a few other small improvements.
Signed-off-by: Eric Biggers <ebiggers@google.com>
---
Documentation/android-xfstests.md | 142 +++++++++++++++++++++-----------------
1 file changed, 79 insertions(+), 63 deletions(-)
diff --git a/Documentation/android-xfstests.md b/Documentation/android-xfstests.md
index a93b35c..772356e 100644
--- a/Documentation/android-xfstests.md
+++ b/Documentation/android-xfstests.md
@@ -18,8 +18,8 @@ devices. If you encounter a problem, please submit a fix!
- The android-xfstests script installed:
run `make android-xfstests.sh` in the top-level directory of
- xfstests-bld, then move android-xfstests.sh to
- ~/bin/android-xfstests or another location on your $PATH.
+ xfstests-bld, then move `android-xfstests.sh` to
+ `~/bin/android-xfstests` or another location on your `$PATH`.
- A rooted Android device with sufficient internal storage. For most
test configurations, about 24 GiB of internal storage should be
@@ -33,24 +33,25 @@ devices. If you encounter a problem, please submit a fix!
- An armhf Debian root filesystem set up with xfstests and the
xfstests-bld scripts. Either fetch the prebuilt
- armhf_root_fs.tar.gz from
+ `armhf_root_fs.tar.gz` from
[kernel.org](http://www.kernel.org/pub/linux/kernel/people/tytso/kvm-xfstests),
or build one yourself on a Debian ARM build server as described in
[building-xfstests](building-xfstests.md). Then, either put the
chroot tarball in the default location of
- kvm-xfstests/test-appliance/armhf_root_fs.tar.gz, or specify it with
- ROOT_FS in your ~/.config/android-xfstests or the -I option to
- android-xfstests.
+ `kvm-xfstests/test-appliance/armhf_root_fs.tar.gz`, or specify it
+ with `ROOT_FS` in your `~/.config/android-xfstests` or the `-I`
+ option to android-xfstests.
## Procedure
### (Optional) Build a custom kernel
-You may be able to run xfstests with the kernel already installed on
-your device, but you may wish to build your own kernel instead. The
-exact procedure for building the kernel is device-dependent, but here
-are example commands for building a kernel using the public source
-code for the Google Pixel phone (2016 edition), code name "marlin":
+You should be able to run xfstests with the kernel already installed
+on your device, but you may wish to build your own kernel instead.
+The exact procedure for building the kernel is device-dependent, but
+here are example commands for building a kernel using the public
+source code for the Google Pixel phone (2016 edition), code name
+"marlin":
git clone https://android.googlesource.com/kernel/msm msm-linux
cd msm-linux
@@ -60,36 +61,43 @@ code for the Google Pixel phone (2016 edition), code name "marlin":
make marlin_defconfig
make -j$(grep -c processor /proc/cpuinfo)
-This will produce a kernel image arch/arm64/boot/Image.gz-dtb.
+This will produce a kernel image `arch/arm64/boot/Image.gz-dtb`.
Also consider the following config options:
- CONFIG_SYSV_IPC=y
- Makes some tests using dm-setup stop failing.
+* `CONFIG_SYSV_IPC=y`: Makes several tests stop failing / being
+ skipped (see [Known issues](#known-issues))
- CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=n
- Include crypto self-tests. This may be useful if you are
- using xfstests to test file-based encryption.
+* `CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=n`: Include crypto self-tests.
+ This may be useful if you are using xfstests to test file-based
+ encryption.
### (Optional) Boot into your custom kernel
-To boot into your new kernel, you'll first need to reboot your device
-into fastboot mode by running 'adb reboot-bootloader' or by holding a
-device-dependent key combination (e.g. Power + Vol-Down on the Pixel).
-Then do *one* of the following:
-
-- Run 'fastboot boot arch/arm64/boot/Image.gz-dtb' to boot the kernel
- directly. Careful: this is good for one boot only (it's not
- persistent), and it doesn't work on all devices.
-
-- Build and flash a boot.img to your device's boot partition. This is
- device-dependent, but for "marlin" devices one would copy
- arch/arm64/boot/Image.gz-dtb into device/google/marlin-kernel/ in
- the Android source tree, then run the following commands from the
- root of the Android source tree:
+By default, android-xfstests uses the kernel running on the device.
+However, it also supports booting a kernel automatically. To do this,
+specify `KERNEL` in your `~/.config/android-xfstests` or use the
+`--kernel` command line option. If a kernel is specified,
+android-xfstests will boot it on the device using `fastboot boot`. As
+an optimization, this is skipped if the kernel is already running on
+the device (as detected by checking `uname -r -v`; this usually
+identifies the commit and build timestamp).
+
+Note that `fastboot boot` just boots the kernel once; it doesn't
+install it persistently. Also, on some devices it doesn't bring up
+the full functionality or even doesn't work at all, since it doesn't
+install kernel modules or device-tree overlays. If it doesn't work,
+you'll need to install and boot the kernel yourself instead. See your
+device's documentation for details, but you'll at least need to build
+the kernel into a boot.img and flash it to the "boot" partition. On
+some devices additional partitions must be flashed as well, e.g.
+vendor and vbmeta. As an example, for "marlin" devices running
+Android N, one must copy `arch/arm64/boot/Image.gz-dtb` into
+`device/google/marlin-kernel/` in the Android source tree, then run
+the following commands from the root of the Android source tree:
. build/envsetup.sh
- lunch marlin-userdebug
+ lunch marlin-eng
make -j16 bootimage
fastboot flash boot out/target/product/marlin/boot.img
fastboot continue
@@ -112,41 +120,49 @@ by rebooting into fastboot mode and reformatting the userdata
filesystem. Since this causes all user data to be wiped,
android-xfstests will ask for confirmation before doing this.
-## Known issues
-
-android-xfstests doesn't yet do kernel installation; you have to do
-that yourself.
+Note that Android devices usually run an older version of the Linux
+kernel. At the same time, xfstests is constantly being updated to add
+new tests. Therefore, it's often the case that some of the more
+recently added tests will fail. Some tests may even cause a kernel
+crash or deadlock and will need to be excluded with `-X` in order for
+the test run to complete, as a temporary workaround until you can
+backport the needed bug fixes. It's recommended to keep your device's
+kernel up-to-date with the corresponding LTS kernel to help minimize
+the number of test failures that need to be triaged. (Of course,
+there are obviously many other benefits of doing that as well...)
+
+## Monitoring and debugging
+
+To get a shell in the chroot, use `android-xfstests shell`. You can
+do this at any time, regardless of whether tests are currently
+running. Note that this is a real shell on the device, and it doesn't
+use a snapshot of the root filesystem like `kvm-xfstests shell` does.
+Thus, any changes you make in the shell session are persistent.
-Terminating android-xfstests with Ctrl-C doesn't stop the test process
-on the device.
-
-'android-xfstests shell' gives you a shell in the chroot, but it's not
-a snapshot like it is for kvm-xfstests; that is, any changes you make
-in the shell session are persistent.
-
-Android devices usually run an older version of the Linux kernel. At
-the same time, xfstests is constantly being updated to add new tests.
-Therefore, you can expect there to be a significant number of failing
-tests due to bugs. Some tests may even cause a kernel crash or
-deadlock and will need to be excluded with -X in order for the test
-run to complete. Note, however, that bugs reproduced by xfstests are
-not necessarily reachable by unprivileged users (though they can be!).
+## Known issues
-Tests which create loopback or device-mapper devices currently fail
-because the corresponding device nodes do not get automatically
-created on Android.
+If using the armhf (32-bit) tarball on an aarch64 kernel, the
+encryption tests may fail due to a kernel bug that caused the keyctl
+system call to be unavailable to 32-bit programs. This can be fixed
+by cherry-picking commit 5c2a625937ba ("arm64: support keyctl() system
+call in 32-bit mode") into your kernel from Linux v4.11.
-Any test that requires non-root users currently fails because xfstests
-incorrectly thinks that YP/NIS is enabled.
+Tests that create device-mapper devices (e.g. generic/250,
+generic/252, generic/338) fail because the Android equivalent of udev
+does not create the dm device nodes in the location expected by
+xfstests (`/dev/mapper/`).
-On recent versions of Android, all new files inherit SELinux xattrs.
-This confuses generic/062 and generic/377 and causes them to fail.
+Android kernels are sometimes configured without SysV IPC support ---
+i.e., `CONFIG_SYSVIPC` isn't set. This can cause several problems:
-generic/240 and tests using dmsetup fail on kernels configured without
-SysV IPC support, which includes most Android kernels.
+- Tests that use the `dbench` program (generic/241) fail.
+- Tests that use the `dmsetup` program fail (if they didn't already
+ fail because of the device node issue noted above)
+- Tests that use the `fio` program (e.g. ext4/301, ext4/302, ext4/303,
+ generic/095, generic/299, generic/300) are skipped.
-generic/004 fails because of glibc bug
-https://sourceware.org/bugzilla/show_bug.cgi?id=17912.
+generic/004 should work, but in fact it's skipped because of a [glibc
+bug](https://sourceware.org/bugzilla/show_bug.cgi?id=17912).
## Resetting userdata
@@ -155,8 +171,8 @@ not show up in the device's on-disk partition table or fstab, and they
will go away after reboot. However, the reformatting of the userdata
filesystem with a smaller size to free up space is persistent. If you
are done running xfstests and wish to expand userdata to take up its
-full partition again, then reboot into fastboot mode and run 'fastboot
--w' to wipe and reformat userdata again, this time with the full size.
+full partition again, then reboot into fastboot mode and run `fastboot
+-w` to wipe and reformat userdata again, this time with the full size.
## Other notes
--
2.14.0.rc0.400.g1c36432dff-goog
next prev parent reply other threads:[~2017-07-26 0:19 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-07-26 0:18 [PATCH 1/2] android-xfstests: support specifying a kernel to boot Eric Biggers
2017-07-26 0:18 ` Eric Biggers [this message]
2017-08-16 3:53 ` [PATCH 2/2] android-xfstests: update documentation Eric Biggers
2017-08-16 15:43 ` Theodore Ts'o
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170726001838.80452-2-ebiggers3@gmail.com \
--to=ebiggers3@gmail.com \
--cc=ebiggers@google.com \
--cc=fstests@vger.kernel.org \
--cc=tytso@mit.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.