From a24cb73f398b619e00395949fce73f667f7ca8af Mon Sep 17 00:00:00 2001 From: Scott Rifenbark Date: Mon, 28 Jan 2013 11:29:51 -0600 Subject: [PATCH] kernel-dev: Added "Kernel Architecture" section. Moved the "Kernel Architecture" section from the YP Kernel Architecture and Use Manual to this manual. The section included the kernel-architecture-overview.png figure. So, I added that PNG file to the "figures" folder. Finally, I had to also add the PNG file to the Makefile tarfile list for kernel-dev. Note that because the figure was part of the old YP Kernel Architecture and Use Manual, I did not have to add the figure to the mega-manual tarfile list. (From yocto-docs rev: fbc5508ce162ea7915fd5dce74338b6a5bfd7ce1) Signed-off-by: Scott Rifenbark Signed-off-by: Richard Purdie --- documentation/Makefile | 3 +- .../figures/kernel-architecture-overview.png | Bin 0 -> 40748 bytes .../kernel-dev/kernel-dev-concepts-appx.xml | 164 ++++++++++++++++++ 3 files changed, 166 insertions(+), 1 deletion(-) create mode 100755 documentation/kernel-dev/figures/kernel-architecture-overview.png diff --git a/documentation/Makefile b/documentation/Makefile index 2ee97f48c6..55efb44bf4 100644 --- a/documentation/Makefile +++ b/documentation/Makefile @@ -289,7 +289,8 @@ XSLTOPTS = --stringparam html.stylesheet kernel-dev-style.css \ --stringparam section.label.includes.component.label 1 \ --xinclude ALLPREQ = html pdf tarball -TARFILES = kernel-dev.html kernel-dev.pdf kernel-dev-style.css figures/kernel-dev-title.png +TARFILES = kernel-dev.html kernel-dev.pdf kernel-dev-style.css figures/kernel-dev-title.png \ + figures/kernel-architecture-overview.png MANUALS = $(DOC)/$(DOC).html $(DOC)/$(DOC).pdf FIGURES = figures STYLESHEET = $(DOC)/*.css diff --git a/documentation/kernel-dev/figures/kernel-architecture-overview.png b/documentation/kernel-dev/figures/kernel-architecture-overview.png new file mode 100755 index 0000000000000000000000000000000000000000..2aad172db3b84382f5be412447a005f3846a5c9d GIT binary patch literal 40748 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 B3<&@L literal 0 HcmV?d00001 diff --git a/documentation/kernel-dev/kernel-dev-concepts-appx.xml b/documentation/kernel-dev/kernel-dev-concepts-appx.xml index d78d2dc86c..732c0c310a 100644 --- a/documentation/kernel-dev/kernel-dev-concepts-appx.xml +++ b/documentation/kernel-dev/kernel-dev-concepts-appx.xml @@ -83,6 +83,170 @@ feature and BSP development. + +
+ Kernel Architecture + + This section describes the architecture of the kernels available through the + Yocto Project and provides information + on the mechanisms used to achieve that architecture. + + +
+ Overview + + As mentioned earlier, a key goal of the Yocto Project is to present the + developer with + a kernel that has a clear and continuous history that is visible to the user. + The architecture and mechanisms used achieve that goal in a manner similar to the + upstream kernel.org. + + + You can think of a Yocto Project kernel as consisting of a baseline Linux kernel with + added features logically structured on top of the baseline. + The features are tagged and organized by way of a branching strategy implemented by the + source code manager (SCM) Git. + For information on Git as applied to the Yocto Project, see the + "Git" section in the + Yocto Project Development Manual. + + + The result is that the user has the ability to see the added features and + the commits that make up those features. + In addition to being able to see added features, the user can also view the history of what + made up the baseline kernel. + + + The following illustration shows the conceptual Yocto Project kernel. + + + + + + In the illustration, the "Kernel.org Branch Point" + marks the specific spot (or release) from + which the Yocto Project kernel is created. + From this point "up" in the tree, features and differences are organized and tagged. + + + The "Yocto Project Baseline Kernel" contains functionality that is common to every kernel + type and BSP that is organized further up the tree. + Placing these common features in the + tree this way means features don't have to be duplicated along individual branches of the + structure. + + + From the Yocto Project Baseline Kernel, branch points represent specific functionality + for individual BSPs as well as real-time kernels. + The illustration represents this through three BSP-specific branches and a real-time + kernel branch. + Each branch represents some unique functionality for the BSP or a real-time kernel. + + + In this example structure, the real-time kernel branch has common features for all + real-time kernels and contains + more branches for individual BSP-specific real-time kernels. + The illustration shows three branches as an example. + Each branch points the way to specific, unique features for a respective real-time + kernel as they apply to a given BSP. + + + The resulting tree structure presents a clear path of markers (or branches) to the + developer that, for all practical purposes, is the kernel needed for any given set + of requirements. + +
+ +
+ Branching Strategy and Workflow + + The Yocto Project team creates kernel branches at points where functionality is + no longer shared and thus, needs to be isolated. + For example, board-specific incompatibilities would require different functionality + and would require a branch to separate the features. + Likewise, for specific kernel features, the same branching strategy is used. + + + This branching strategy results in a tree that has features organized to be specific + for particular functionality, single kernel types, or a subset of kernel types. + This strategy also results in not having to store the same feature twice + internally in the tree. + Rather, the kernel team stores the unique differences required to apply the + feature onto the kernel type in question. + + The Yocto Project team strives to place features in the tree such that they can be + shared by all boards and kernel types where possible. + However, during development cycles or when large features are merged, + the team cannot always follow this practice. + In those cases, the team uses isolated branches to merge features. + + + + BSP-specific code additions are handled in a similar manner to kernel-specific additions. + Some BSPs only make sense given certain kernel types. + So, for these types, the team creates branches off the end of that kernel type for all + of the BSPs that are supported on that kernel type. + From the perspective of the tools that create the BSP branch, the BSP is really no + different than a feature. + Consequently, the same branching strategy applies to BSPs as it does to features. + So again, rather than store the BSP twice, the team only stores the unique + differences for the BSP across the supported multiple kernels. + + + While this strategy can result in a tree with a significant number of branches, it is + important to realize that from the developer's point of view, there is a linear + path that travels from the baseline kernel.org, through a select + group of features and ends with their BSP-specific commits. + In other words, the divisions of the kernel are transparent and are not relevant + to the developer on a day-to-day basis. + From the developer's perspective, this path is the "master" branch. + The developer does not need to be aware of the existence of any other branches at all. + Of course, there is value in the existence of these branches + in the tree, should a person decide to explore them. + For example, a comparison between two BSPs at either the commit level or at the line-by-line + code diff level is now a trivial operation. + + + Working with the kernel as a structured tree follows recognized community best practices. + In particular, the kernel as shipped with the product, should be + considered an "upstream source" and viewed as a series of + historical and documented modifications (commits). + These modifications represent the development and stabilization done + by the Yocto Project kernel development team. + + + Because commits only change at significant release points in the product life cycle, + developers can work on a branch created + from the last relevant commit in the shipped Yocto Project kernel. + As mentioned previously, the structure is transparent to the developer + because the kernel tree is left in this state after cloning and building the kernel. + +
+ +
+ Source Code Manager - Git + + The Source Code Manager (SCM) is Git. + This SCM is the obvious mechanism for meeting the previously mentioned goals. + Not only is it the SCM for kernel.org but, + Git continues to grow in popularity and supports many different work flows, + front-ends and management techniques. + + + You can find documentation on Git at . + You can also get an introduction to Git as it applies to the Yocto Project in the + "Git" + section in the Yocto Project Development Manual. + These referenced sections overview Git and describe a minimal set of + commands that allows you to be functional using Git. + + You can use as much, or as little, of what Git has to offer to accomplish what + you need for your project. + You do not have to be a "Git Master" in order to use it with the Yocto Project. + + +
+