diff options
| -rw-r--r-- | documentation/dev-manual/dev-manual-newbie.xml | 461 |
1 files changed, 255 insertions, 206 deletions
diff --git a/documentation/dev-manual/dev-manual-newbie.xml b/documentation/dev-manual/dev-manual-newbie.xml index c3df1c2958..fd8ff08949 100644 --- a/documentation/dev-manual/dev-manual-newbie.xml +++ b/documentation/dev-manual/dev-manual-newbie.xml | |||
| @@ -7,12 +7,12 @@ | |||
| 7 | 7 | ||
| 8 | <para> | 8 | <para> |
| 9 | This chapter helps you understand the Yocto Project as an open source development project. | 9 | This chapter helps you understand the Yocto Project as an open source development project. |
| 10 | In general, working in an open-source environment is very different than working in a | 10 | In general, working in an open source environment is very different as compared to working in a |
| 11 | proprietary environment. | 11 | proprietary environment. |
| 12 | Additionally, the Yocto Project uses specific tools and constructs as part of its development | 12 | Additionally, the Yocto Project uses specific tools and constructs as part of its development |
| 13 | environment. | 13 | environment. |
| 14 | The chapter specifically addresses open source philosophy, licensing issues, code repositories, | 14 | The chapter specifically addresses open source philosophy, licensing issues, code repositories, |
| 15 | the open source distributed version control system Git, and best practices using Yocto Project. | 15 | the open source distributed version control system Git, and best practices using the Yocto Project. |
| 16 | </para> | 16 | </para> |
| 17 | 17 | ||
| 18 | <section id='open-source-philosophy'> | 18 | <section id='open-source-philosophy'> |
| @@ -33,23 +33,21 @@ | |||
| 33 | stake in the software project. | 33 | stake in the software project. |
| 34 | The open source environment contains new copyright, licensing, domain, and consumer issues | 34 | The open source environment contains new copyright, licensing, domain, and consumer issues |
| 35 | that differ from the more traditional development environment. | 35 | that differ from the more traditional development environment. |
| 36 | In an open source environment the end-product, source material, and documentation are | 36 | In an open source environment, the end-product, source material, and documentation are |
| 37 | all available to the public at no cost. | 37 | all available to the public at no cost. |
| 38 | </para> | 38 | </para> |
| 39 | 39 | ||
| 40 | <para> | 40 | <para> |
| 41 | A benchmark example of an open source project is the Linux Kernel, which was initially conceived | 41 | A benchmark example of an open source project is the Linux Kernel, which was initially conceived |
| 42 | and created by Finnish computer science student Linus Torvalds in 1991. | 42 | and created by Finnish computer science student Linus Torvalds in 1991. |
| 43 | Conversely, a good example of a non-open source project is the Windows family of operating | 43 | Conversely, a good example of a non-open source project is the |
| 44 | systems developed by Microsoft Corporation. | 44 | <trademark class='registered'>Windows</trademark> family of operating |
| 45 | systems developed by <trademark class='registered'>Microsoft</trademark> Corporation. | ||
| 45 | </para> | 46 | </para> |
| 46 | 47 | ||
| 47 | <para> | 48 | <para> |
| 48 | Wikipedia has a good historical description of the Open Source Philosophy | 49 | Wikipedia has a good historical description of the Open Source Philosophy |
| 49 | <ulink url='http://en.wikipedia.org/wiki/Open_source'>here</ulink>. | 50 | <ulink url='http://en.wikipedia.org/wiki/Open_source'>here</ulink>. |
| 50 | </para> | ||
| 51 | |||
| 52 | <para> | ||
| 53 | You can also find helpful information on how to participate in the Linux Community | 51 | You can also find helpful information on how to participate in the Linux Community |
| 54 | <ulink url='http://ldn.linuxfoundation.org/book/how-participate-linux-community'>here</ulink>. | 52 | <ulink url='http://ldn.linuxfoundation.org/book/how-participate-linux-community'>here</ulink>. |
| 55 | </para> | 53 | </para> |
| @@ -66,21 +64,21 @@ | |||
| 66 | From the interface, you can click on any particular item in the "Name" column and | 64 | From the interface, you can click on any particular item in the "Name" column and |
| 67 | see the URL at the bottom of the page that you need to set up a Git repository for | 65 | see the URL at the bottom of the page that you need to set up a Git repository for |
| 68 | that particular item. | 66 | that particular item. |
| 69 | The ability to create Git repositories of the Yocto Project source allows you to | 67 | Having a local Git repository of the Yocto Project files allows you to |
| 70 | make changes, contribute to the history, and ultimately enhance the Yocto Project's | 68 | make changes, contribute to the history, and ultimately enhance the Yocto Project's |
| 71 | tools, Board Support Packages, and so forth. | 69 | tools, Board Support Packages, and so forth. |
| 72 | </para> | 70 | </para> |
| 73 | 71 | ||
| 74 | <para> | 72 | <para> |
| 75 | Conversely, if you are a developer that is not interested in contributing back to the | 73 | Conversely, if you are a developer that is not interested in contributing back to the |
| 76 | Yocto Project you have the ability to simply download and extract release tarballs | 74 | Yocto Project, you have the ability to simply download and extract release tarballs |
| 77 | and use them within the Yocto Project environment. | 75 | and use them within the Yocto Project environment. |
| 78 | All that is required is a particular release of Yocto Project, a kernel, and | 76 | All that is required is a particular release of Yocto Project, a kernel, and |
| 79 | your application source code. | 77 | your application source code. |
| 80 | </para> | 78 | </para> |
| 81 | 79 | ||
| 82 | <para> | 80 | <para> |
| 83 | For any supported release of Yocto Project you can go to the Yocto Project website’s | 81 | For any supported release of Yocto Project, you can go to the Yocto Project website’s |
| 84 | <ulink url='http://www.yoctoproject.org/download'>download page</ulink> and get a | 82 | <ulink url='http://www.yoctoproject.org/download'>download page</ulink> and get a |
| 85 | tarball of the release. | 83 | tarball of the release. |
| 86 | You can also go to this site to download any supported BSP tarballs. | 84 | You can also go to this site to download any supported BSP tarballs. |
| @@ -104,8 +102,9 @@ | |||
| 104 | <imagedata fileref="figures/source-repos.png" align="center" width="6in" depth="4in" /> | 102 | <imagedata fileref="figures/source-repos.png" align="center" width="6in" depth="4in" /> |
| 105 | </para></listitem> | 103 | </para></listitem> |
| 106 | <listitem><para><anchor id='index-downloads' /><emphasis><ulink url='http://autobuilder.yoctoproject.org/downloads/'>Index of /downloads:</ulink></emphasis> | 104 | <listitem><para><anchor id='index-downloads' /><emphasis><ulink url='http://autobuilder.yoctoproject.org/downloads/'>Index of /downloads:</ulink></emphasis> |
| 107 | This area contains an index of the Eclipse-plugin, miscellaneous support, poky, pseudo, and | 105 | This area contains an index of downloads such as |
| 108 | all released versions of Yocto Project in the form of images or tarballs. | 106 | the Eclipse Yocto Plug-in, miscellaneous support, Poky, pseudo, cross-development toolchains, |
| 107 | and all released versions of Yocto Project in the form of images or tarballs. | ||
| 109 | Downloading and extracting these files does not produce a Git repository but rather | 108 | Downloading and extracting these files does not produce a Git repository but rather |
| 110 | a snapshot of a particular release or image. | 109 | a snapshot of a particular release or image. |
| 111 | [WRITER NOTE: link will be http://downloads.yoctoproject.org.]</para> | 110 | [WRITER NOTE: link will be http://downloads.yoctoproject.org.]</para> |
| @@ -130,12 +129,87 @@ | |||
| 130 | <para> | 129 | <para> |
| 131 | Following is a list of terms and definitions users new to the Yocto Project development | 130 | Following is a list of terms and definitions users new to the Yocto Project development |
| 132 | environment might find helpful. | 131 | environment might find helpful. |
| 133 | Some terms are universal but are included here just in case: | 132 | While some of these terms are universal, the list includes them just in case: |
| 134 | <itemizedlist> | 133 | <itemizedlist> |
| 135 | <listitem><para><emphasis>The Yocto Project Files:</emphasis> | 134 | <listitem><para><emphasis>Append Files:</emphasis> Files that append build information to |
| 135 | a recipe file. | ||
| 136 | Information in append files override the information in the similarly-named recipe file. | ||
| 137 | Append files use the <filename>.bbappend</filename> filename suffix.</para></listitem> | ||
| 138 | <listitem><para><emphasis>BitBake:</emphasis> The task executor and scheduler used by | ||
| 139 | the Yocto Project to build images. | ||
| 140 | For more information on BitBake, see the <ulink url='http://bitbake.berlios.de/manual/'> | ||
| 141 | BitBake documentation</ulink>.</para></listitem> | ||
| 142 | <listitem><para><emphasis>Classes:</emphasis> Files that provide for logic encapsulation | ||
| 143 | and inheritance allowing commonly used patterns to be defined once and easily used | ||
| 144 | in multiple recipes. | ||
| 145 | Class files end with the <filename>.bbclass</filename> filename extension.</para></listitem> | ||
| 146 | <listitem><para><emphasis>Configuration File:</emphasis> Configuration information in the | ||
| 147 | <filename>.conf</filename> files provides global definitions of variables. | ||
| 148 | The <filename>conf/local.conf</filename> configuration file in the Yocto Project | ||
| 149 | build directory defines user-defined variables that affect each build. | ||
| 150 | The <filename>distro/poky.conf</filename> configuration file also in the | ||
| 151 | build directory defines Yocto ‘distro’ configuration | ||
| 152 | variables used only when building with this policy. | ||
| 153 | Machine configuration files, which | ||
| 154 | are located throughout the Yocto Project file structure, define | ||
| 155 | variables for specific hardware and are only used when building for that target | ||
| 156 | (e.g. the <filename>machine/beagleboard.conf</filename> configuration file defines | ||
| 157 | variables for the Texas Instruments ARM Cortex-A8 development board). | ||
| 158 | Configuration files end with a <filename>.conf</filename> filename extension.</para></listitem> | ||
| 159 | <listitem><para><emphasis>Cross-Development Toolchain:</emphasis> A collection of software development | ||
| 160 | tools and utilities that allow you to develop software for targeted architectures. | ||
| 161 | This toolchain contains cross-compilers, linkers, and debuggers that are specific to | ||
| 162 | an architecure. | ||
| 163 | You can use the Yocto Project to build cross-development toolchains in tarball form that when | ||
| 164 | unpacked contain the development tools you need to cross-compile and test your software. | ||
| 165 | The Yocto Project ships with images that contain toolchains for supported architectures | ||
| 166 | as well. | ||
| 167 | Sometimes this toolchain is referred to as the meta-toolchain.</para></listitem> | ||
| 168 | <listitem><para><emphasis>Image:</emphasis> An image is the result produced when | ||
| 169 | BitBake processes a given collection of recipes and related metadata. | ||
| 170 | Images are the binary output that runs on specific hardware and for specific | ||
| 171 | use cases. | ||
| 172 | For a list of the supported image types that the Yocto Project provides, see the | ||
| 173 | "<ulink url='http://www.yoctoproject.org/docs/1.1/poky-ref-manual/poky-ref-manual.html#ref-images'>Reference: Images</ulink>" | ||
| 174 | appendix in | ||
| 175 | <ulink url='http://www.yoctoproject.org/docs/1.1/poky-ref-manual/poky-ref-manual.html'> | ||
| 176 | The Yocto Project Reference Manual</ulink>.</para></listitem> | ||
| 177 | <listitem><para><emphasis>Layer:</emphasis> A collection of recipes representing the core, | ||
| 178 | a BSP, or an application stack.</para></listitem> | ||
| 179 | <listitem><para><emphasis>Metadata:</emphasis> The files that BitBake parses when building an image. | ||
| 180 | Metadata includes recipes, classes, and configuration files.</para></listitem> | ||
| 181 | <listitem><para><emphasis>OE-Core:</emphasis> A core set of metadata originating | ||
| 182 | with OpenEmbedded (OE) that is shared between OE and the Yocto Project. | ||
| 183 | This metadata is found in the <filename>meta</filename> directory of the Yocto Project | ||
| 184 | files.</para></listitem> | ||
| 185 | <listitem><para><emphasis>Package:</emphasis> The packaged output from a baked recipe. | ||
| 186 | A package is generally the compiled binaries produced from the recipe's sources. | ||
| 187 | You ‘bake’ something by running it through BitBake.</para></listitem> | ||
| 188 | <listitem><para><emphasis>Poky:</emphasis> The build tool that the Yocto Project | ||
| 189 | uses to create images.</para></listitem> | ||
| 190 | <listitem><para><emphasis>Recipe:</emphasis> A set of instructions for building packages. | ||
| 191 | A recipe describes where you get source code and which patches to apply. | ||
| 192 | Recipes describe dependencies for libraries or for other recipes, and they | ||
| 193 | also contain configuration and compilation options. | ||
| 194 | Recipes contain the logical unit of execution, the software/images to build, and | ||
| 195 | use the <filename>.bb</filename> file extension.</para></listitem> | ||
| 196 | <listitem><para><emphasis>Tasks:</emphasis> Arbitrary groups of software Recipes. | ||
| 197 | You simply use Tasks to hold recipes that, when built, usually accomplish a single task. | ||
| 198 | For example, a task could contain the recipes for a company’s proprietary or value-add software. | ||
| 199 | Or, the task could contain the recipes that enable graphics. | ||
| 200 | A task is really just another recipe. | ||
| 201 | Because task files are recipes, they end with the <filename>.bb</filename> filename | ||
| 202 | extension.</para></listitem> | ||
| 203 | <listitem><para><emphasis>Upstream:</emphasis> A reference to source code or repositories | ||
| 204 | that are not local to the development system but located in a master area that is controlled | ||
| 205 | by the maintainer of the source code. | ||
| 206 | For example, in order for a developer to work on a particular piece of code, they need to | ||
| 207 | first get a copy of it from an "upstream" source.</para></listitem> | ||
| 208 | <listitem><para><emphasis>Yocto Project Files:</emphasis> | ||
| 136 | This term refers to the directory structure created as a result of downloading | 209 | This term refers to the directory structure created as a result of downloading |
| 137 | and unpacking a Yocto Project release tarball or setting up a Git repository | 210 | and unpacking a Yocto Project release tarball or setting up a Git repository |
| 138 | by cloning <filename>git://git.yoctoproject.org/poky</filename>.</para> | 211 | by cloning <filename>git://git.yoctoproject.org/poky</filename>. |
| 212 | Sometimes the term "the Yocto Project Files structure" is used as well.</para> | ||
| 139 | <para>The Yocto Project files contain BitBake, Documentation, metadata and | 213 | <para>The Yocto Project files contain BitBake, Documentation, metadata and |
| 140 | other files that all support the development environment. | 214 | other files that all support the development environment. |
| 141 | Consequently, you must have the Yocto Project files in place on your development | 215 | Consequently, you must have the Yocto Project files in place on your development |
| @@ -143,102 +217,31 @@ | |||
| 143 | <para>The name of the top-level directory of the Yocto Project file structure | 217 | <para>The name of the top-level directory of the Yocto Project file structure |
| 144 | is derived from the Yocto Project release tarball. | 218 | is derived from the Yocto Project release tarball. |
| 145 | For example, downloading and unpacking <filename>poky-edison-6.0.tar.bz2</filename> | 219 | For example, downloading and unpacking <filename>poky-edison-6.0.tar.bz2</filename> |
| 146 | results in a Yocto Project source tree whose Yocto Project source directory is named | 220 | results in a Yocto Project file structure whose Yocto Project source directory is named |
| 147 | <filename>poky-edison-6.0</filename>. | 221 | <filename>poky-edison-6.0</filename>. |
| 148 | If you create a Git repository, then you can name the repository anything you like.</para> | 222 | If you create a Git repository, then you can name the repository anything you like.</para> |
| 149 | <para>You can find instruction on how to set up the Yocto Project files on your | 223 | <para>You can find instruction on how to set up the Yocto Project files on your |
| 150 | host development system by reading | 224 | host development system by reading |
| 151 | the | 225 | the |
| 152 | "<ulink url='http://www.yoctoproject.org/docs/1.1/dev-manual/dev-manual.html#getting-setup'>Getting | 226 | "<ulink url='http://www.yoctoproject.org/docs/1.1/dev-manual/dev-manual.html#getting-setup'>Getting |
| 153 | Setup</ulink>" section in | 227 | Setup</ulink>" section.</para></listitem> |
| 154 | <ulink url='http://www.yoctoproject.org/docs/1.1/dev-manual/dev-manual.html'> | 228 | <listitem><para><emphasis>Yocto Project Build Directory:</emphasis> |
| 155 | The Yocto Project Development Manual</ulink>.</para></listitem> | 229 | This term refers to the area used by the Yocto Project for builds. |
| 156 | <listitem><para><emphasis>Yocto Project Build Tree:</emphasis> | ||
| 157 | This term refers to the area where the Yocto Project builds images. | ||
| 158 | The area is created when you <filename>source</filename> the Yocto Project setup | 230 | The area is created when you <filename>source</filename> the Yocto Project setup |
| 159 | environment script that is found in the Yocto Project files area. | 231 | environment script that is found in the Yocto Project files area. |
| 160 | (e.g. <filename>oe-init-build-env</filename>). | 232 | (e.g. <filename>oe-init-build-env</filename>). |
| 161 | You can create the Yocto Project build tree anywhere you want on your | 233 | You can create the Yocto Project build directory anywhere you want on your |
| 162 | development system. | 234 | development system. |
| 163 | Here is an example that creates the tree in <filename>mybuilds</filename> | 235 | Here is an example that creates the directory in <filename>mybuilds</filename> |
| 164 | and names the Yocto Project build directory <filename>YP-6.0</filename>: | 236 | and names the Yocto Project build directory <filename>YP-6.0</filename>: |
| 165 | <literallayout class='monospaced'> | 237 | <literallayout class='monospaced'> |
| 166 | $ source poky-edison-6.0/oe-init-build-env $HOME/mybuilds/YP-6.0 | 238 | $ source poky-edison-6.0/oe-init-build-env $HOME/mybuilds/YP-6.0 |
| 167 | </literallayout> | 239 | </literallayout> |
| 168 | If you don't specifically name the build directory, BitBake creates it | 240 | If you don't specifically name the directory, BitBake creates it |
| 169 | in the current directory and uses the name <filename>build</filename>. | 241 | in the current directory and uses the name <filename>build</filename>. |
| 170 | Also, if you supply an existing directory, then BitBake uses that | 242 | Also, if you supply an existing directory, then BitBake uses that |
| 171 | directory as the Yocto Project build directory and populates the build tree | 243 | directory as the Yocto Project build directory and populates the build hierarchy |
| 172 | beneath it.</para></listitem> | 244 | beneath it.</para></listitem> |
| 173 | <listitem><para><emphasis>Image</emphasis> - An image is the result produced when | ||
| 174 | BitBake processes a given collection of recipes and related metadata. | ||
| 175 | Images are the binary output that runs on specific hardware and for specific | ||
| 176 | use cases. | ||
| 177 | For a list of the supported image types that the Yocto Project provides, see the | ||
| 178 | <ulink url='http://www.yoctoproject.org/docs/1.1/poky-ref-manual/poky-ref-manual.html#ref-images'> | ||
| 179 | Reference: Images</ulink> appendix in | ||
| 180 | <ulink url='http://www.yoctoproject.org/docs/1.1/poky-ref-manual/poky-ref-manual.html'> | ||
| 181 | The Yocto Project Reference Manual</ulink>.</para></listitem> | ||
| 182 | <listitem><para><emphasis>Recipe</emphasis> - A set of instructions for building packages. | ||
| 183 | A recipe describes where you get source code and which patches to apply. | ||
| 184 | Recipes describe dependencies for libraries or for other recipes and they | ||
| 185 | also contain configuration and compilation options. | ||
| 186 | Recipes contain the logical unit of execution, the software/images to build, and | ||
| 187 | use the <filename>.bb</filename> file extension.</para></listitem> | ||
| 188 | <listitem><para><emphasis>BitBake</emphasis> - The task executor and scheduler used by Yocto Project | ||
| 189 | to build images. | ||
| 190 | For more information on BitBake, see the <ulink url='http://bitbake.berlios.de/manual/'> | ||
| 191 | BitBake documentation</ulink>.</para></listitem> | ||
| 192 | <listitem><para><emphasis>Package</emphasis> - The packaged output from a baked recipe. | ||
| 193 | A package is generally the compiled binaries produced from the recipe's sources. | ||
| 194 | You ‘bake’ something by running it through BitBake.</para></listitem> | ||
| 195 | <listitem><para><emphasis>Layer</emphasis> - A collection of recipes representing the core, | ||
| 196 | a BSP, or an application stack.</para></listitem> | ||
| 197 | <listitem><para><emphasis>Metadata</emphasis> - A term used throughout the Yocto Project | ||
| 198 | documentation that refers to the files that BitBake parses when building an image. | ||
| 199 | Metadata includes recipes, classes, and configuration files.</para></listitem> | ||
| 200 | <listitem><para><emphasis>Meta-Toolchain</emphasis> - A collection of software development | ||
| 201 | tools and utilities that allow you to develop software for targeted architectures. | ||
| 202 | These toolchains contain cross-compilers, linkers, and debuggers that are specific to | ||
| 203 | an architecure. | ||
| 204 | You can use the Yocto Project to build meta-toolchains in tarball form that when | ||
| 205 | unpacked contain the development tools you need to cross-compile and test your software. | ||
| 206 | The Yocto Project ships with images that contain toolchains for supported architectures | ||
| 207 | as well.</para></listitem> | ||
| 208 | <listitem><para><emphasis>Configuration File</emphasis>: Configuration information in the | ||
| 209 | <filename>.conf</filename> files provides global definitions of variables. | ||
| 210 | The <filename>build/conf/local.conf</filename> configuration file defines user-defined variables | ||
| 211 | that effect each build. | ||
| 212 | The <filename>distro/poky.conf</filename> configuration file defines Yocto ‘distro’ configuration | ||
| 213 | variables used only when building with this policy. | ||
| 214 | The <filename>machine/beagleboard.conf</filename> configuration file defines variables | ||
| 215 | for the Beagleboard and are only used when building for that target | ||
| 216 | (i.e. Texas Instruments ARM Cortex-A8 development board). | ||
| 217 | Configuration files end with a <filename>.conf</filename> filename extension.</para></listitem> | ||
| 218 | <listitem><para><emphasis>Classes</emphasis> - Files that provide for logic encapsulation | ||
| 219 | and inheritance allowing commonly used patterns to be defined once and easily used | ||
| 220 | in multiple recipes. | ||
| 221 | Class files end with the <filename>.bbclass</filename> filename extension.</para></listitem> | ||
| 222 | <listitem><para><emphasis>Append Files</emphasis> - Files that append build information to | ||
| 223 | a recipe file. | ||
| 224 | Information in append files override the information in the similarly-named recipe file. | ||
| 225 | Append files use the <filename>.bbappend</filename> filename suffix.</para></listitem> | ||
| 226 | <listitem><para><emphasis>Tasks</emphasis> - Arbitrary groups of software Recipes. | ||
| 227 | You simply use Tasks to hold recipes that when built usually accomplish a single task. | ||
| 228 | For example, a task could contain the recipes for a company’s proprietary or value-add software. | ||
| 229 | Or the task could contain the recipes that enable graphics. | ||
| 230 | A task is really just another recipe. | ||
| 231 | Because task files are recipes, they end with the <filename>.bb</filename> filename | ||
| 232 | extension.</para></listitem> | ||
| 233 | <listitem><para><emphasis>OE-Core</emphasis> - A core set of metadata originating | ||
| 234 | with OpenEmbedded (OE) that is shared between OE and the Yocto Project. | ||
| 235 | This metadata is found in the <filename>meta</filename> directory of the Yocto Project | ||
| 236 | files.</para></listitem> | ||
| 237 | <listitem><para><emphasis>Upstream</emphasis> - A reference to source code or repositories | ||
| 238 | that are not local to the development system but located in a master area that is controlled | ||
| 239 | by the maintainer of the source code. | ||
| 240 | For example, in order for a developer to work on a particular piece of code they need to | ||
| 241 | first get a copy of it from an "upstream" source.</para></listitem> | ||
| 242 | </itemizedlist> | 245 | </itemizedlist> |
| 243 | </para> | 246 | </para> |
| 244 | </section> | 247 | </section> |
| @@ -247,9 +250,9 @@ | |||
| 247 | <title>Licensing</title> | 250 | <title>Licensing</title> |
| 248 | 251 | ||
| 249 | <para> | 252 | <para> |
| 250 | Because open source projects are open to the public they have different licensing structures in place. | 253 | Because open source projects are open to the public, they have different licensing structures in place. |
| 251 | License evolution for both Open Source and Free Software has an interesting history. | 254 | License evolution for both Open Source and Free Software has an interesting history. |
| 252 | If you are interested in the history you can find basic information here: | 255 | If you are interested in this history, you can find basic information here: |
| 253 | <itemizedlist> | 256 | <itemizedlist> |
| 254 | <listitem><para><ulink url='http://en.wikipedia.org/wiki/Open-source_license'>Open source license history</ulink> | 257 | <listitem><para><ulink url='http://en.wikipedia.org/wiki/Open-source_license'>Open source license history</ulink> |
| 255 | </para></listitem> | 258 | </para></listitem> |
| @@ -275,13 +278,13 @@ | |||
| 275 | When you build an image using Yocto Project, the build process uses a known list of licenses to | 278 | When you build an image using Yocto Project, the build process uses a known list of licenses to |
| 276 | ensure compliance. | 279 | ensure compliance. |
| 277 | Once the build completes, the list of all licenses found and used during the build are | 280 | Once the build completes, the list of all licenses found and used during the build are |
| 278 | kept in the resulting build directory at | 281 | kept in the Yocto Project build directory at |
| 279 | <filename><build_directory>/tmp/deploy/images/licenses</filename>. | 282 | <filename>tmp/deploy/images/licenses</filename>. |
| 280 | If a module requires a license that is not in the base list, the build process | 283 | If a module requires a license that is not in the base list, the build process |
| 281 | generates a warning during the build. | 284 | generates a warning during the build. |
| 282 | These tools make it easier for a developer to be certain of the licenses with which | 285 | These tools make it easier for a developer to be certain of the licenses with which |
| 283 | their shipped products must comply. | 286 | their shipped products must comply. |
| 284 | However, it is still up to the developer to resolve potential licensing issues. | 287 | However, even with these tools it is still up to the developer to resolve potential licensing issues. |
| 285 | </para> | 288 | </para> |
| 286 | 289 | ||
| 287 | <para> | 290 | <para> |
| @@ -292,14 +295,13 @@ | |||
| 292 | for a standard format for communicating the components, licenses, and copyrights | 295 | for a standard format for communicating the components, licenses, and copyrights |
| 293 | associated with a software package. | 296 | associated with a software package. |
| 294 | <ulink url='http://opensource.org'>OSI</ulink> is a corporation dedicated to the Open Source | 297 | <ulink url='http://opensource.org'>OSI</ulink> is a corporation dedicated to the Open Source |
| 295 | Definition and the effort for reviewing | 298 | Definition and the effort for reviewing and approving licenses that are OSD-conformant. |
| 296 | and approving licenses that are OSD-conformant. | ||
| 297 | </para> | 299 | </para> |
| 298 | 300 | ||
| 299 | <para> | 301 | <para> |
| 300 | You can find a list of the combined SPDX and OSI licenses that the Yocto Project uses | 302 | You can find a list of the combined SPDX and OSI licenses that the Yocto Project uses |
| 301 | <ulink url='http://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/meta/files/common-licenses'>here</ulink>. | 303 | <ulink url='http://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/meta/files/common-licenses'>here</ulink>. |
| 302 | The wiki page discusses the license infrastructure used by the Yocto Project. | 304 | This wiki page discusses the license infrastructure used by the Yocto Project. |
| 303 | </para> | 305 | </para> |
| 304 | </section> | 306 | </section> |
| 305 | 307 | ||
| @@ -320,7 +322,7 @@ | |||
| 320 | You do not have to be an expert in Git to be functional. | 322 | You do not have to be an expert in Git to be functional. |
| 321 | A good place to look for instruction on a minimal set of Git commands is | 323 | A good place to look for instruction on a minimal set of Git commands is |
| 322 | <ulink url='http://git-scm.com/documentation'>here</ulink>. | 324 | <ulink url='http://git-scm.com/documentation'>here</ulink>. |
| 323 | If you need to download Git you can do so | 325 | If you need to download Git, you can do so |
| 324 | <ulink url='http://git-scm.com/download'>here</ulink>. | 326 | <ulink url='http://git-scm.com/download'>here</ulink>. |
| 325 | </para> | 327 | </para> |
| 326 | 328 | ||
| @@ -332,7 +334,7 @@ | |||
| 332 | This methodology also allows for an environment in which you can do lots of | 334 | This methodology also allows for an environment in which you can do lots of |
| 333 | experimentation on your project as you develop changes or new features. | 335 | experimentation on your project as you develop changes or new features. |
| 334 | For example, you can create a “branch”, experiment with some feature, and then | 336 | For example, you can create a “branch”, experiment with some feature, and then |
| 335 | if you like the feature you incorporate the branch into the tree. | 337 | if you like the feature, you incorporate the branch into the tree. |
| 336 | If you don’t, you cut the branch off by deleting it. | 338 | If you don’t, you cut the branch off by deleting it. |
| 337 | </para> | 339 | </para> |
| 338 | 340 | ||
| @@ -347,55 +349,63 @@ | |||
| 347 | omits the many arguments they support. | 349 | omits the many arguments they support. |
| 348 | See the Git documentation for complete descriptions and strategies on how to use these commands: | 350 | See the Git documentation for complete descriptions and strategies on how to use these commands: |
| 349 | <itemizedlist> | 351 | <itemizedlist> |
| 350 | <listitem><para><emphasis><filename>git init</filename></emphasis> – Initializes an empty Git repository. | 352 | <listitem><para><emphasis><filename>git init</filename>:</emphasis> Initializes an empty Git repository. |
| 351 | You cannot use Git commands unless you have a <filename>.git</filename> repository.</para></listitem> | 353 | You cannot use Git commands unless you have a <filename>.git</filename> repository.</para></listitem> |
| 352 | <listitem><para><emphasis><filename>git clone</filename></emphasis> – Creates a clone of a repository. | 354 | <listitem><para><emphasis><filename>git clone</filename>:</emphasis> Creates a clone of a repository. |
| 353 | During collaboration this command allows you to create a local repository that is on | 355 | During collaboration, this command allows you to create a local repository that is on |
| 354 | equal footing with a fellow developer’s repository.</para></listitem> | 356 | equal footing with a fellow developer’s repository.</para></listitem> |
| 355 | <listitem><para><emphasis><filename>git add</filename></emphasis> – Adds updated file contents to the index that | 357 | <listitem><para><emphasis><filename>git add</filename>:</emphasis> Adds updated file contents |
| 358 | to the index that | ||
| 356 | Git uses to track changes. | 359 | Git uses to track changes. |
| 357 | All files that have changed must be added before they can be committed.</para></listitem> | 360 | You must add all files that have changed before you can commit them.</para></listitem> |
| 358 | <listitem><para><emphasis><filename>git commit</filename></emphasis> – Creates a “commit” that documents | 361 | <listitem><para><emphasis><filename>git commit</filename>:</emphasis> Creates a “commit” that documents |
| 359 | the changes you made. | 362 | the changes you made. |
| 360 | Commits are used for historical purposes, for determining if a maintainer of a project | 363 | Commits are used for historical purposes, for determining if a maintainer of a project |
| 361 | will allow the change, and for ultimately pushing the change from your local Git repository | 364 | will allow the change, and for ultimately pushing the change from your local Git repository |
| 362 | into the project’s upstream (or master) repository.</para></listitem> | 365 | into the project’s upstream (or master) repository.</para></listitem> |
| 363 | <listitem><para><emphasis><filename>git status</filename></emphasis> – Reports any modified files that | 366 | <listitem><para><emphasis><filename>git status</filename>:</emphasis> Reports any modified files that |
| 364 | possibly need added and committed.</para></listitem> | 367 | possibly need added and committed.</para></listitem> |
| 365 | <listitem><para><emphasis><filename>git checkout <branch-name></filename></emphasis> - Changes | 368 | <listitem><para><emphasis><filename>git checkout <branch-name></filename>:</emphasis> Changes |
| 366 | your working branch. This command is analogous to “cd”.</para></listitem> | 369 | your working branch. |
| 367 | <listitem><para><emphasis><filename>git checkout –b <working-branch></filename></emphasis> - Creates | 370 | This command is analogous to “cd”.</para></listitem> |
| 371 | <listitem><para><emphasis><filename>git checkout –b <working-branch></filename>:</emphasis> Creates | ||
| 368 | a working branch on your local machine where you can isolate work. | 372 | a working branch on your local machine where you can isolate work. |
| 369 | It is a good idea to use local branches when adding specific features or changes. | 373 | It is a good idea to use local branches when adding specific features or changes. |
| 370 | This way if you don’t like what you have done you can easily get rid of the work.</para></listitem> | 374 | This way if you don’t like what you have done you can easily get rid of the work.</para></listitem> |
| 371 | <listitem><para><emphasis><filename>git branch</filename></emphasis> – Reports existing branches and | 375 | <listitem><para><emphasis><filename>git branch</filename>:</emphasis> Reports existing branches and |
| 372 | tells you which branch in which you are currently working.</para></listitem> | 376 | tells you which branch in which you are currently working.</para></listitem> |
| 373 | <listitem><para><emphasis><filename>git branch -D <branch-name></filename></emphasis> – | 377 | <listitem><para><emphasis><filename>git branch -D <branch-name></filename>:</emphasis> |
| 374 | Deletes an existing branch. You need to be in a branch other than the one you are deleting | 378 | Deletes an existing branch. |
| 379 | You need to be in a branch other than the one you are deleting | ||
| 375 | in order to delete <branch-name>.</para></listitem> | 380 | in order to delete <branch-name>.</para></listitem> |
| 376 | <listitem><para><emphasis><filename>git pull</filename></emphasis> – Retrieves information from an upstream Git | 381 | <listitem><para><emphasis><filename>git pull</filename>:</emphasis> Retrieves information |
| 382 | from an upstream Git | ||
| 377 | repository and places it in your local Git repository. | 383 | repository and places it in your local Git repository. |
| 378 | You use this command to make sure you are synchronized with the upstream repository | 384 | You use this command to make sure you are synchronized with the repository |
| 379 | from which the project’s maintainer uses to pull changes into the master repository.</para></listitem> | 385 | from which you are basing changes (.e.g. the master repository).</para></listitem> |
| 380 | <listitem><para><emphasis><filename>git push</filename></emphasis> – Sends all your local changes you | 386 | <listitem><para><emphasis><filename>git push</filename>:</emphasis> Sends all your local changes you |
| 381 | have committed to an upstream Git repository. | 387 | have committed to an upstream Git repository (e.g. a contribution repository). |
| 382 | The maintainer of the project draws from these repositories when adding your changes to the | 388 | The maintainer of the project draws from these repositories when adding your changes to the |
| 383 | project’s master repository.</para></listitem> | 389 | project’s master repository.</para></listitem> |
| 384 | <listitem><para><emphasis><filename>git merge</filename></emphasis> – Combines or adds changes from one | 390 | <listitem><para><emphasis><filename>git merge</filename>:</emphasis> Combines or adds changes from one |
| 385 | local branch of your repository with another branch. | 391 | local branch of your repository with another branch. |
| 386 | When you create a local Git repository the default branch is named “master”. | 392 | When you create a local Git repository, the default branch is named “master”. |
| 387 | A typical workflow is to create a temporary branch for isolated work, make and commit your | 393 | A typical workflow is to create a temporary branch for isolated work, make and commit your |
| 388 | changes, switch to the master branch, merge the changes from the temporary branch into the | 394 | changes, switch to your local master branch, merge the changes from the temporary branch into the |
| 389 | master branch, and then delete the temporary branch</para></listitem> | 395 | local master branch, and then delete the temporary branch.</para></listitem> |
| 390 | <listitem><para><emphasis><filename>git cherry-pick</filename></emphasis> – Choose and apply specific | 396 | <listitem><para><emphasis><filename>git cherry-pick</filename>:</emphasis> Choose and apply specific |
| 391 | commits from one branch into another branch. | 397 | commits from one branch into another branch. |
| 392 | There are times when you might not be able to merge all the changes in one branch with | 398 | There are times when you might not be able to merge all the changes in one branch with |
| 393 | another but need to pick out certain ones.</para></listitem> | 399 | another but need to pick out certain ones.</para></listitem> |
| 394 | <listitem><para><emphasis><filename>gitk</filename></emphasis> – Provides a GUI view of the branches | 400 | <listitem><para><emphasis><filename>gitk</filename>:</emphasis> Provides a GUI view of the branches |
| 395 | and changes in your local Git repository. | 401 | and changes in your local Git repository. |
| 396 | This command is a good way to see where things have diverged in your local repository.</para></listitem> | 402 | This command is a good way to graphically see where things have diverged in your |
| 397 | <listitem><para><emphasis><filename>git log</filename></emphasis> – Reports a history of your changes to the | 403 | local repository.</para></listitem> |
| 404 | <listitem><para><emphasis><filename>git log</filename>:</emphasis> Reports a history of your changes to the | ||
| 398 | repository.</para></listitem> | 405 | repository.</para></listitem> |
| 406 | <listitem><para><emphasis><filename>git diff</filename>:</emphasis> Displays line-by-line differences | ||
| 407 | between your local working files and the same files in the upstream Git repository that your | ||
| 408 | branch currently tracks.</para></listitem> | ||
| 399 | </itemizedlist> | 409 | </itemizedlist> |
| 400 | </para> | 410 | </para> |
| 401 | </section> | 411 | </section> |
| @@ -407,14 +417,16 @@ | |||
| 407 | This section provides some overview on workflows using Git. | 417 | This section provides some overview on workflows using Git. |
| 408 | In particular, the information covers basic practices that describe roles and actions in a | 418 | In particular, the information covers basic practices that describe roles and actions in a |
| 409 | collaborative development environment. | 419 | collaborative development environment. |
| 410 | Again, if you are familiar with this type of development environment you might want to just skip the section. | 420 | Again, if you are familiar with this type of development environment, you might want to just |
| 421 | skip the section. | ||
| 411 | </para> | 422 | </para> |
| 412 | 423 | ||
| 413 | <para> | 424 | <para> |
| 414 | The Yocto Project files are maintained using Git in a "master" branch whose Git history | 425 | The Yocto Project files are maintained using Git in a "master" branch whose Git history |
| 415 | tracks every change and whose structure provides branches for all diverging functionality. | 426 | tracks every change and whose structure provides branches for all diverging functionality. |
| 416 | Although there is no need to use Git, This practice is typical for open-source projects. | 427 | Although there is no need to use Git, many open source projects do so. |
| 417 | For the Yocto Project a key individual called the "maintainer" is responsible for "master". | 428 | For the Yocto Project, a key individual called the "maintainer" is responsible for "master" |
| 429 | branch of the Git repository. | ||
| 418 | The "master" branch is the “upstream” repository where the final builds of the project occur. | 430 | The "master" branch is the “upstream” repository where the final builds of the project occur. |
| 419 | The maintainer is responsible for allowing changes in from other developers and for | 431 | The maintainer is responsible for allowing changes in from other developers and for |
| 420 | organizing the underlying branch structure to reflect release strategies and so forth. | 432 | organizing the underlying branch structure to reflect release strategies and so forth. |
| @@ -432,7 +444,7 @@ | |||
| 432 | Developers (including contributing community members) create and maintain cloned repositories | 444 | Developers (including contributing community members) create and maintain cloned repositories |
| 433 | of the upstream "master" branch. | 445 | of the upstream "master" branch. |
| 434 | These repositories are local to their development platforms and are used to develop changes. | 446 | These repositories are local to their development platforms and are used to develop changes. |
| 435 | When a developer is satisfied with a particular feature or change they “push” the changes | 447 | When a developer is satisfied with a particular feature or change, they “push” the changes |
| 436 | to the appropriate "contrib" repository. | 448 | to the appropriate "contrib" repository. |
| 437 | </para> | 449 | </para> |
| 438 | 450 | ||
| @@ -468,53 +480,53 @@ | |||
| 468 | The following list describes some of these practices. | 480 | The following list describes some of these practices. |
| 469 | For more detailed information about these strategies see | 481 | For more detailed information about these strategies see |
| 470 | <ulink url='http://www.kernel.org/pub/software/scm/git/docs/gitworkflows.html'>Git Workflows</ulink>. | 482 | <ulink url='http://www.kernel.org/pub/software/scm/git/docs/gitworkflows.html'>Git Workflows</ulink>. |
| 471 | <itemizedlist> | 483 | <itemizedlist> |
| 472 | <listitem><para><emphasis>Make Small Changes</emphasis> - It is best to keep your changes you commit | 484 | <listitem><para><emphasis>Make Small Changes:</emphasis> It is best to keep your changes you commit |
| 473 | small as compared to bundling many disparate changes into a single commit. | 485 | small as compared to bundling many disparate changes into a single commit. |
| 474 | This practice not only keeps things manageable but also allows the maintainer | 486 | This practice not only keeps things manageable but also allows the maintainer |
| 475 | to more easily include or refuse changes.</para> | 487 | to more easily include or refuse changes.</para> |
| 476 | <para>It is also good practice to leave the repository in a state that allows you to | 488 | <para>It is also good practice to leave the repository in a state that allows you to |
| 477 | still successfully build your project.</para></listitem> | 489 | still successfully build your project.</para></listitem> |
| 478 | <listitem><para><emphasis>Use Branches Liberally</emphasis> - It is very easy to create, use, and | 490 | <listitem><para><emphasis>Use Branches Liberally:</emphasis> It is very easy to create, use, and |
| 479 | delete local branches in your working Git repository. | 491 | delete local branches in your working Git repository. |
| 480 | You can name these branches anything you like. | 492 | You can name these branches anything you like. |
| 481 | It is helpful to give them names associated with the particular feature or change | 493 | It is helpful to give them names associated with the particular feature or change |
| 482 | on which you are working. | 494 | on which you are working. |
| 483 | Once you are done with a feature or change you simply discard the branch.</para></listitem> | 495 | Once you are done with a feature or change, simply discard the branch.</para></listitem> |
| 484 | <listitem><para><emphasis>Merge Changes</emphasis> - The <filename>git merge</filename> | 496 | <listitem><para><emphasis>Merge Changes:</emphasis> The <filename>git merge</filename> |
| 485 | command allows you to take the | 497 | command allows you to take the |
| 486 | changes from one branch and fold them into another branch. | 498 | changes from one branch and fold them into another branch. |
| 487 | This process is especially helpful when more than a single developer might be working | 499 | This process is especially helpful when more than a single developer might be working |
| 488 | on different parts of the same feature. | 500 | on different parts of the same feature. |
| 489 | Merging changes also automatically identifies any collisions or “conflicts” | 501 | Merging changes also automatically identifies any collisions or “conflicts” |
| 490 | that might happen resulting from the same lines of code being altered by two different | 502 | that might happen as a result of the same lines of code being altered by two different |
| 491 | developers.</para></listitem> | 503 | developers.</para></listitem> |
| 492 | <listitem><para><emphasis>Manage Branches</emphasis> - Because branches are easy to use, you should | 504 | <listitem><para><emphasis>Manage Branches:</emphasis> Because branches are easy to use, you should |
| 493 | use a system where branches indicate varying levels of code readiness. | 505 | use a system where branches indicate varying levels of code readiness. |
| 494 | For example, you can have a “work” branch to develop in, a “test” branch where the code or | 506 | For example, you can have a “work” branch to develop in, a “test” branch where the code or |
| 495 | change is tested, a “stage” branch where changes are ready to be committed, and so forth. | 507 | change is tested, a “stage” branch where changes are ready to be committed, and so forth. |
| 496 | As your project develops, you can merge code across the branches to reflect ever-increasing | 508 | As your project develops, you can merge code across the branches to reflect ever-increasing |
| 497 | stable states of the development.</para></listitem> | 509 | stable states of the development.</para></listitem> |
| 498 | <listitem><para><emphasis>Use Push and Pull</emphasis> - The push-pull workflow is based on the | 510 | <listitem><para><emphasis>Use Push and Pull:</emphasis> The push-pull workflow is based on the |
| 499 | concept of developers “pushing” local commits to a remote repository, which is | 511 | concept of developers “pushing” local commits to a remote repository, which is |
| 500 | usually a contribution repository. | 512 | usually a contribution repository. |
| 501 | It is also based on the developers “pulling” known states of the project down into their | 513 | This workflow is also based on developers “pulling” known states of the project down into their |
| 502 | local development repositories. | 514 | local development repositories. |
| 503 | This workflow easily allows you to pull changes submitted by other developers from the | 515 | The workflow easily allows you to pull changes submitted by other developers from the |
| 504 | upstream repository into your work area ensuring that you have the most recent software | 516 | upstream repository into your work area ensuring that you have the most recent software |
| 505 | on which to develop. | 517 | on which to develop. |
| 506 | The Yocto Project has two scripts named <filename>create-pull-request</filename> and | 518 | The Yocto Project has two scripts named <filename>create-pull-request</filename> and |
| 507 | <filename>send-pull-request</filename> that ship with the release to facilitate this | 519 | <filename>send-pull-request</filename> that ship with the release to facilitate this |
| 508 | workflow. | 520 | workflow. |
| 509 | You can find these scripts in the local Yocto Project files Git repository in | 521 | You can find these scripts in the local Yocto Project files Git repository in |
| 510 | <filename>scripts</filename>.</para></listitem> | 522 | <filename>scripts</filename>.</para></listitem> |
| 511 | <listitem><para><emphasis>Patch Workflow</emphasis> - This workflow allows you to notify the | 523 | <listitem><para><emphasis>Patch Workflow:</emphasis> This workflow allows you to notify the |
| 512 | maintainer through an email that you have a change (or patch) you would like considered | 524 | maintainer through an email that you have a change (or patch) you would like considered |
| 513 | for the "master" branch of the Git repository. | 525 | for the "master" branch of the Git repository. |
| 514 | To send this type of change you format the patch and then send the email using the Git commands | 526 | To send this type of change you format the patch and then send the email using the Git commands |
| 515 | <filename>git format-patch</filename> and <filename>git send-email</filename>. | 527 | <filename>git format-patch</filename> and <filename>git send-email</filename>. |
| 516 | You can find information on how to submit later in this chapter.</para></listitem> | 528 | You can find information on how to submit later in this chapter.</para></listitem> |
| 517 | </itemizedlist> | 529 | </itemizedlist> |
| 518 | </para> | 530 | </para> |
| 519 | </section> | 531 | </section> |
| 520 | 532 | ||
| @@ -532,7 +544,7 @@ | |||
| 532 | <para> | 544 | <para> |
| 533 | Sometimes it is helpful to submit, investigate, or track a bug against the Yocto Project itself | 545 | Sometimes it is helpful to submit, investigate, or track a bug against the Yocto Project itself |
| 534 | such as when discovering an issue with some component of the build system that acts contrary | 546 | such as when discovering an issue with some component of the build system that acts contrary |
| 535 | to the documentation or expectations. | 547 | to the documentation or your expectations. |
| 536 | You can find information | 548 | You can find information |
| 537 | for Bugzilla configuration and bug tracking procedures specific to the Yocto Project | 549 | for Bugzilla configuration and bug tracking procedures specific to the Yocto Project |
| 538 | <ulink url='https://wiki.yoctoproject.org/wiki/Bugzilla_Configuration_and_Bug_Tracking'>here</ulink>. | 550 | <ulink url='https://wiki.yoctoproject.org/wiki/Bugzilla_Configuration_and_Bug_Tracking'>here</ulink>. |
| @@ -548,7 +560,7 @@ | |||
| 548 | <para> | 560 | <para> |
| 549 | Here are some things to remember when dealing with bugs against the Yocto Project: | 561 | Here are some things to remember when dealing with bugs against the Yocto Project: |
| 550 | <itemizedlist> | 562 | <itemizedlist> |
| 551 | <listitem><para>The Yocto Project follows a naming bug-naming convention: | 563 | <listitem><para>The Yocto Project follows a bug-naming convention: |
| 552 | <filename>[YOCTO #<number>]</filename>, where <filename><number></filename> is the | 564 | <filename>[YOCTO #<number>]</filename>, where <filename><number></filename> is the |
| 553 | assigned defect ID used in Bugzilla. | 565 | assigned defect ID used in Bugzilla. |
| 554 | So, for example, a valid way to refer to a defect when creating a commit comment | 566 | So, for example, a valid way to refer to a defect when creating a commit comment |
| @@ -567,8 +579,34 @@ | |||
| 567 | 579 | ||
| 568 | <para> | 580 | <para> |
| 569 | Contributions to the Yocto Project are very welcome. | 581 | Contributions to the Yocto Project are very welcome. |
| 570 | You should send patches to the Yocto Project mailing list to get them in front of the | 582 | You should send patches to the appropriate Yocto Project mailing list to get them |
| 571 | Yocto Project Maintainer. | 583 | in front of the Yocto Project Maintainer. |
| 584 | For a list of the Yocto Project mailing lists, see the | ||
| 585 | "<ulink url='http://www.yoctoproject.org/docs/1.1/poky-ref-manual/poky-ref-manual.html#resources-mailinglist'>Mailing lists</ulink>" section in | ||
| 586 | <ulink url='http://www.yoctoproject.org/docs/1.1/poky-ref-manual/poky-ref-manual.html'> The | ||
| 587 | Yocto Project Reference Manual</ulink>. | ||
| 588 | </para> | ||
| 589 | |||
| 590 | <para> | ||
| 591 | Following is some guidance on which mailing list to use for what type of defect: | ||
| 592 | <itemizedlist> | ||
| 593 | <listitem><para>For defects against the Yocto Project build system Poky, send | ||
| 594 | your patch to the | ||
| 595 | <ulink url='http://lists.yoctoproject.org/listinfo/poky'></ulink> mailing list. | ||
| 596 | This mailing list corresponds to issues that are not specific to the Yocto Project but | ||
| 597 | are part of the OE-core. | ||
| 598 | For example, a defect against anything in the <filename>meta</filename> layer | ||
| 599 | or the BitBake Manual could be sent to this mailing list.</para></listitem> | ||
| 600 | <listitem><para>For defects against Yocto-specific layers, tools, and Yocto Project | ||
| 601 | documentation use the | ||
| 602 | <ulink url='http://lists.yoctoproject.org/listinfo/yocto'></ulink> mailing list. | ||
| 603 | This mailing list corresponds to Yocto-specific areas such as | ||
| 604 | <filename>meta-yocto</filename>, <filename>meta-intel</filename>, | ||
| 605 | <filename>linux-yocto</filename>, and <filename>documentation</filename>.</para></listitem> | ||
| 606 | </itemizedlist> | ||
| 607 | </para> | ||
| 608 | |||
| 609 | <para> | ||
| 572 | When you send a patch, be sure to include a "signed-off-by:" | 610 | When you send a patch, be sure to include a "signed-off-by:" |
| 573 | line in the same style as required by the Linux kernel. | 611 | line in the same style as required by the Linux kernel. |
| 574 | Adding this line signifies the developer has agreed to the Developer's Certificate of Origin 1.1 | 612 | Adding this line signifies the developer has agreed to the Developer's Certificate of Origin 1.1 |
| @@ -611,33 +649,38 @@ | |||
| 611 | <para> | 649 | <para> |
| 612 | In a collaborative environment, it is necessary to have some sort of standard | 650 | In a collaborative environment, it is necessary to have some sort of standard |
| 613 | or method through which you submit changes. | 651 | or method through which you submit changes. |
| 614 | Otherwise, things would get quite chaotic. | 652 | Otherwise, things could get quite chaotic. |
| 615 | </para> | 653 | </para> |
| 616 | 654 | ||
| 617 | <para> | 655 | <para> |
| 618 | When you form a commit you must follow certain standards established by the | 656 | When you form a commit, you must follow certain standards established by the |
| 619 | Yocto Project development team. | 657 | Yocto Project development team. |
| 620 | For each commit, do the following: | 658 | For each commit, you must provide a single-line summary of the change and you |
| 659 | almost always provide a more detailed description of what you did (i.e. the body | ||
| 660 | of the commit). | ||
| 661 | The only exceptions for not providing a detailed description would be if your | ||
| 662 | change is a simple, self-explanatory change that needs no description. | ||
| 663 | Here are the Yocto Project commit message guidelines: | ||
| 621 | <itemizedlist> | 664 | <itemizedlist> |
| 622 | <listitem><para>Provide a single-line, short summary of the change. | 665 | <listitem><para>Provide a single-line, short summary of the change. |
| 623 | This summary is typically viewable by source control systems. | 666 | This summary is typically viewable by source control systems. |
| 624 | Thus, providing something short and descriptive that gives the reader | 667 | Thus, providing something short and descriptive that gives the reader |
| 625 | a summary of the change is useful when viewing a list of many commits. | 668 | a summary of the change is useful when viewing a list of many commits. |
| 626 | </para></listitem> | 669 | </para></listitem> |
| 670 | <listitem><para>For the body of the commit message, provide detailed information | ||
| 671 | that describes what you changed, why you made the change, and the approach | ||
| 672 | you used. | ||
| 673 | Provide as much detail as you can in the body of the commit message. | ||
| 674 | </para></listitem> | ||
| 627 | <listitem><para>If the change addresses a specific bug or issue that is | 675 | <listitem><para>If the change addresses a specific bug or issue that is |
| 628 | associated with a bug-tracking ID, prefix the single-line commit summary | 676 | associated with a bug-tracking ID, prefix your detailed description |
| 629 | with the bug or issue ID. | 677 | with the bug or issue ID. |
| 630 | For example, the Yocto Project tracks bugs using a bug-naming convention. | 678 | For example, the Yocto Project tracks bugs using a bug-naming convention. |
| 631 | Any commits that address a bug must use a commit summary line in the | 679 | Any commits that address a bug must start with the bug ID in the description |
| 632 | following form: | 680 | as follows: |
| 633 | <literallayout class='monospaced'> | 681 | <literallayout class='monospaced'> |
| 634 | YOCTO #<bug-id>: <Brief 40-character or less summary of the change> | 682 | YOCTO #<bug-id>: <Detailed description of commit> |
| 635 | </literallayout></para></listitem> | 683 | </literallayout></para></listitem> |
| 636 | <listitem><para>For the body of the commit message, provide detailed information | ||
| 637 | that describes what you changed, why you made the change, and the approach | ||
| 638 | you used. | ||
| 639 | Provide as much detail as you want in the body of the commit message. | ||
| 640 | </para></listitem> | ||
| 641 | </itemizedlist> | 684 | </itemizedlist> |
| 642 | </para> | 685 | </para> |
| 643 | 686 | ||
| @@ -655,7 +698,7 @@ | |||
| 655 | <listitem><para>Stage your commit (or change) by using the <filename>git add</filename> | 698 | <listitem><para>Stage your commit (or change) by using the <filename>git add</filename> |
| 656 | command.</para></listitem> | 699 | command.</para></listitem> |
| 657 | <listitem><para>Commit the change by using the <filename>git commit</filename> | 700 | <listitem><para>Commit the change by using the <filename>git commit</filename> |
| 658 | command and push it to the upstream "contrib" repository. | 701 | command and push it to the "contrib" repository. |
| 659 | Be sure to provide a commit message that follows the project’s commit standards | 702 | Be sure to provide a commit message that follows the project’s commit standards |
| 660 | as described earlier.</para></listitem> | 703 | as described earlier.</para></listitem> |
| 661 | <listitem><para>Notify the maintainer that you have pushed a change by making a pull | 704 | <listitem><para>Notify the maintainer that you have pushed a change by making a pull |
| @@ -696,12 +739,13 @@ | |||
| 696 | <listitem><para>Commit the change by using the | 739 | <listitem><para>Commit the change by using the |
| 697 | <filename>git commit --signoff</filename> command. | 740 | <filename>git commit --signoff</filename> command. |
| 698 | Using the <filename>--signoff</filename> option identifies you as the person | 741 | Using the <filename>--signoff</filename> option identifies you as the person |
| 699 | making the change.</para> | 742 | making the change and also satisfies the Developer's Certificate of |
| 743 | Origin (DCO) shown earlier.</para> | ||
| 700 | <para>When you form a commit you must follow certain standards established by the | 744 | <para>When you form a commit you must follow certain standards established by the |
| 701 | Yocto Project development team. | 745 | Yocto Project development team. |
| 702 | See the | 746 | See the earlier section |
| 703 | <link linkend='how-to-submit-a-change'>How to Submit a Change</link> section | 747 | "<link linkend='how-to-submit-a-change'>How to Submit a Change</link>" |
| 704 | earlier for Yocto Project commit message standards.</para></listitem> | 748 | for Yocto Project commit message standards.</para></listitem> |
| 705 | <listitem><para>Format the commit into an email messsage. | 749 | <listitem><para>Format the commit into an email messsage. |
| 706 | To format commits, use the <filename>git format-patch</filename> command. | 750 | To format commits, use the <filename>git format-patch</filename> command. |
| 707 | When you provide the command, you must include a revision list or a number of patches | 751 | When you provide the command, you must include a revision list or a number of patches |
| @@ -714,9 +758,11 @@ | |||
| 714 | </literallayout></para> | 758 | </literallayout></para> |
| 715 | <para>After the command is run, the current directory contains a | 759 | <para>After the command is run, the current directory contains a |
| 716 | numbered <filename>.patch</filename> file for the commit.</para> | 760 | numbered <filename>.patch</filename> file for the commit.</para> |
| 717 | <para>If you provide several commits as part of the command, it produces a numbered | 761 | <para>If you provide several commits as part of the command, |
| 762 | the <filename>git format-patch</filename> command produces a numbered | ||
| 718 | series of files in the current directory – one for each commit. | 763 | series of files in the current directory – one for each commit. |
| 719 | For information on the <filename>git format-patch</filename> command use the | 764 | For information on the <filename>git format-patch</filename> command, |
| 765 | see <filename>GIT_FORMAT_PATCH(1)</filename> displayed using the | ||
| 720 | <filename>man git-format-patch</filename> command.</para></listitem> | 766 | <filename>man git-format-patch</filename> command.</para></listitem> |
| 721 | <listitem><para>Import the files into your mail client by using the | 767 | <listitem><para>Import the files into your mail client by using the |
| 722 | <filename>git send-email</filename> command. | 768 | <filename>git send-email</filename> command. |
| @@ -728,7 +774,10 @@ | |||
| 728 | <filename>msmtp</filename>, <filename>sendmail</filename>, or through a direct | 774 | <filename>msmtp</filename>, <filename>sendmail</filename>, or through a direct |
| 729 | <filename>smtp</filename> configuration in your Git <filename>config</filename> | 775 | <filename>smtp</filename> configuration in your Git <filename>config</filename> |
| 730 | file.</para> | 776 | file.</para> |
| 731 | <para>The <filename>git send-email</filename> command has several options that let you | 777 | <para>The <filename>git send-email</filename> command is the preferred method |
| 778 | for sending your patches since there is no risk of compromising whitespace | ||
| 779 | in the body of the message, which can occur when you use your own mail client. | ||
| 780 | The command also has several options that let you | ||
| 732 | specify recipients and perform further editing of the email message. | 781 | specify recipients and perform further editing of the email message. |
| 733 | For information on how to use the <filename>git send-email</filename> command, | 782 | For information on how to use the <filename>git send-email</filename> command, |
| 734 | use the <filename>man git-send-email</filename> command.</para></listitem> | 783 | use the <filename>man git-send-email</filename> command.</para></listitem> |
