aboutsummaryrefslogtreecommitdiffstats
path: root/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'README.md')
-rw-r--r--README.md269
1 files changed, 269 insertions, 0 deletions
diff --git a/README.md b/README.md
new file mode 100644
index 00000000..3330bcde
--- /dev/null
+++ b/README.md
@@ -0,0 +1,269 @@
+0.0 Submitting Patches
+======================
+
+Patches to the kernel meta data should be submitted to the linux-yocto
+mailing list (subscripion only) and should cc' the maintainer.
+
+ list: https://lists.yoctoproject.org/g/linux-yocto
+ Maintainers: Bruce Ashfield <bruce.ashfield@gmail.com>
+
+When sending single patches, please using something like:
+
+ $ git send-email -1 --to=linux-yocto@lists.yoctoproject.org --subject-prefix='kernel-cache][PATCH'
+
+1.0 Overview
+============
+
+The linux-yocto kernel is composed of additions/modifications to the
+kernel.org source, plus configuration/control data to manage and use those
+changes.
+
+Source code changes are seen as git commits to the kernel source tree, are
+arranged into features (sometimes) separated by branches and marked by tags.
+
+The configuration and control data is contained within a separate branch from
+source changes called the meta branch. The configuration data is contained
+within the kernel-cache directory structure, and represents the instructions
+to modify the source tree and the configuration policies required to configure
+and build the kernel.
+
+While changes to the source code have already been applied to the tree, the
+control and configuration data is used before and during the kernel build
+process to generate a valid kernel config.
+
+This README explains the configuration data and policies around the
+organization of this information, it is not a guide to tree construction, scc
+file syntax or linux-yocto architecture.
+
+2.0 Configuration Policy
+========================
+
+The configuration data contained within the meta branch has the following
+purposes:
+
+ - Documents and defines hardware, non-hardware, required and optional
+ configuration data that are used to keep software configuration policy
+ and board support configuration separate. It also tags configuration data
+ in a manner that an audit can be performed to ensure that polices make it
+ to the final .config and that required options are not overridden or
+ dropped from the final .config.
+
+ - Creates a baseline configuration that can be inherited/included to result
+ in consistent configuration across all derived kernel builds
+
+ - Groups patches and their configuration data into documented features. The
+ proper configuration and enablement of a kernel change is coupled with the
+ patches that make the change to the source.
+
+ - Creates named feature fragments that when included enable the required
+ options to implement a specific behaviour (i.e. USB boot)
+
+ - Defines BSPs (Board Support Packages) (machines) that select a policy
+ (features + config) and hardware options to form a buildable, bootable
+ configuration.
+
+The policies that are contained within the meta branch can be overridden by
+external descriptions using the same description format as the meta branch
+configuration. This allows for flexible modification and extension of the
+base policy. Also, if a previously defined BSP configuration is modified, it
+can be audited against the software policy to generate a compliance report.
+
+2.1 Kernel Types (ktypes)
+-------------------------
+
+Kernel types (ktypes) are the highest level policy containers and represent
+a significant set of kernel functionality that has been grouped (and named)
+or partitioned.
+
+When functionality is partitioned it indicates that the features kept apart
+since they won't work together (eg: schedulers (BFS vs CFS), or security
+methods (grsec vs another LSM)). Grouped functionality means that there are
+many items (features, configuration) that you want to collectively call a
+"kernel type" and validate that they work together, but there's no
+fundamental incompatibility between these features and others in the system.
+
+Note: ktypes or KTYPES are seen as "define KTYPE <name>" in .scc files, and
+are part of a BSP definition.
+
+There are often significant differences between kernel types in the following
+ways:
+
+ - source code: large or invasive features that cannot be cleanly disabled,
+ or that cannot co-exist with other features at a source code level are
+ separated by kernel type. The preempt-rt patches, alternate schedulers,
+ grsecurity, are some examples of patches that are important parts of
+ kernel type definition.
+
+ - behaviour: A kernel type defines a default behaviour, which is often a
+ trade off against other options.
+
+ - performance vs. determinism
+ - security vs. flexibility
+ - size vs features
+ - ...
+
+ are all common parts of behavioural differences between kernel types.
+
+ - feature support: different kernel types support different sets of features,
+ such as XIP or different block schedulers, tracers, network devices and
+ power management.
+
+ - board support: due to the source, behaviour and feature differences between
+ kernel types, they often dictate hardware/board support. A BSP
+ definition declares which kernel types it supports by providing
+ descriptions that include a kernel type and add board support configuration
+ data.
+
+Kernel types can be inherited and extended. An example inheritance tree is
+below:
+
+ base: common/basic functionality, upstream features and bug fixes
+ |
+ +--- standard: selected functionality and performance profile.
+ | |
+ | +--- preempt-rt: real time extensions for the base + standard
+ |
+ +--- tiny: base functionality + few additional features with a small footprint
+
+
+2.2 Kernel Features
+--------------------
+
+Kernel features are named containers for changes to the kernel (via patches
+and/or configuration) that implement or enable a defined feature. A feature
+can be small, or large, simple or complex, but it always represents
+functionality or behaviour that can be included by other features or kernel
+types.
+
+Within the kernel-cache, kernel features are found as $FEATURE.scc files.
+
+If a feature contains patches, it must only be included once by a given BSP
+or kernel type, since including that feature applies a source change to the
+tree. Including it more than once would result in the double application of
+the same patches, which will fail.
+
+If functionality is added via patches, is frequently extended by patches, or
+periodically contains patches, it is typically classified as a "feature". It
+should be noted, that this is only a logical distinction from Kernel
+Configuration features, since the underlying mechanism is the same.
+
+Features are often sub-categorized into a directory structure that groups
+them by maintainer defined attributes such as architecture, debug, boot, etc.
+
+Full kernel features are found under: kernel/* in the directory tree.
+
+Patches are a feature subtype and are simply a grouping of changes into a
+named category. These typically are included by kernel types, and are not
+meant to implement a defined functionality or be included multiple times.
+
+These often contain bug fixes, backports or other small changes to the kernel
+tree, and do not typically contain any kernel configuration fragments.
+Configuration fragments are not required, since they are fixing bugs, or
+adding simple functionality that does not need Kconfig options to be
+enabled.
+
+Patches are normally arranged into a directory structure that makes their
+maintenance and carry forward easier and are found under "patches/*" in
+the directory structure.
+
+2.3 Config Features
+--------------------
+
+Config features are collections of configuration options that when included
+enable a specific behaviour or functionality. Configuration features do not
+contain patches, and can be included multiple times by any other feature or
+kernel type.
+
+The impact of configuration groups is additive, and order matters, since the
+last included config group can override the behaviour of previous includes.
+
+Pure Config features are found under "cfg/*" in the directory structure, and
+are named <$config_feature>.scc.
+
+Configuration fragments are the actual input to the linux kernel
+configuration subsystem and are included by config features. Configuration
+fragments are found throughout the tree, and are ".cfg" files.
+
+Note: Depending on the architecture of the meta data, configuration groups
+can be complete or partitioned.
+
+Example:
+
+ complete.scc
+ include complete.cfg
+
+ complete.cfg
+ CONFIG_A=y
+ CONFIG_B=y
+
+ partitioned.scc
+ include partitioned_a.cfg
+ include partitioned_b.cfg
+
+ partitioned_a.cfg
+ CONFIG_A=y
+
+ partitioned_b.cfg
+ CONFIG_B=y
+
+Complete config groups contain all the options required to enable
+functionality while partitioned configurations rely on multiple includes to
+build up a set of non-overlapping options to enable functionality. In the
+preceding example, including complete.scc or partitioned.scc will result
+in the same kernel configuration.
+
+Complete groups are simpler to include, but make it more difficult to remove
+or disable an option (since it can appear multiple times), while partitioned
+configuration only has a single option in a single config group, but make it
+more difficult to determine the right set of groups to include for the
+desired functionality.
+
+2.4 BSPs (Board Support Package)
+--------------------------------
+
+The BSP .scc files combine the policy from the kernel type with the
+hardware requirements of the machine into a single place. This file
+describes all the source code changes from patches and features and the
+configuration changes that are used to configure and build the kernel.
+
+There is one BSP description per kernel type that is located by a build
+system when it starts the process of configuring and build a kernel for a
+board.
+
+To repeat an earlier point, one of the goals of the data in the meta branch
+is the separation between software policy and board support configuration. As
+such, BSP descriptions should set configuration options that are related
+to physical devices (drivers, driver options, flash filesystems, error
+checking, etc) and leave software policy to features or kernel types.
+
+BSPs directly include kernel types to inherit their functionality. They
+include feature and config fragments to define non-hardware configuration and
+functionality. New or local configuration values introduced by a BSP should
+not override non-hardware (or policy) values unless absolutely necessary, but
+always should define the hardware they support.
+
+2.5 Staged Features
+-------------------
+
+It is often desirable to manage some features independently from other
+features in the tree to allow clean upstream fix integration and to avoid
+managing large numbers of patches and contributions. These branches are
+called "staged" features, and are included by BSP definitions by merging the
+topic branch in their board description.
+
+ git merge emgd-1.14
+
+is an example of merging a staged emgd feature into a BSP branch via a git
+operation.
+
+2.6 Licensing
+-------------
+All scripts contained in this directory are under GPL-2.0-or-later license,
+all kernel configuration file .cfg and .scc are under MIT license, as stated
+by the SPDX-License-Identifier.
+
+2.7 References
+--------------
+
+ git://git.yoctoproject.org/yocto-kernel-cache
+