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:
  http://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.


