This directory contains example configs to use ktest for various tasks.
The configs still need to be customized for your environment, but it
is broken up by task which makes it easier to understand how to set up
ktest.

The configs are based off of real working configs but have been modified
and commented to show more generic use cases that are more helpful for
developers.

crosstests.conf - this config shows an example of testing a git repo against
    lots of different architectures. It only does build tests, but makes
    it easy to compile test different archs. You can download the arch
    cross compilers from:
  https://kernel.org/pub/tools/crosstool/files/bin/x86_64/

test.conf - A generic example of a config. This is based on an actual config
     used to perform real testing.

kvm.conf - A example of a config that is used to test a virtual guest running
     on a host.

snowball.conf - An example config that was used to demo ktest.pl against
     a snowball ARM board.

include/  -  The include directory holds default configs that can be
    included into other configs. This is a real use example that shows how
    to reuse configs for various machines or set ups. The files here
    are included by other config files, where the other config files define
    options and variables that will make the included config work for the
    given environment.


