diff options
| author | Scott Rifenbark <scott.m.rifenbark@intel.com> | 2010-11-29 17:31:24 -0800 |
|---|---|---|
| committer | Saul Wold <Saul.Wold@intel.com> | 2010-12-10 22:01:19 -0800 |
| commit | 5bda926c80d825470ac3ba72f3682b469308dcad (patch) | |
| tree | 6d11016ba997986c431157fb19d8138007be23f2 /documentation | |
| parent | 1722898e16f8132df957442bb62b1e504b6bd67d (diff) | |
| download | poky-5bda926c80d825470ac3ba72f3682b469308dcad.tar.gz | |
documentation/kernel-manual/kerenel-how-to.xml: Edits to clean up text.
Re-writing up to the "Export for External (Upstream) Submission" section.
I am cleaning up the English and style.
Signed-off-by: Scott Rifenbark <scott.m.rifenbark@intel.com>
Diffstat (limited to 'documentation')
| -rw-r--r-- | documentation/kernel-manual/kernel-how-to.xml | 779 |
1 files changed, 438 insertions, 341 deletions
diff --git a/documentation/kernel-manual/kernel-how-to.xml b/documentation/kernel-manual/kernel-how-to.xml index 7f3eac3d3b..d32ea20b34 100644 --- a/documentation/kernel-manual/kernel-how-to.xml +++ b/documentation/kernel-manual/kernel-how-to.xml | |||
| @@ -17,15 +17,15 @@ | |||
| 17 | <!-- <listitem><para>Series & Configuration Compiler</para></listitem> | 17 | <!-- <listitem><para>Series & Configuration Compiler</para></listitem> |
| 18 | <listitem><para>kgit</para></listitem> --> | 18 | <listitem><para>kgit</para></listitem> --> |
| 19 | <listitem><para>Workflow examples</para></listitem> | 19 | <listitem><para>Workflow examples</para></listitem> |
| 20 | <listitem><para>Source Code Manager (SCM)</para></listitem> | 20 | <!-- <listitem><para>Source Code Manager (SCM)</para></listitem> |
| 21 | <!-- <listitem><para>Board Support Package (BSP) template migration</para></listitem> --> | 21 | <listitem><para>Board Support Package (BSP) template migration</para></listitem> |
| 22 | <listitem><para>BSP creation</para></listitem> | 22 | <listitem><para>BSP creation</para></listitem> |
| 23 | <listitem><para>Patching</para></listitem> | 23 | <listitem><para>Patching</para></listitem> |
| 24 | <listitem><para>Updating BSP patches and configuration</para></listitem> | 24 | <listitem><para>Updating BSP patches and configuration</para></listitem> |
| 25 | <!-- <listitem><para>guilt</para></listitem> | 25 | <listitem><para>guilt</para></listitem> |
| 26 | <listitem><para>scc file example</para></listitem> --> | 26 | <listitem><para>scc file example</para></listitem> |
| 27 | <listitem><para>"dirty" string</para></listitem> | 27 | <listitem><para>"dirty" string</para></listitem> |
| 28 | <!-- <listitem><para>Transition kernel layer</para></listitem> --> | 28 | <listitem><para>Transition kernel layer</para></listitem> --> |
| 29 | </itemizedlist> | 29 | </itemizedlist> |
| 30 | </para> | 30 | </para> |
| 31 | </section> | 31 | </section> |
| @@ -33,90 +33,91 @@ | |||
| 33 | <section id='tree-construction'> | 33 | <section id='tree-construction'> |
| 34 | <title>Tree Construction</title> | 34 | <title>Tree Construction</title> |
| 35 | <para> | 35 | <para> |
| 36 | The Yocto Project kernel repository, as shipped with the product, is created by | 36 | The Yocto Project kernel repository, as shipped with the product, is created by |
| 37 | compiling and executing the set of feature descriptions for every BSP/feature | 37 | compiling and executing the set of feature descriptions for every BSP/feature |
| 38 | in the product. Those feature descriptions list all necessary patches, | 38 | in the product. |
| 39 | configuration, branching, tagging and feature divisions found in the kernel. | 39 | Those feature descriptions list all necessary patches, |
| 40 | </para> | 40 | configuration, branching, tagging and feature divisions found in the kernel. |
| 41 | <para> | 41 | </para> |
| 42 | The files used to describe all the valid features and BSPs in the Yocto Project | 42 | <para> |
| 43 | kernel can be found in any clone of the kernel git tree. The directory | 43 | You can find the files used to describe all the valid features and BSPs in the Yocto Project |
| 44 | wrs/cfg/kernel-cache/ is a snapshot of all the kernel configuration and | 44 | kernel in any clone of the kernel git tree. |
| 45 | feature descriptions (.scc) that were used to build the kernel repository. | 45 | The directory <filename>wrs/cfg/kernel-cache/</filename> is a snapshot of all the kernel |
| 46 | It should however be noted, that browsing the snapshot of feature | 46 | configuration and feature descriptions (.scc) used to build the kernel repository. |
| 47 | descriptions and patches is not an effective way to determine what is in a | 47 | You should realize, however, that browsing the snapshot of feature |
| 48 | particular kernel branch. Using git directly to get insight into the changes | 48 | descriptions and patches is not an effective way to determine what is in a |
| 49 | in a branch is more efficient and a more flexible way to inspect changes to | 49 | particular kernel branch. |
| 50 | the kernel. Examples of using git to inspect kernel commits are in the | 50 | Instead, you should use git directly to discover the changes |
| 51 | following sections. | 51 | in a branch. |
| 52 | </para> | 52 | Using git is a efficient and flexible way to inspect changes to the kernel. |
| 53 | <para> | 53 | For examples showing how to use git to inspect kernel commits, see the following sections |
| 54 | As a reminder, it is envisioned that a ground up reconstruction of the | 54 | in this chapter. |
| 55 | complete kernel tree is an action only taken by Yocto Project team during an | 55 | </para> |
| 56 | active development cycle. When an end user creates a project, it takes | 56 | <note><para> |
| 57 | advantage of this complete tree in order to efficiently place a git tree | 57 | Ground up reconstruction of the complete kernel tree is an action only taken by the |
| 58 | within their project. | 58 | Yocto Project team during an active development cycle. |
| 59 | </para> | 59 | Creating a project takes advantage of this complete tree in order to |
| 60 | <para> | 60 | place efficiently a git tree within the project. |
| 61 | The general flow of the project specific kernel tree construction is as follows: | 61 | </para></note> |
| 62 | <orderedlist> | 62 | <para> |
| 63 | <listitem><para>a top level kernel feature is passed to the kernel build subsystem, | 63 | The general flow for constructing a project-specific kernel tree is as follows: |
| 64 | normally this is a BSP for a particular kernel type.</para></listitem> | 64 | <orderedlist> |
| 65 | 65 | <listitem><para>A top-level kernel feature is passed to the kernel build subsystem. | |
| 66 | <listitem><para>the file that describes the top level feature is located by searching | 66 | Normally, this is a BSP for a particular kernel type.</para></listitem> |
| 67 | system directories:</para> | ||
| 68 | |||
| 69 | <itemizedlist> | ||
| 70 | <listitem><para>the kernel-cache under linux/wrs/cfg/kernel-cache</para></listitem> | ||
| 71 | <!-- <listitem><para>kernel-*-cache directories in layers</para></listitem> --> | ||
| 72 | <listitem><para>recipe SRC_URIs</para></listitem> | ||
| 73 | <!-- <listitem><para>configured and default templates</para></listitem> --> | ||
| 74 | </itemizedlist> | ||
| 75 | 67 | ||
| 76 | <para>In a typical build a feature description of the format: | 68 | <listitem><para>The file that describes the top-level feature is located by searching |
| 77 | <bsp name>-<kernel type>.scc is the target of the search. | 69 | these system directories:</para> |
| 78 | </para></listitem> | ||
| 79 | 70 | ||
| 80 | <listitem><para>once located, the feature description is compiled into a simple script | 71 | <itemizedlist> |
| 81 | of actions, or an existing equivalent script which was part of the | 72 | <listitem><para>The kernel-cache under |
| 82 | shipped kernel is located.</para></listitem> | 73 | <filename>linux/wrs/cfg/kernel-cache</filename></para></listitem> |
| 74 | <!-- <listitem><para>kernel-*-cache directories in layers</para></listitem> --> | ||
| 75 | <listitem><para>Recipe SRC_URIs</para></listitem> | ||
| 76 | <!-- <listitem><para>configured and default templates</para></listitem> --> | ||
| 77 | </itemizedlist> | ||
| 83 | 78 | ||
| 84 | <listitem><para>extra features are appended to the top level feature description. Extra | 79 | <para>For a typical build a feature description of the format: |
| 85 | features can come from the KERNEL_FEATURES variable in recipes.</para></listitem> | 80 | <bsp name>-<kernel type>.scc is the target of the search. |
| 81 | </para></listitem> | ||
| 86 | 82 | ||
| 87 | <listitem><para>each extra feature is located, compiled and appended to the script from | 83 | <listitem><para>Once located, the feature description is either compiled into a simple script |
| 88 | step #3</para></listitem> | 84 | of actions, or an existing equivalent script that was part of the |
| 85 | shipped kernel is located.</para></listitem> | ||
| 89 | 86 | ||
| 90 | <listitem><para>the script is executed, and a meta-series is produced. The meta-series | 87 | <listitem><para>Extra features are appended to the top-level feature description. |
| 91 | is a description of all the branches, tags, patches and configuration that | 88 | These features can come from the KERNEL_FEATURES variable in recipes.</para></listitem> |
| 92 | need to be applied to the base git repository to completely create the | ||
| 93 | "bsp_name-kernel_type".</para></listitem> | ||
| 94 | 89 | ||
| 95 | <listitem><para>the base repository is cloned, and the actions | 90 | <listitem><para>Each extra feature is located, compiled and appended to the script from |
| 96 | listed in the meta-series are applied to the tree.</para></listitem> | 91 | step #3</para></listitem> |
| 97 | 92 | ||
| 98 | <listitem><para>the git repository is left with the desired branch checked out and any | 93 | <listitem><para>The script is executed, and a meta-series is produced. |
| 99 | required branching, patching and tagging has been performed.</para></listitem> | 94 | The meta-series is a description of all the branches, tags, patches and configuration that |
| 100 | </orderedlist> | 95 | needs to be applied to the base git repository to completely create the |
| 101 | </para> | 96 | "bsp_name-kernel_type".</para></listitem> |
| 102 | 97 | ||
| 103 | <para> | 98 | <listitem><para>The base repository is cloned, and the actions |
| 104 | The tree is now ready for configuration and compilation. Those two topics will | 99 | listed in the meta-series are applied to the tree.</para></listitem> |
| 105 | be covered below. | ||
| 106 | </para> | ||
| 107 | 100 | ||
| 108 | <note><para>The end user generated meta-series adds to the kernel as shipped with | 101 | <listitem><para>The git repository is left with the desired branch checked out and any |
| 109 | the Yocto Project release. Any add-ons and configuration data are applied | 102 | required branching, patching and tagging has been performed.</para></listitem> |
| 110 | to the end of an existing branch. The full repository generation that | 103 | </orderedlist> |
| 111 | is found in the linux-2.6-windriver.git is the combination of all | 104 | </para> |
| 112 | supported boards and configurations. | ||
| 113 | </para></note> | ||
| 114 | 105 | ||
| 115 | <para> | 106 | <para> |
| 116 | This technique is flexible and allows the seamless blending of an immutable | 107 | The tree is now ready for configuration and compilation. |
| 117 | history with additional deployment specific patches. Any additions to the | 108 | </para> |
| 118 | kernel become an integrated part of the branches. | 109 | |
| 119 | </para> | 110 | <note><para>The end-user generated meta-series adds to the kernel as shipped with |
| 111 | the Yocto Project release. | ||
| 112 | Any add-ons and configuration data are applied to the end of an existing branch. | ||
| 113 | The full repository generation that is found in the | ||
| 114 | <filename>linux-2.6-windriver.git</filename> is the combination of all | ||
| 115 | supported boards and configurations.</para> | ||
| 116 | |||
| 117 | <para>This technique is flexible and allows the seamless blending of an immutable | ||
| 118 | history with additional deployment specific patches. | ||
| 119 | Any additions to the kernel become an integrated part of the branches. | ||
| 120 | </para></note> | ||
| 120 | 121 | ||
| 121 | <!-- <note><para>It is key that feature descriptions indicate if any branches are | 122 | <!-- <note><para>It is key that feature descriptions indicate if any branches are |
| 122 | required, since the build system cannot automatically decide where a | 123 | required, since the build system cannot automatically decide where a |
| @@ -132,7 +133,7 @@ kernel become an integrated part of the branches. | |||
| 132 | </para> | 133 | </para> |
| 133 | </note> --> | 134 | </note> --> |
| 134 | 135 | ||
| 135 | <para> | 136 | <!-- <para> |
| 136 | A summary of end user tree construction activities follow: | 137 | A summary of end user tree construction activities follow: |
| 137 | <itemizedlist> | 138 | <itemizedlist> |
| 138 | <listitem><para>compile and link a full top-down kernel description from feature descriptions</para></listitem> | 139 | <listitem><para>compile and link a full top-down kernel description from feature descriptions</para></listitem> |
| @@ -142,54 +143,66 @@ A summary of end user tree construction activities follow: | |||
| 142 | <listitem><para>migrate configuration fragments and configure the kernel</para></listitem> | 143 | <listitem><para>migrate configuration fragments and configure the kernel</para></listitem> |
| 143 | <listitem><para>checkout the BSP branch and build</para></listitem> | 144 | <listitem><para>checkout the BSP branch and build</para></listitem> |
| 144 | </itemizedlist> | 145 | </itemizedlist> |
| 145 | </para> | 146 | </para> --> |
| 146 | </section> | 147 | </section> |
| 147 | 148 | ||
| 148 | <section id='build-strategy'> | 149 | <section id='build-strategy'> |
| 149 | <title>Build Strategy</title> | 150 | <title>Build Strategy</title> |
| 150 | <para> | 151 | <para> |
| 151 | There are some prerequisites that must be met before starting the compilation | 152 | There are some prerequisites that must be met before starting the compilation |
| 152 | phase of the kernel build system: | 153 | phase of the kernel build system: |
| 153 | </para> | 154 | </para> |
| 154 | <itemizedlist> | ||
| 155 | <listitem><para>There must be a kernel git repository indicated in the SRC_URI.</para></listitem> | ||
| 156 | <listitem><para>There must be a branch <bsp name>-<kernel type>.</para></listitem> | ||
| 157 | </itemizedlist> | ||
| 158 | 155 | ||
| 159 | <para> | 156 | <itemizedlist> |
| 160 | These are typically met by running tree construction/patching phase of the | 157 | <listitem><para>There must be a kernel git repository indicated in the SRC_URI.</para></listitem> |
| 161 | build system, but can be achieved by other means. Examples of alternate work | 158 | <listitem><para>There must be a branch <bsp name>-<kernel type>.</para></listitem> |
| 162 | flows such as bootstrapping a BSP are provided below. | 159 | </itemizedlist> |
| 163 | </para> | 160 | |
| 164 | <para> | 161 | <para> |
| 165 | Before building a kernel it is configured by processing all of the | 162 | You can typically meet these prerequisites by running the tree construction/patching phase |
| 166 | configuration "fragments" specified by the scc feature descriptions. As the | 163 | of the build system. |
| 167 | features are compiled, associated kernel configuration fragments are noted | 164 | However, other means do exist. |
| 168 | and recorded in the meta-series in their compilation order. The | 165 | For examples of alternate workflows such as bootstrapping a BSP, see |
| 169 | fragments are migrated, pre-processed and passed to the Linux Kernel | 166 | the<link linkend='workflow-examples'> Workflow Examples</link> section in this manual. |
| 170 | Configuration subsystem (lkc) as raw input in the form of a .config file. | 167 | </para> |
| 171 | The lkc uses its own internal dependency constraints to do the final | 168 | |
| 172 | processing of that information and generates the final .config that will | 169 | <para> |
| 173 | be used during compilation. | 170 | Before building a kernel it is configured by processing all of the |
| 174 | </para> | 171 | configuration "fragments" specified by the scc feature descriptions. |
| 175 | <para> | 172 | As the features are compiled, associated kernel configuration fragments are noted |
| 176 | Kernel compilation is started, using the board's architecture and other | 173 | and recorded in the meta-series in their compilation order. |
| 177 | relevant values from the board template, and a kernel image is produced. | 174 | The fragments are migrated, pre-processed and passed to the Linux Kernel |
| 178 | </para> | 175 | Configuration subsystem (lkc) as raw input in the form of a <filename>.config</filename> file. |
| 179 | <para> | 176 | The lkc uses its own internal dependency constraints to do the final |
| 180 | The other thing that you will first see once you configure a kernel is that | 177 | processing of that information and generates the final <filename>.config</filename> file |
| 181 | it will generate a build tree that is separate from your git source tree. | 178 | that is used during compilation. |
| 182 | This build dir will be called "linux-<BSPname>-<kerntype>-build" where | 179 | </para> |
| 183 | kerntype is one of standard kernel types. This functionality is done by making | 180 | |
| 184 | use of the existing support that is within the kernel.org tree by default. | 181 | <para> |
| 185 | </para> | 182 | Using the board's architecture and other relevant values from the board's template |
| 186 | <para> | 183 | the Kernel compilation is started and a kernel image is produced. |
| 187 | What this means, is that all the generated files (that includes the final | 184 | </para> |
| 188 | ".config" itself, all ".o" and ".a" etc) are now in this directory. Since | 185 | |
| 189 | the git source tree can contain any number of BSPs, all on their own branch, | 186 | <para>The other thing that you will first see once you configure a kernel is that |
| 190 | you now can easily switch between builds of BSPs as well, since each one also | 187 | it will generate a build tree that is separate from your git source tree. |
| 191 | has their own separate build directory. | 188 | This build tree has the name using the following form: |
| 192 | </para> | 189 | <literallayout class='monospaced'> |
| 190 | linux-<BSPname>-<kerntype>-build | ||
| 191 | </literallayout> | ||
| 192 | "kerntype" is one of the standard kernel types. | ||
| 193 | </para> | ||
| 194 | |||
| 195 | <para> | ||
| 196 | The existing support in the kernel.org tree achieves this default functionality. | ||
| 197 | </para> | ||
| 198 | |||
| 199 | <para> | ||
| 200 | What this means, is that all the generated files for a particular BSP are now in this directory. | ||
| 201 | The files include the final <filename>.config</filename>, all the <filename>.o</filename> | ||
| 202 | files, the <filename>.a</filename> files, and so forth. | ||
| 203 | Since each BSP has its own separate build directory in its own separate branch | ||
| 204 | of the git tree you can easily switch between different BSP builds. | ||
| 205 | </para> | ||
| 193 | </section> | 206 | </section> |
| 194 | 207 | ||
| 195 | <!-- <section id='scc'> | 208 | <!-- <section id='scc'> |
| @@ -355,51 +368,69 @@ repository. | |||
| 355 | <title>Workflow Examples</title> | 368 | <title>Workflow Examples</title> |
| 356 | 369 | ||
| 357 | <para> | 370 | <para> |
| 358 | As previously noted, the Yocto Project kernel has built in git/guilt | 371 | As previously noted, the Yocto Project kernel has built in git/guilt |
| 359 | integration, but these utilities are not the only way to work with the kernel | 372 | integration. |
| 360 | repository. Yocto Project has not made changes to git, or other tools that | 373 | However, these utilities are not the only way to work with the kernel repository. |
| 361 | invalidate alternate workflows. Additionally, the way the kernel repository | 374 | Yocto Project has not made changes to git or to other tools that |
| 362 | is constructed uses only core git functionality allowing any number of tools | 375 | would invalidate alternate workflows. |
| 363 | or front ends to use the resulting tree.</para> | 376 | Additionally, the way the kernel repository is constructed results in using |
| 364 | <para> | 377 | only core git functionality thus allowing any number of tools or front ends to use the |
| 365 | This section contains several workflow examples. | 378 | resulting tree. |
| 366 | </para> | 379 | </para> |
| 380 | |||
| 381 | <para> | ||
| 382 | This section contains several workflow examples. | ||
| 383 | </para> | ||
| 367 | 384 | ||
| 368 | <section id='change-inspection-kernel-changes-commits'> | 385 | <section id='change-inspection-kernel-changes-commits'> |
| 369 | <title>Change Inspection: Kernel Changes/Commits</title> | 386 | <title>Change Inspection: Kernel Changes/Commits</title> |
| 370 | <para> | 387 | |
| 371 | A common question when working with a BSP/kernel is: "What changes have been applied to this tree?" | 388 | <para> |
| 372 | </para> | 389 | A common question when working with a BSP or kernel is: |
| 373 | <para> | 390 | "What changes have been applied to this tree?" |
| 374 | In some projects, where a collection of directories that | 391 | </para> |
| 375 | contained patches to the kernel, those patches could be inspected, grep'd or | 392 | |
| 376 | otherwise used to get a general feeling for changes. This sort of patch | 393 | <para> |
| 377 | inspection is not an efficient way to determine what has been done to the | 394 | In projects that have a collection of directories that |
| 378 | kernel, since there are many optional patches that are selected based on the | 395 | contain patches to the kernel it is possible to inspect or "grep" the contents |
| 379 | kernel type and feature description, not to mention patches that are actually | 396 | of the directories to get a general feel for the changes. |
| 380 | in directories that are not being searched. | 397 | This sort of patch inspection is not an efficient way to determine what has been done to the |
| 381 | </para> | 398 | kernel. |
| 382 | <para> | 399 | The reason it is inefficient is because there are many optional patches that are |
| 383 | A more effective way to determine what has changed in the kernel is to use | 400 | selected based on the kernel type and the feature description. |
| 384 | git and inspect / search the kernel tree. This is a full view of not only the | 401 | Additionally, patches could exist in directories that are not included in the search. |
| 385 | source code modifications, but the reasoning behind the changes. | 402 | </para> |
| 386 | </para> | 403 | |
| 404 | <para> | ||
| 405 | A more efficient way to determine what has changed in the kernel is to use | ||
| 406 | git and inspect or search the kernel tree. | ||
| 407 | This method gives you a full view of not only the source code modifications, | ||
| 408 | but also provides the reasons for the changes. | ||
| 409 | </para> | ||
| 410 | |||
| 387 | <section id='what-changed-in-a-bsp'> | 411 | <section id='what-changed-in-a-bsp'> |
| 388 | <title>What Changed in a BSP?</title> | 412 | <title>What Changed in a BSP?</title> |
| 389 | <para> | 413 | |
| 390 | These examples could continue for some time, since the Yocto Project git | 414 | <para> |
| 391 | repository doesn't break existing git functionality and there are nearly | 415 | Following are a few examples that show how to use git to examine changes. |
| 392 | endless permutations of those commands. Also note that unless a commit range | 416 | Note that because the Yocto Project git repository does not break existing git |
| 393 | is given (<kernel type>..<bsp>-<kernel type>), kernel.org history is blended | 417 | functionality and because there exists many permutations of these types of |
| 394 | with Yocto Project changes | 418 | commands there are many more methods to discover changes. |
| 395 | </para> | 419 | </para> |
| 396 | <literallayout class='monospaced'> | 420 | |
| 421 | <note><para> | ||
| 422 | Unless you provide a commit range | ||
| 423 | (<kernel-type>..<bsp>-<kernel-type>), kernel.org history | ||
| 424 | is blended with Yocto Project changes. | ||
| 425 | </para></note> | ||
| 426 | |||
| 427 | <literallayout class='monospaced'> | ||
| 397 | # full description of the changes | 428 | # full description of the changes |
| 398 | > git whatchanged <kernel type>..<bsp>-<kernel type> | 429 | > git whatchanged <kernel type>..<bsp>-<kernel type> |
| 399 | > eg: git whatchanged standard..common_pc-standard | 430 | > eg: git whatchanged standard..common_pc-standard |
| 400 | 431 | ||
| 401 | # summary of the changes | 432 | # summary of the changes |
| 402 | > git log ‐‐pretty=oneline ‐‐abbrev-commit <kernel type>..<bsp>-<kernel type> | 433 | > git log --pretty=oneline --;abbrev-commit <kernel type>..<bsp>-<kernel type> |
| 403 | 434 | ||
| 404 | # source code changes (one combined diff) | 435 | # source code changes (one combined diff) |
| 405 | > git diff <kernel type>..<bsp>-<kernel type> | 436 | > git diff <kernel type>..<bsp>-<kernel type> |
| @@ -413,86 +444,105 @@ with Yocto Project changes | |||
| 413 | 444 | ||
| 414 | # determine the commits which touch each line in a file | 445 | # determine the commits which touch each line in a file |
| 415 | > git blame <path to file> | 446 | > git blame <path to file> |
| 416 | </literallayout> | 447 | </literallayout> |
| 417 | </section> | 448 | </section> |
| 418 | 449 | ||
| 419 | <section id='show-a-particular-feature-or-branch-change'> | 450 | <section id='show-a-particular-feature-or-branch-change'> |
| 420 | <title>Show a Particular Feature or Branch Change</title> | 451 | <title>Show a Particular Feature or Branch Change</title> |
| 421 | <para> | 452 | |
| 422 | Significant features or branches are tagged in the Yocto Project tree to divide | 453 | <para> |
| 423 | changes. Remember to first determine (or add) the tag of interest. Note: | 454 | Significant features or branches are tagged in the Yocto Project tree to divide |
| 424 | there will be many tags, since each BSP branch is tagged, kernel.org tags and | 455 | changes. |
| 425 | feature tags are all present. | 456 | Remember to first determine (or add) the tag of interest. |
| 426 | </para> | 457 | </para> |
| 427 | <literallayout class='monospaced'> | 458 | |
| 459 | <note><para> | ||
| 460 | Because BSP branch, kernel.org, and feature tags are all present, there are many tags. | ||
| 461 | </para></note> | ||
| 462 | |||
| 463 | <literallayout class='monospaced'> | ||
| 428 | # show the changes tagged by a feature | 464 | # show the changes tagged by a feature |
| 429 | > git show <tag> | 465 | > git show <tag> |
| 430 | > eg: git show yaffs2 | 466 | > eg: git show yaffs2 |
| 431 | 467 | ||
| 432 | # determine which branches contain a feature | 468 | # determine which branches contain a feature |
| 433 | > git branch ‐‐contains <tag> | 469 | > git branch --contains <tag> |
| 434 | 470 | ||
| 435 | # show the changes in a kernel type | 471 | # show the changes in a kernel type |
| 436 | > git whatchanged wrs_base..<kernel type> | 472 | > git whatchanged wrs_base..<kernel type> |
| 437 | > eg: git whatchanged wrs_base..standard | 473 | > eg: git whatchanged wrs_base..standard |
| 438 | </literallayout> | 474 | </literallayout> |
| 439 | <para> | 475 | |
| 440 | Many other comparisons can be done to isolate BSP changes, such as comparing | 476 | <para> |
| 441 | to kernel.org tags (v2.6.27.18, etc), per subsystem comparisons (git | 477 | You can use many other comparisons to isolate BSP changes. |
| 442 | whatchanged mm) or many other types of checks. | 478 | For example, you can compare against kernel.org tags (e.g. v2.6.27.18, etc), or |
| 443 | </para> | 479 | you can compare agains subsystems (e.g. git whatchanged mm). |
| 480 | </para> | ||
| 444 | </section> | 481 | </section> |
| 445 | </section> | 482 | </section> |
| 446 | 483 | ||
| 447 | <section id='development-saving-kernel-modifications'> | 484 | <section id='development-saving-kernel-modifications'> |
| 448 | <title>Development: Saving Kernel Modifications</title> | 485 | <title>Development: Saving Kernel Modifications</title> |
| 449 | <para> | 486 | |
| 450 | Another common operation is to build a Yocto Project supplied BSP, make some | 487 | <para> |
| 451 | changes, rebuild and test. Those local changes often need to be exported, | 488 | Another common operation is to build a BSP supplied by Yocto Project, make some |
| 452 | shared or otherwise maintained. | 489 | changes, rebuild and then test. |
| 453 | </para> | 490 | Those local changes often need to be exported, shared or otherwise maintained. |
| 454 | <para> | 491 | </para> |
| 455 | Since the Yocto Project kernel source tree is backed by git, this activity is | 492 | |
| 456 | greatly simplified and is much easier than in previous releases. git tracks | 493 | <para> |
| 457 | file modifications, additions and deletions, which allows the developer to | 494 | Since the Yocto Project kernel source tree is backed by git, this activity is |
| 458 | modify the code and later realize that the changes should be saved, and | 495 | much easier as compared to with previous releases. |
| 459 | easily determine what was changed. It also provides many tools to commit, | 496 | Because git tracks file modifications, additions and deletions, it is easy |
| 460 | undo and export those modifications. | 497 | to modify the code and later realize that the changes should be saved. |
| 461 | </para> | 498 | It is also easy to determine what has changed. |
| 462 | <para> | 499 | This method also provides many tools to commit, undo and export those modifications. |
| 463 | There are many ways to perform this action, and the technique employed | 500 | </para> |
| 464 | depends on the destination for the patches, which could be any of: | 501 | |
| 465 | <itemizedlist> | 502 | <para> |
| 466 | <listitem><para>bulk storage</para></listitem> | 503 | There are many ways to save kernel modifications. |
| 467 | <listitem><para>internal sharing either through patches or using git</para></listitem> | 504 | The technique employed |
| 468 | <listitem><para>external submission</para></listitem> | 505 | depends on the destination for the patches: |
| 469 | <listitem><para>export for integration into another SCM</para></listitem> | 506 | |
| 470 | </itemizedlist> | 507 | <itemizedlist> |
| 471 | </para> | 508 | <listitem><para>Bulk storage</para></listitem> |
| 472 | <para> | 509 | <listitem><para>Internal sharing either through patches or by using git</para></listitem> |
| 473 | The destination of the patches also incluences the method of gathering them | 510 | <listitem><para>External submissions</para></listitem> |
| 474 | due to issues such as: | 511 | <listitem><para>Exporting for integration into another SCM</para></listitem> |
| 475 | <itemizedlist> | 512 | </itemizedlist> |
| 476 | <listitem><para>bisectability</para></listitem> | 513 | </para> |
| 477 | <listitem><para>commit headers</para></listitem> | 514 | |
| 478 | <listitem><para>division of subsystems for separate submission / review</para></listitem> | 515 | <para> |
| 479 | </itemizedlist> | 516 | Because of the following list of issues, the destination of the patches also influences |
| 480 | </para> | 517 | the method for gathering them: |
| 518 | |||
| 519 | <itemizedlist> | ||
| 520 | <listitem><para>Bisectability</para></listitem> | ||
| 521 | <listitem><para>Commit headers</para></listitem> | ||
| 522 | <listitem><para>Division of subsystems for separate submission or review</para></listitem> | ||
| 523 | </itemizedlist> | ||
| 524 | </para> | ||
| 481 | 525 | ||
| 482 | <section id='bulk-export'> | 526 | <section id='bulk-export'> |
| 483 | <title>Bulk Export</title> | 527 | <title>Bulk Export</title> |
| 484 | <para> | 528 | |
| 485 | If patches are simply being stored outside of the kernel source repository, | 529 | <para> |
| 486 | either permanently or temporarily, then there are several methods that can be | 530 | This section describes how you can export in "bulk" changes that have not |
| 487 | used. | 531 | been separated or divided. |
| 488 | </para> | 532 | This situation works well when you are simply storing patches outside of the kernel |
| 489 | <para> | 533 | source repository, either permanently or temporarily, and you are not committing |
| 490 | Note the "bulk" in this discussion, these techniques are not appropriate for | 534 | incremental changes during development. |
| 491 | full integration of upstream submission, since they do not properly divide | 535 | </para> |
| 492 | changes or provide an avenue for per-change commit messages. This example | 536 | |
| 493 | assumes that changes have not been committed incrementally during development | 537 | <note><para> |
| 494 | and simply must be gathered and exported. | 538 | This technique is not appropriate for full integration of upstream submission |
| 495 | <literallayout class='monospaced'> | 539 | because changes are not properly divided and do not provide an avenue for per-change |
| 540 | commit messages. | ||
| 541 | Therefore, this example assumes that changes have not been committed incrementally | ||
| 542 | during development and that you simply must gather and export them. | ||
| 543 | </para></note> | ||
| 544 | |||
| 545 | <literallayout class='monospaced'> | ||
| 496 | # bulk export of ALL modifications without separation or division | 546 | # bulk export of ALL modifications without separation or division |
| 497 | # of the changes | 547 | # of the changes |
| 498 | 548 | ||
| @@ -500,32 +550,39 @@ and simply must be gathered and exported. | |||
| 500 | > git commit -s -a -m >commit message< | 550 | > git commit -s -a -m >commit message< |
| 501 | or | 551 | or |
| 502 | > git commit -s -a # and interact with $EDITOR | 552 | > git commit -s -a # and interact with $EDITOR |
| 503 | </literallayout> | 553 | </literallayout> |
| 504 | </para> | 554 | |
| 505 | <para> | 555 | <para> |
| 506 | These operations have captured all the local changes in the project source | 556 | The previous operations capture all the local changes in the project source |
| 507 | tree in a single git commit, and that commit is also stored in the project's | 557 | tree in a single git commit. |
| 508 | source tree. | 558 | And, that commit is also stored in the project's source tree. |
| 509 | </para> | 559 | </para> |
| 510 | <para> | 560 | |
| 511 | Once exported, those changes can then be restored manually, via a template or | 561 | <para> |
| 512 | through integration with the default_kernel. Those topics are covered in | 562 | Once the changes are exported, you can restore them manually using a template |
| 513 | future sections. | 563 | or through integration with the <filename>default_kernel</filename>. |
| 514 | </para> | 564 | </para> |
| 565 | |||
| 515 | </section> | 566 | </section> |
| 516 | 567 | ||
| 517 | <section id='incremental-planned-sharing'> | 568 | <section id='incremental-planned-sharing'> |
| 518 | <title>Incremental/Planned Sharing</title> | 569 | <title>Incremental/Planned Sharing</title> |
| 519 | <para> | 570 | |
| 520 | Note: unlike the previous "bulk" section, the following examples assume that | 571 | <para> |
| 521 | changes have been incrementally committed to the tree during development and | 572 | This section describes how to save modifications when you are making incremental |
| 522 | now are being exported. | 573 | commits or practicing planned sharing. |
| 523 | </para> | 574 | The examples in this section assume that changes have been incrementally committed |
| 524 | <para> | 575 | to the tree during development and now need to be exported. The sections that follow |
| 525 | During development the following commands will be of interest, but for full | 576 | describe how you can export your changes internally through either patches or by |
| 526 | git documentation refer to the git man pages or an online resource such as | 577 | using git commands. |
| 527 | http://github.com | 578 | </para> |
| 528 | <literallayout class='monospaced'> | 579 | |
| 580 | <para> | ||
| 581 | During development the following commands are of interest. | ||
| 582 | For full git documentation, refer to the git man pages or to an online resource such | ||
| 583 | as <ulink url='http://github.com'></ulink>. | ||
| 584 | |||
| 585 | <literallayout class='monospaced'> | ||
| 529 | # edit a file | 586 | # edit a file |
| 530 | > vi >path</file | 587 | > vi >path</file |
| 531 | # stage the change | 588 | # stage the change |
| @@ -538,129 +595,169 @@ http://github.com | |||
| 538 | > git commit -s | 595 | > git commit -s |
| 539 | 596 | ||
| 540 | ... etc. | 597 | ... etc. |
| 541 | </literallayout> | 598 | </literallayout> |
| 542 | </para> | 599 | </para> |
| 543 | <para> | 600 | |
| 544 | Distributed development with git is possible by having a universally agreed | 601 | <para> |
| 545 | upon unique commit identifier (set by the creator of the commit) mapping to a | 602 | Distributed development with git is possible when you use a universally |
| 546 | specific changeset with a specific parent. This ID is created for you when | 603 | agreed-upon unique commit identifier (set by the creator of the commit) that maps to a |
| 547 | you create a commit, and will be re-created when you amend/alter or re-apply | 604 | specific changeset with a specific parent. |
| 548 | a commit. As an individual in isolation, this is of no interest, but if you | 605 | This identifier is created for you when |
| 549 | intend to share your tree with normal git push/pull operations for | 606 | you create a commit, and is re-created when you amend, alter or re-apply |
| 550 | distributed development, you should consider the ramifications of changing a | 607 | a commit. |
| 551 | commit that you've already shared with others. | 608 | As an individual in isolation, this is of no interest. |
| 552 | </para> | 609 | However, if you |
| 553 | <para> | 610 | intend to share your tree with normal git push and pull operations for |
| 554 | Assuming that the changes have *not* been pushed upstream, or pulled into | 611 | distributed development, you should consider the ramifications of changing a |
| 555 | another repository, both the commit content and commit messages associated | 612 | commit that you have already shared with others. |
| 556 | with development can be update via: | 613 | </para> |
| 557 | <literallayout class='monospaced'> | 614 | |
| 615 | <para> | ||
| 616 | Assuming that the changes have not been pushed upstream, or pulled into | ||
| 617 | another repository, you can update both the commit content and commit messages | ||
| 618 | associated with development by using the following commands: | ||
| 619 | |||
| 620 | <literallayout class='monospaced'> | ||
| 558 | > git add >path</file | 621 | > git add >path</file |
| 559 | > git commit ‐‐amend | 622 | > git commit --amend |
| 560 | > git rebase or git rebase -i | 623 | > git rebase or git rebase -i |
| 561 | </literallayout> | 624 | </literallayout> |
| 562 | </para> | 625 | </para> |
| 563 | <para> | 626 | |
| 564 | Again, assuming that the changes have *not* been pushed upstream, and that | 627 | <para> |
| 565 | there are no pending works in progress (use "git status" to check) then | 628 | Again, assuming that the changes have not been pushed upstream, and that |
| 566 | commits can be reverted (undone) via: | 629 | no pending works-in-progress exist (use "git status" to check) then |
| 567 | <literallayout class='monospaced'> | 630 | you can revert (undo) commits by using the following commands: |
| 631 | |||
| 632 | <literallayout class='monospaced'> | ||
| 568 | # remove the commit, update working tree and remove all | 633 | # remove the commit, update working tree and remove all |
| 569 | # traces of the change | 634 | # traces of the change |
| 570 | > git reset ‐‐hard HEAD^ | 635 | > git reset --hard HEAD^ |
| 571 | # remove the commit, but leave the files changed and staged for re-commit | 636 | # remove the commit, but leave the files changed and staged for re-commit |
| 572 | > git reset ‐‐soft HEAD^ | 637 | > git reset --soft HEAD^ |
| 573 | # remove the commit, leave file change, but not staged for commit | 638 | # remove the commit, leave file change, but not staged for commit |
| 574 | > git reset ‐‐mixed HEAD^ | 639 | > git reset --mixed HEAD^ |
| 575 | </literallayout> | 640 | </literallayout> |
| 576 | </para> | 641 | </para> |
| 577 | <para> | 642 | |
| 578 | Branches can be created, changes cherry-picked or any number of git | 643 | <para> |
| 579 | operations performed until the commits are in good order for pushing upstream | 644 | You can create branches, "cherry-pick" changes or perform any number of git |
| 580 | or pull requests. After a push or pull, commits are normally considered | 645 | operations until the commits are in good order for pushing upstream |
| 581 | 'permanent' and should not be modified, only incrementally changed in new | 646 | or for pull requests. |
| 582 | commits. This is standard "git" workflow and Yocto Project recommends the | 647 | After a push or pull, commits are normally considered |
| 583 | kernel.org best practices. | 648 | "permanent" and you should not modify them. |
| 584 | </para> | 649 | If they need to be changed you can incrementally do so with new commits. |
| 585 | <note><para>It is recommend to tag or branch before adding changes to a Yocto Project | 650 | These practices follow the standard "git" workflow and the kernel.org best |
| 586 | BSP (or creating a new one), since the branch or tag provides a | 651 | practices, which Yocto Project recommends. |
| 587 | reference point to facilitate locating and exporting local changes. | 652 | </para> |
| 588 | </para></note> | 653 | |
| 654 | <note><para> | ||
| 655 | It is recommend to tag or branch before adding changes to a Yocto Project | ||
| 656 | BSP or before creating a new one. | ||
| 657 | The reason for this recommendation is because the branch or tag provides a | ||
| 658 | reference point to facilitate locating and exporting local changes. | ||
| 659 | </para></note> | ||
| 589 | 660 | ||
| 590 | <section id='export-internally-via-patches'> | 661 | <section id='export-internally-via-patches'> |
| 591 | <title>Export Internally Via Patches</title> | 662 | <title>Exporting Changes Internally by Using Patches</title> |
| 592 | <para> | 663 | |
| 593 | Committed changes can be extracted from a working directory by exporting them | 664 | <para> |
| 594 | as patches. Those patches can be used for upstream submission, placed in a | 665 | This section describes how you can extract committed changes from a working directory |
| 595 | Yocto Project template for automatic kernel patching or many other common uses. | 666 | by exporting them as patches. |
| 596 | 667 | Once extracted, you can use the patches for upstream submission, | |
| 597 | <literallayout class='monospaced'> | 668 | place them in a Yocto Project template for automatic kernel patching, |
| 598 | # >first commit> can be a tag if one was created before development | 669 | or apply them in many other common uses. |
| 670 | </para> | ||
| 671 | |||
| 672 | <para> | ||
| 673 | This example shows how to create a directory with sequentially numbered patches. | ||
| 674 | Once the directory is created, you can apply it to a repository using the | ||
| 675 | <filename>git am</filename> command to reproduce the original commit and all | ||
| 676 | the related information such as author, date, commit log, and so forth. | ||
| 677 | </para> | ||
| 678 | |||
| 679 | <note><para> | ||
| 680 | The new commit identifiers (ID) will be generated upon re-application. | ||
| 681 | This action reflects that the commit is now applied to an underlying commit | ||
| 682 | with a different ID. | ||
| 683 | </para></note> | ||
| 684 | |||
| 685 | <para> | ||
| 686 | <literallayout class='monospaced'> | ||
| 687 | # <first-commit> can be a tag if one was created before development | ||
| 599 | # began. It can also be the parent branch if a branch was created | 688 | # began. It can also be the parent branch if a branch was created |
| 600 | # before development began. | 689 | # before development began. |
| 601 | 690 | ||
| 602 | > git format-patch -o <dir> <first commit>..<last commit> | 691 | > git format-patch -o <dir> <first commit>..<last commit> |
| 603 | </literallayout> | 692 | </literallayout> |
| 604 | </para> | 693 | </para> |
| 605 | 694 | ||
| 606 | <para> | 695 | <para> |
| 607 | In other words: | 696 | In other words: |
| 608 | <literallayout class='monospaced'> | 697 | <literallayout class='monospaced'> |
| 609 | # identify commits of interest. | 698 | # Identify commits of interest. |
| 610 | 699 | ||
| 611 | # if the tree was tagged before development | 700 | # If the tree was tagged before development |
| 612 | > git format-patch -o <save dir> <tag> | 701 | > git format-patch -o <save dir> <tag> |
| 613 | 702 | ||
| 614 | # if no tags are available | 703 | # If no tags are available |
| 615 | > git format-patch -o <save dir> HEAD^ # last commit | 704 | > git format-patch -o <save dir> HEAD^ # last commit |
| 616 | > git format-patch -o <save dir> HEAD^^ # last 2 commits | 705 | > git format-patch -o <save dir> HEAD^^ # last 2 commits |
| 617 | > git whatchanged # identify last commit | 706 | > git whatchanged # identify last commit |
| 618 | > git format-patch -o <save dir> <commit id> | 707 | > git format-patch -o <save dir> <commit id> |
| 619 | > git format-patch -o <save dir> <rev-list> | 708 | > git format-patch -o <save dir> <rev-list> |
| 620 | </literallayout> | 709 | </literallayout> |
| 621 | </para> | 710 | </para> |
| 622 | 711 | ||
| 623 | <para> | 712 | <!--<para> |
| 624 | The result is a directory with sequentially numbered patches, that when | 713 | See the "template patching" example for how to use the patches to |
| 625 | applied to a repository using "git am", will reproduce the original commit | 714 | automatically apply to a new kernel build. |
| 626 | and all related information (author, date, commit log, etc) will be | 715 | </para>--> |
| 627 | preserved. Note that new commit IDs will be generated upon reapplication, | 716 | </section> |
| 628 | reflecting that the commit is now applied to an underlying commit with a | ||
| 629 | different ID. | ||
| 630 | </para> | ||
| 631 | <!--<para> | ||
| 632 | See the "template patching" example for how to use the patches to | ||
| 633 | automatically apply to a new kernel build. | ||
| 634 | </para> --> | ||
| 635 | </section> | ||
| 636 | 717 | ||
| 637 | <section id='export-internally-via-git'> | 718 | <section id='export-internally-via-git'> |
| 638 | <title>Export Internally Via git</title> | 719 | <title>Exporting Changes Internally by Using git</title> |
| 639 | <para> | 720 | |
| 640 | Committed changes can also be exported from a working directory by pushing | 721 | <para> |
| 641 | (or by making a pull request) the changes into a master repository. Those | 722 | This section describes how you can export changes from a working directory |
| 642 | same change can then be pulled into a new kernel build at a later time using this command form: | 723 | by pushing the changes into a master repository or by making a pull request. |
| 643 | <literallayout class='monospaced'> | 724 | Once you have pushed the changes in the master repository you can then |
| 725 | pull those same changes into a new kernel build at a later time. | ||
| 726 | </para> | ||
| 727 | |||
| 728 | <para> | ||
| 729 | Use this command form to push the changes: | ||
| 730 | <literallayout class='monospaced'> | ||
| 644 | git push ssh://<master server>/<path to repo> <local branch>:<remote branch> | 731 | git push ssh://<master server>/<path to repo> <local branch>:<remote branch> |
| 645 | </literallayout> | 732 | </literallayout> |
| 646 | For example: | 733 | </para> |
| 647 | <literallayout class='monospaced'> | 734 | |
| 735 | <para> | ||
| 736 | For example, the following command pushes the changes from your local branch | ||
| 737 | <filename>common_pc-standard</filename> to the remote branch with the same name | ||
| 738 | in the master repository <filename>//git.mycompany.com/pub/git/kernel-2.6.27</filename>. | ||
| 739 | <literallayout class='monospaced'> | ||
| 648 | > push ssh://git.mycompany.com/pub/git/kernel-2.6.27 common_pc-standard:common_pc-standard | 740 | > push ssh://git.mycompany.com/pub/git/kernel-2.6.27 common_pc-standard:common_pc-standard |
| 649 | </literallayout> | 741 | </literallayout> |
| 650 | A pull request entails using "git request-pull" to compose an email to the | 742 | </para> |
| 651 | maintainer requesting that a branch be pulled into the master repository, see | 743 | |
| 652 | http://github.com/guides/pull-requests for an example. | 744 | <para> |
| 653 | </para> | 745 | A pull request entails using "git request-pull" to compose an email to the |
| 654 | <para> | 746 | maintainer requesting that a branch be pulled into the master repository, see |
| 655 | Other commands such as 'git stash' or branching can also be used to save | 747 | <ulink url='http://github.com/guides/pull-requests'></ulink> for an example. |
| 656 | changes, but are not covered in this document. | 748 | </para> |
| 657 | </para> | 749 | |
| 658 | <para> | 750 | <note><para> |
| 659 | See the section "importing from another SCM" for how a git push to the | 751 | Other commands such as 'git stash' or branching can also be used to save |
| 660 | default_kernel, can be used to automatically update the builds of all users | 752 | changes, but are not covered in this document. |
| 661 | of a central git repository. | 753 | </para></note> |
| 662 | </para> | 754 | |
| 663 | </section> | 755 | <!--<para> |
| 756 | See the section "importing from another SCM" for how a git push to the | ||
| 757 | default_kernel, can be used to automatically update the builds of all users | ||
| 758 | of a central git repository. | ||
| 759 | </para>--> | ||
| 760 | </section> | ||
| 664 | </section> | 761 | </section> |
| 665 | 762 | ||
| 666 | <section id='export-for-external-upstream-submission'> | 763 | <section id='export-for-external-upstream-submission'> |
| @@ -699,10 +796,10 @@ induced patch damage. | |||
| 699 | An example of dumping patches for external submission follows: | 796 | An example of dumping patches for external submission follows: |
| 700 | <literallayout class='monospaced'> | 797 | <literallayout class='monospaced'> |
| 701 | # dump the last 4 commits | 798 | # dump the last 4 commits |
| 702 | > git format-patch ‐‐thread -n -o ~/rr/ HEAD^^^^ | 799 | > git format-patch --thread -n -o ~/rr/ HEAD^^^^ |
| 703 | > git send-email ‐‐compose ‐‐subject '[RFC 0/N] <patch series summary>' \ | 800 | > git send-email --compose --subject '[RFC 0/N] <patch series summary>' \ |
| 704 | ‐‐to foo@yoctoproject.org ‐‐to bar@yoctoproject.org \ | 801 | --to foo@yoctoproject.org --to bar@yoctoproject.org \ |
| 705 | ‐‐cc list@yoctoproject.org ~/rr | 802 | --cc list@yoctoproject.org ~/rr |
| 706 | # the editor is invoked for the 0/N patch, and when complete the entire | 803 | # the editor is invoked for the 0/N patch, and when complete the entire |
| 707 | # series is sent via email for review | 804 | # series is sent via email for review |
| 708 | </literallayout> | 805 | </literallayout> |
| @@ -934,7 +1031,7 @@ That's it. Configure and build. | |||
| 934 | So first create a bare clone of the Yocto Project git repository, and then create a | 1031 | So first create a bare clone of the Yocto Project git repository, and then create a |
| 935 | local clone of that: | 1032 | local clone of that: |
| 936 | <literallayout class='monospaced'> | 1033 | <literallayout class='monospaced'> |
| 937 | $ git clone ‐‐bare git://git.pokylinux.org/linux-2.6-windriver.git | 1034 | $ git clone --bare git://git.pokylinux.org/linux-2.6-windriver.git |
| 938 | linux-2.6-windriver.git | 1035 | linux-2.6-windriver.git |
| 939 | $ git clone linux-2.6-windriver.git linux-2.6-windriver | 1036 | $ git clone linux-2.6-windriver.git linux-2.6-windriver |
| 940 | </literallayout> | 1037 | </literallayout> |
