LTSI kernel tree
================

Table Of Contents
=================

	Introduction
	Building the Tree
	Patch Headers



Introduction
============

This is the LTSI kernel tree.  It is developed as a set of patches, that
apply to the specified kernel version.  The tree can be used directly as
a quilt tree for development, or it can be exported as a git tree, a
single compressed patch, or as an RPM source package that will
successfully build in an OBS instance.

For questions about the LTSI project, and how it operates, please see
the documentation at http://ltsi.linuxfoundation.org/what-is-ltsi

For discussions about these patches, or anything else related to the
LTSI project, please contact the partipitants at the ltsi-dev mailing
list.  Instructions on how to post to it can be found at:
	https://lists.linuxfoundation.org/mailman/listinfo/ltsi-dev


Building the Tree
=================

The tree is maintained as a quilt tree of patches, all of which are
applied in a sequence described in the file, 'series', to a specific
kernel tree.

The current version of the kernel tree that the sequence is to be
applied to can be found in the file KERNEL_VERSION.

The tree can be exported in a variety of different formats, to help you
integrate it into your build system.  The currently supported formats
are:
	- quilt tree
	- git tree
	- single compressed patch
	- OBS source repo

Quilt Tree
----------

The tree is already in a quilt tree format, and can be developed in this
manner.  It is recommended that you create a kernel tree based on the
version described in the file KERNEL_VERSION and then change your
QUILT_PATCHES environment variable to point to the location of this
tree.  quilt will see the series file, and you can easily push and pop
the various patches directly.


Git Tree
--------

The tree can be exported as a git tree, based on the kernel.org upstream
release described in the file KERNEL_VERSION.  To do this run the
scripts/generate_git script.  For more details on the environment
variables this script expects and how it works, please see the built in
help in the script by running:
	scripts/generate_git --help


Single Compressed Patch
-----------------------

The tree can be exported as a compressed single patch, based on the
kernel.org release described in the KERNEL_VERSION file.  To do this,
run the scripts/generate_patch script.  For more details on the
environment variables this script expects and how it works, please see
the built in help in the script by running:
	scripts/generate_patch --help


OBS source
----------

The tree can be exported as a set of files that can be used as an OBS
source package.  These files can then be used by OBS to generate both a
kernel source and kernel binary package, for a specific configuration.
To do this run the scripts/generate_obs script.  For more details on the
environment variables this script expects and how it works, please see
the built in help in the script by running:
	scripts/generate_obs --help




Patch Headers
=============

Each patch must have a RFC822-style header that at a minimum describes
what the patch does, who wrote it, and who can be contacted for any
questions about the patch.  The rules for patch headers are:

 * Each patch must have a From: tag that identifies the author of the
   patch.

 * Each patch must have a Subject: tag that briefly describes what
   the patch does.  A brief summary is it could show up in a change
   log makes the most sense in most cases.

 * The patch MUST include a Signed-off-by: address that identifies the
   person or people who have reviewed the patch, and can be available if
   there are any questions or problems about the patch.  For more
   details on exactly what "Signed-off-by:" means, see the file,
   Documentation/SubmittingPatches in the Linux kernel source tree.

 * If the patch is already upstream, or has been submitted for inclusion
   in the upstream kernel project, it must include a Patch-mainline: tag
   that identifies where the patch came from (for backports from
   mainline), or when it is expected to be added to mainline. The format
   is Patch-mainline: <upstream version>
   or Patch-mainline: Submitted <timestamp - destination>
   or Patch-mainline: <guess followed by a question mark>
   or Patch-mainline: Never <reason>

   If applicable, please also include
   Git-commit: <git hash> (there can be more than one if the patch is an
   aggregate of multiple commits)

   If the commit is from a maintainer repository or some other repository
   that isn't Linus's:
   Git-repo: <url to git repo>

 * The patch header may (and often, should) include a more extensive
   description of what the patch does, why, and how.  The idea is to
   allow others to quickly identify what each patch is about, and to
   give enough information for reviewing.


Minimal Requirements
====================

o  patch              2.6.1.64            # patch --version


patch
-----

The tree makes extensive use of git formatted patches, which are not
fully supported by older versions of patch.  Older versions will silently
discard parts of the diff they don't understand (such as renames), leading
to inconsistent state with some patches only being partially applied.


----------------------

Many thanks for the SUSE kernel team for their kernel patch rules, upon
which these rules are closely based.


