diff options
author | Scott Rifenbark <scott.m.rifenbark@intel.com> | 2013-04-05 15:03:39 -0700 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2013-04-10 16:20:54 +0100 |
commit | 64a5bec85013f6fa1614d820a22031060dafc67b (patch) | |
tree | ce93868c686bbe9b3b2070aeae5a7a3abe20e7a5 | |
parent | 7f21c57770121bfdfa90080d8448fd75c9174669 (diff) | |
download | poky-64a5bec85013f6fa1614d820a22031060dafc67b.tar.gz |
dev-manual: Initial draft of the new yocto-layer section
Rough text for a section within the layer section that
introduces and describes a bit how the new yocto-layer
script works.
(From yocto-docs rev: ee56a264600df9fe250e73b60c8dadd6f8e55009)
Signed-off-by: Scott Rifenbark <scott.m.rifenbark@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r-- | documentation/dev-manual/dev-manual-common-tasks.xml | 575 |
1 files changed, 402 insertions, 173 deletions
diff --git a/documentation/dev-manual/dev-manual-common-tasks.xml b/documentation/dev-manual/dev-manual-common-tasks.xml index 24faf8bd76..02d1dd22b4 100644 --- a/documentation/dev-manual/dev-manual-common-tasks.xml +++ b/documentation/dev-manual/dev-manual-common-tasks.xml | |||
@@ -17,25 +17,34 @@ | |||
17 | <title>Understanding and Creating Layers</title> | 17 | <title>Understanding and Creating Layers</title> |
18 | 18 | ||
19 | <para> | 19 | <para> |
20 | The OpenEmbedded build system supports organizing <link linkend='metadata'>metadata</link> | 20 | The OpenEmbedded build system supports organizing |
21 | into multiple layers. | 21 | <link linkend='metadata'>Metadata</link> into multiple layers. |
22 | Layers allow you to isolate different types of customizations from each other. | 22 | Layers allow you to isolate different types of customizations from |
23 | You might find it tempting to keep everything in one layer when working on a single project. | 23 | each other. |
24 | However, the more modular you organize your metadata, the easier it is to cope with future changes. | 24 | You might find it tempting to keep everything in one layer when |
25 | working on a single project. | ||
26 | However, the more modular you organize your Metadata, the easier | ||
27 | it is to cope with future changes. | ||
25 | </para> | 28 | </para> |
26 | 29 | ||
27 | <para> | 30 | <para> |
28 | To illustrate how layers are used to keep things modular, consider machine customizations. | 31 | To illustrate how layers are used to keep things modular, consider |
29 | These types of customizations typically reside in a BSP Layer. | 32 | machine customizations. |
30 | Furthermore, the machine customizations should be isolated from recipes and metadata that support | 33 | These types of customizations typically reside in a special layer, |
31 | a new GUI environment, for example. | 34 | rather than a general layer, called a Board Specific Package (BSP) |
32 | This situation gives you a couple of layers: one for the machine configurations, and one for the | 35 | Layer. |
33 | GUI environment. | 36 | Furthermore, the machine customizations should be isolated from |
34 | It is important to understand, however, that the BSP layer can still make machine-specific | 37 | recipes and Metadata that support a new GUI environment, |
35 | additions to recipes within the GUI environment layer without polluting the GUI layer itself | 38 | for example. |
39 | This situation gives you a couple of layers: one for the machine | ||
40 | configurations, and one for the GUI environment. | ||
41 | It is important to understand, however, that the BSP layer can | ||
42 | still make machine-specific additions to recipes within the GUI | ||
43 | environment layer without polluting the GUI layer itself | ||
36 | with those machine-specific changes. | 44 | with those machine-specific changes. |
37 | You can accomplish this through a recipe that is a BitBake append | 45 | You can accomplish this through a recipe that is a BitBake append |
38 | (<filename>.bbappend</filename>) file, which is described later in this section. | 46 | (<filename>.bbappend</filename>) file, which is described later |
47 | in this section. | ||
39 | </para> | 48 | </para> |
40 | 49 | ||
41 | <para> | 50 | <para> |
@@ -45,8 +54,8 @@ | |||
45 | <title>Layers</title> | 54 | <title>Layers</title> |
46 | 55 | ||
47 | <para> | 56 | <para> |
48 | The Source Directory contains several layers right out of the | 57 | The Source Directory contains both general layers and BSP |
49 | box. | 58 | layers right out of the box. |
50 | You can easily identify layers that ship with a | 59 | You can easily identify layers that ship with a |
51 | Yocto Project release in the Source Directory by their | 60 | Yocto Project release in the Source Directory by their |
52 | folder names. | 61 | folder names. |
@@ -56,20 +65,25 @@ | |||
56 | It is not a requirement that a layer begins with the | 65 | It is not a requirement that a layer begins with the |
57 | string <filename>meta</filename>. | 66 | string <filename>meta</filename>. |
58 | </note> | 67 | </note> |
59 | For example, when you set up the <link linkend='source-directory'>Source Directory</link> | 68 | For example, when you set up the |
60 | structure, you will see several layers: <filename>meta</filename>, | 69 | <link linkend='source-directory'>Source Directory</link> |
61 | <filename>meta-hob</filename>, <filename>meta-skeleton</filename>, | 70 | structure, you will see several layers: |
62 | <filename>meta-yocto</filename>, and <filename>meta-yocto-bsp</filename>. | 71 | <filename>meta</filename>, <filename>meta-hob</filename>, |
72 | <filename>meta-skeleton</filename>, | ||
73 | <filename>meta-yocto</filename>, and | ||
74 | <filename>meta-yocto-bsp</filename>. | ||
63 | Each of these folders is a layer. | 75 | Each of these folders is a layer. |
64 | </para> | 76 | </para> |
65 | 77 | ||
66 | <para> | 78 | <para> |
67 | Furthermore, if you set up a local copy of the <filename>meta-intel</filename> Git repository | 79 | Furthermore, if you set up a local copy of the |
68 | and then explore that folder, you will discover many BSP layers within the | 80 | <filename>meta-intel</filename> Git repository |
69 | <filename>meta-intel</filename> layer. | 81 | and then explore the folder of that general layer, |
82 | you will discover many BSP layers inside. | ||
70 | For more information on BSP layers, see the | 83 | For more information on BSP layers, see the |
71 | "<ulink url='&YOCTO_DOCS_BSP_URL;#bsp-layers'>BSP Layers</ulink>" | 84 | "<ulink url='&YOCTO_DOCS_BSP_URL;#bsp-layers'>BSP Layers</ulink>" |
72 | section in the Yocto Project Board Support Package (BSP) Developer's Guide. | 85 | section in the Yocto Project Board Support Package (BSP) |
86 | Developer's Guide. | ||
73 | </para> | 87 | </para> |
74 | </section> | 88 | </section> |
75 | 89 | ||
@@ -77,32 +91,54 @@ | |||
77 | <title>Creating Your Own Layer</title> | 91 | <title>Creating Your Own Layer</title> |
78 | 92 | ||
79 | <para> | 93 | <para> |
80 | It is very easy to create your own layer to use with the OpenEmbedded build system. | 94 | It is very easy to create your own layers to use with the |
95 | OpenEmbedded build system. | ||
96 | The Yocto Project ships with scripts that speed up creating | ||
97 | general layers and BSP layers. | ||
98 | This section describes the steps you perform by hand to create | ||
99 | a layer so that you can better understand them. | ||
100 | For information about the layer-creation scripts, see the | ||
101 | "<ulink url='&YOCTO_DOCS_BSP_URL;#creating-a-new-bsp-layer-using-the-yocto-bsp-script'>Creating a New BSP Layer Using the yocto-bsp Script</ulink>" | ||
102 | section in the Yocto Project Board Support Package (BSP) | ||
103 | Developer's Guide and the | ||
104 | "<link linkend='creating-a-general-layer-using-the-yocto-layer-script'>Creating a General Layer Using the yocto-layer Script</link>" | ||
105 | section further down in this manual. | ||
106 | </para> | ||
107 | |||
108 | <para> | ||
81 | Follow these general steps to create your layer: | 109 | Follow these general steps to create your layer: |
82 | <orderedlist> | 110 | <orderedlist> |
83 | <listitem><para><emphasis>Check Existing Layers:</emphasis> Before creating a new layer, | 111 | <listitem><para><emphasis>Check Existing Layers:</emphasis> |
84 | you should be sure someone has not already created a layer containing the metadata | 112 | Before creating a new layer, you should be sure someone |
113 | has not already created a layer containing the Metadata | ||
85 | you need. | 114 | you need. |
86 | You can see the | 115 | You can see the |
87 | <ulink url='http://layers.openembedded.org/layerindex/layers/'><filename>OpenEmbedded metadata index</filename></ulink> | 116 | <ulink url='http://layers.openembedded.org/layerindex/layers/'><filename>OpenEmbedded Metadata Index</filename></ulink> |
88 | for a list of layers from the OpenEmbedded community that can be used in the | 117 | for a list of layers from the OpenEmbedded community |
89 | Yocto Project.</para></listitem> | 118 | that can be used in the Yocto Project. |
119 | </para></listitem> | ||
90 | <listitem><para><emphasis>Create a Directory:</emphasis> | 120 | <listitem><para><emphasis>Create a Directory:</emphasis> |
91 | Create the directory for your layer. | 121 | Create the directory for your layer. |
92 | While not strictly required, prepend the name of the | 122 | While not strictly required, prepend the name of the |
93 | folder with the string <filename>meta</filename>. | 123 | folder with the string <filename>meta-</filename>. |
94 | For example: | 124 | For example: |
95 | <literallayout class='monospaced'> | 125 | <literallayout class='monospaced'> |
96 | meta-mylayer | 126 | meta-mylayer |
97 | meta-GUI_xyz | 127 | meta-GUI_xyz |
98 | meta-mymachine | 128 | meta-mymachine |
99 | </literallayout></para></listitem> | 129 | </literallayout> |
100 | <listitem><para><emphasis>Create a Layer Configuration File:</emphasis> Inside your new | 130 | </para></listitem> |
101 | layer folder, you need to create a <filename>conf/layer.conf</filename> file. | 131 | <listitem><para><emphasis>Create a Layer Configuration |
102 | It is easiest to take an existing layer configuration file and copy that to your | 132 | File:</emphasis> |
103 | layer's <filename>conf</filename> directory and then modify the file as needed.</para> | 133 | Inside your new layer folder, you need to create a |
104 | <para>The <filename>meta-yocto-bsp/conf/layer.conf</filename> file demonstrates the | 134 | <filename>conf/layer.conf</filename> file. |
105 | required syntax: | 135 | It is easiest to take an existing layer configuration |
136 | file and copy that to your layer's | ||
137 | <filename>conf</filename> directory and then modify the | ||
138 | file as needed.</para> | ||
139 | <para>The | ||
140 | <filename>meta-yocto-bsp/conf/layer.conf</filename> file | ||
141 | demonstrates the required syntax: | ||
106 | <literallayout class='monospaced'> | 142 | <literallayout class='monospaced'> |
107 | # We have a conf and classes directory, add to BBPATH | 143 | # We have a conf and classes directory, add to BBPATH |
108 | BBPATH .= ":${LAYERDIR}" | 144 | BBPATH .= ":${LAYERDIR}" |
@@ -161,73 +197,95 @@ | |||
161 | </itemizedlist></para> | 197 | </itemizedlist></para> |
162 | <para>Note the use of the | 198 | <para>Note the use of the |
163 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-LAYERDIR'>LAYERDIR</ulink></filename> | 199 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-LAYERDIR'>LAYERDIR</ulink></filename> |
164 | variable, which expands to the directory of the current layer.</para> | 200 | variable, which expands to the directory of the current |
165 | <para>Through the use of the <filename>BBPATH</filename> variable, | 201 | layer.</para> |
166 | BitBake locates <filename>.bbclass</filename> files, configuration | 202 | <para>Through the use of the <filename>BBPATH</filename> |
167 | files, and files that are included with <filename>include</filename> | 203 | variable, BitBake locates <filename>.bbclass</filename> |
168 | and <filename>require</filename> statements. | 204 | files, configuration files, and files that are included |
169 | For these cases, BitBake uses the first file with the matching name found in | 205 | with <filename>include</filename> and |
170 | <filename>BBPATH</filename>. | 206 | <filename>require</filename> statements. |
171 | This is similar to the way the <filename>PATH</filename> variable is used for binaries. | 207 | For these cases, BitBake uses the first file that |
172 | We recommend, therefore, that you use unique <filename>.bbclass</filename> | 208 | matches the name found in <filename>BBPATH</filename>. |
173 | and configuration file names in your custom layer.</para></listitem> | 209 | This is similar to the way the <filename>PATH</filename> |
174 | <listitem><para><emphasis>Add Content:</emphasis> Depending on the type of layer, | 210 | variable is used for binaries. |
175 | add the content. | 211 | We recommend, therefore, that you use unique |
176 | If the layer adds support for a machine, add the machine configuration in | 212 | <filename>.bbclass</filename> and configuration |
177 | a <filename>conf/machine/</filename> file within the layer. | 213 | filenames in your custom layer.</para></listitem> |
178 | If the layer adds distro policy, add the distro configuration in a | 214 | <listitem><para><emphasis>Add Content:</emphasis> Depending |
179 | <filename>conf/distro/</filename> file with the layer. | 215 | on the type of layer, add the content. |
180 | If the layer introduces new recipes, put the recipes you need in | 216 | If the layer adds support for a machine, add the machine |
181 | <filename>recipes-*</filename> subdirectories within the layer. | 217 | configuration in a <filename>conf/machine/</filename> |
182 | <note>In order to be compliant with the Yocto Project, a layer must contain | 218 | file within the layer. |
183 | a <ulink url='&YOCTO_DOCS_BSP_URL;#bsp-filelayout-readme'>README file.</ulink> | 219 | If the layer adds distro policy, add the distro |
220 | configuration in a <filename>conf/distro/</filename> | ||
221 | file with the layer. | ||
222 | If the layer introduces new recipes, put the recipes | ||
223 | you need in <filename>recipes-*</filename> | ||
224 | subdirectories within the layer. | ||
225 | <note>In order to be compliant with the Yocto Project, | ||
226 | a layer must contain a | ||
227 | <ulink url='&YOCTO_DOCS_BSP_URL;#bsp-filelayout-readme'>README file.</ulink> | ||
184 | </note></para></listitem> | 228 | </note></para></listitem> |
185 | </orderedlist> | 229 | </orderedlist> |
186 | </para> | 230 | </para> |
187 | 231 | ||
188 | <para> | 232 | <para> |
189 | To create layers that are easier to maintain, you should consider the following: | 233 | To create layers that are easier to maintain, you should |
234 | consider the following: | ||
190 | <itemizedlist> | 235 | <itemizedlist> |
191 | <listitem><para>Avoid "overlaying" entire recipes from other layers in your | 236 | <listitem><para>Avoid "overlaying" entire recipes from |
192 | configuration. | 237 | other layers in your configuration. |
193 | In other words, don't copy an entire recipe into your layer and then modify it. | 238 | In other words, don't copy an entire recipe into your |
194 | Use <filename>.bbappend</filename> files to override the parts of the | 239 | layer and then modify it. |
195 | recipe you need to modify.</para></listitem> | 240 | Use <filename>.bbappend</filename> files to override the |
241 | parts of the recipe you need to modify. | ||
242 | </para></listitem> | ||
196 | <listitem><para>Avoid duplicating include files. | 243 | <listitem><para>Avoid duplicating include files. |
197 | Use <filename>.bbappend</filename> files for each recipe that uses an include | 244 | Use <filename>.bbappend</filename> files for each recipe |
198 | file. | 245 | that uses an include file. |
199 | Or, if you are introducing a new recipe that requires the included file, use the | 246 | Or, if you are introducing a new recipe that requires |
200 | path relative to the original layer directory to refer to the file. | 247 | the included file, use the path relative to the original |
201 | For example, use <filename>require recipes-core/somepackage/somefile.inc</filename> | 248 | layer directory to refer to the file. |
249 | For example, use | ||
250 | <filename>require recipes-core/somepackage/somefile.inc</filename> | ||
202 | instead of <filename>require somefile.inc</filename>. | 251 | instead of <filename>require somefile.inc</filename>. |
203 | If you're finding you have to overlay the include file, it could indicate a | 252 | If you're finding you have to overlay the include file, |
204 | deficiency in the include file in the layer to which it originally belongs. | 253 | it could indicate a deficiency in the include file in |
205 | If this is the case, you need to address that deficiency instead of overlaying | 254 | the layer to which it originally belongs. |
206 | the include file. | 255 | If this is the case, you need to address that deficiency |
207 | For example, consider how Qt 4 database support plug-ins are configured. | 256 | instead of overlaying the include file. |
208 | The Source Directory does not have | 257 | For example, consider how Qt 4 database support plug-ins |
209 | MySQL or PostgreSQL, however OpenEmbedded's | 258 | are configured. |
210 | layer <filename>meta-oe</filename> does. | 259 | The Source Directory does not have MySQL or PostgreSQL, |
211 | Consequently, <filename>meta-oe</filename> uses <filename>.bbappend</filename> | 260 | however OpenEmbedded's layer |
212 | files to modify the <filename>QT_SQL_DRIVER_FLAGS</filename> variable to enable | 261 | <filename>meta-oe</filename> does. |
213 | the appropriate plugins. | 262 | Consequently, <filename>meta-oe</filename> uses |
214 | This variable was added to the <filename>qt4.inc</filename> include file in | 263 | <filename>.bbappend</filename> files to modify the |
215 | the Source Directory specifically to allow the <filename>meta-oe</filename> layer | 264 | <filename>QT_SQL_DRIVER_FLAGS</filename> variable to |
216 | to be able to control which plugins are built.</para></listitem> | 265 | enable the appropriate plugins. |
266 | This variable was added to the | ||
267 | <filename>qt4.inc</filename> include file in the Source | ||
268 | Directory specifically to allow the | ||
269 | <filename>meta-oe</filename> layer to be able to control | ||
270 | which plugins are built.</para></listitem> | ||
217 | </itemizedlist> | 271 | </itemizedlist> |
218 | </para> | 272 | </para> |
219 | 273 | ||
220 | <para> | 274 | <para> |
221 | We also recommend the following: | 275 | We also recommend the following: |
222 | <itemizedlist> | 276 | <itemizedlist> |
223 | <listitem><para>Store custom layers in a Git repository that uses the | 277 | <listitem><para>Store custom layers in a Git repository |
224 | <filename>meta-<layer_name></filename> format.</para></listitem> | 278 | that uses the |
225 | <listitem><para>Clone the repository alongside other <filename>meta</filename> | 279 | <filename>meta-<layer_name></filename> format. |
226 | directories in the | 280 | </para></listitem> |
227 | <link linkend='source-directory'>Source Directory</link>.</para></listitem> | 281 | <listitem><para>Clone the repository alongside other |
282 | <filename>meta</filename> directories in the | ||
283 | <link linkend='source-directory'>Source Directory</link>. | ||
284 | </para></listitem> | ||
228 | </itemizedlist> | 285 | </itemizedlist> |
229 | Following these recommendations keeps your Source Directory and | 286 | Following these recommendations keeps your Source Directory and |
230 | its configuration entirely inside the Yocto Project's core base. | 287 | its configuration entirely inside the Yocto Project's core |
288 | base. | ||
231 | </para> | 289 | </para> |
232 | </section> | 290 | </section> |
233 | 291 | ||
@@ -235,12 +293,15 @@ | |||
235 | <title>Enabling Your Layer</title> | 293 | <title>Enabling Your Layer</title> |
236 | 294 | ||
237 | <para> | 295 | <para> |
238 | Before the OpenEmbedded build system can use your new layer, you need to enable it. | 296 | Before the OpenEmbedded build system can use your new layer, |
297 | you need to enable it. | ||
239 | To enable your layer, simply add your layer's path to the | 298 | To enable your layer, simply add your layer's path to the |
240 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-BBLAYERS'>BBLAYERS</ulink></filename> | 299 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-BBLAYERS'>BBLAYERS</ulink></filename> |
241 | variable in your <filename>conf/bblayers.conf</filename> file, which is found in the | 300 | variable in your <filename>conf/bblayers.conf</filename> file, |
301 | which is found in the | ||
242 | <link linkend='build-directory'>Build Directory</link>. | 302 | <link linkend='build-directory'>Build Directory</link>. |
243 | The following example shows how to enable a layer named <filename>meta-mylayer</filename>: | 303 | The following example shows how to enable a layer named |
304 | <filename>meta-mylayer</filename>: | ||
244 | <literallayout class='monospaced'> | 305 | <literallayout class='monospaced'> |
245 | LCONF_VERSION = "6" | 306 | LCONF_VERSION = "6" |
246 | 307 | ||
@@ -262,12 +323,13 @@ | |||
262 | </para> | 323 | </para> |
263 | 324 | ||
264 | <para> | 325 | <para> |
265 | BitBake parses each <filename>conf/layer.conf</filename> file as specified in the | 326 | BitBake parses each <filename>conf/layer.conf</filename> file |
266 | <filename>BBLAYERS</filename> variable within the <filename>conf/bblayers.conf</filename> | 327 | as specified in the <filename>BBLAYERS</filename> variable |
267 | file. | 328 | within the <filename>conf/bblayers.conf</filename> file. |
268 | During the processing of each <filename>conf/layer.conf</filename> file, BitBake adds the | 329 | During the processing of each |
269 | recipes, classes and configurations contained within the particular layer to the source | 330 | <filename>conf/layer.conf</filename> file, BitBake adds the |
270 | directory. | 331 | recipes, classes and configurations contained within the |
332 | particular layer to the source directory. | ||
271 | </para> | 333 | </para> |
272 | </section> | 334 | </section> |
273 | 335 | ||
@@ -275,48 +337,58 @@ | |||
275 | <title>Using .bbappend Files</title> | 337 | <title>Using .bbappend Files</title> |
276 | 338 | ||
277 | <para> | 339 | <para> |
278 | Recipes used to append metadata to other recipes are called BitBake append files. | 340 | Recipes used to append Metadata to other recipes are called |
279 | BitBake append files use the <filename>.bbappend</filename> file type suffix, while | 341 | BitBake append files. |
280 | the corresponding recipes to which metadata is being appended use the | 342 | BitBake append files use the <filename>.bbappend</filename> file |
281 | <filename>.bb</filename> file type suffix. | 343 | type suffix, while the corresponding recipes to which Metadata |
344 | is being appended use the <filename>.bb</filename> file type | ||
345 | suffix. | ||
282 | </para> | 346 | </para> |
283 | 347 | ||
284 | <para> | 348 | <para> |
285 | A <filename>.bbappend</filename> file allows your layer to make additions or | 349 | A <filename>.bbappend</filename> file allows your layer to make |
286 | changes to the content of another layer's recipe without having to copy the other | 350 | additions or changes to the content of another layer's recipe |
287 | recipe into your layer. | 351 | without having to copy the other recipe into your layer. |
288 | Your <filename>.bbappend</filename> file resides in your layer, while the underlying | 352 | Your <filename>.bbappend</filename> file resides in your layer, |
289 | <filename>.bb</filename> recipe file to which you are appending metadata | 353 | while the main <filename>.bb</filename> recipe file to |
290 | resides in a different layer. | 354 | which you are appending Metadata resides in a different layer. |
291 | </para> | 355 | </para> |
292 | 356 | ||
293 | <para> | 357 | <para> |
294 | Append files must have the same root name as the corresponding recipe. | 358 | Append files must have the same root name as the corresponding |
295 | For example, the append file <filename>someapp_&DISTRO;.bbappend</filename> must | 359 | recipe. |
296 | apply to <filename>someapp_&DISTRO;.bb</filename>. | 360 | For example, the append file |
297 | This means the original recipe and append file names are version number-specific. | 361 | <filename>someapp_&DISTRO;.bbappend</filename> must apply to |
298 | If the corresponding recipe is renamed to update to a newer version, the | 362 | <filename>someapp_&DISTRO;.bb</filename>. |
299 | underlying <filename>.bbappend</filename> file must be renamed as well. | 363 | This means the original recipe and append file names are version |
300 | During the build process, BitBake displays an error on starting if it detects a | 364 | number-specific. |
301 | <filename>.bbappend</filename> file that does not have a corresponding recipe | 365 | If the corresponding recipe is renamed to update to a newer |
302 | with a matching name. | 366 | version, the underlying <filename>.bbappend</filename> file must |
367 | be renamed as well. | ||
368 | During the build process, BitBake displays an error on starting | ||
369 | if it detects a <filename>.bbappend</filename> file that does | ||
370 | not have a corresponding recipe with a matching name. | ||
303 | See the | 371 | See the |
304 | <ulink url='&YOCTO_DOCS_REF_URL;#var-BB_DANGLINGAPPENDS_WARNONLY'><filename>BB_DANGLINGAPPENDS_WARNONLY</filename></ulink> | 372 | <ulink url='&YOCTO_DOCS_REF_URL;#var-BB_DANGLINGAPPENDS_WARNONLY'><filename>BB_DANGLINGAPPENDS_WARNONLY</filename></ulink> |
305 | variable for information on how to handle this error. | 373 | variable for information on how to handle this error. |
306 | </para> | 374 | </para> |
307 | 375 | ||
308 | <para> | 376 | <para> |
309 | Being able to append information to an existing recipe not only avoids duplication, | 377 | Being able to append information to an existing recipe not only |
310 | but also automatically applies recipe changes in a different layer to your layer. | 378 | avoids duplication, but also automatically applies recipe |
311 | If you were copying recipes, you would have to manually merge changes as they occur. | 379 | changes in a different layer to your layer. |
380 | If you were copying recipes, you would have to manually merge | ||
381 | changes as they occur. | ||
312 | </para> | 382 | </para> |
313 | 383 | ||
314 | <para> | 384 | <para> |
315 | As an example, consider the main formfactor recipe and a corresponding formfactor | 385 | As an example, consider the main formfactor recipe and a |
316 | append file both from the | 386 | corresponding formfactor append file both from the |
317 | <link linkend='source-directory'>Source Directory</link>. | 387 | <link linkend='source-directory'>Source Directory</link>. |
318 | Here is the main formfactor recipe, which is named <filename>formfactor_0.0.bb</filename> and | 388 | Here is the main formfactor recipe, which is named |
319 | located in the "meta" layer at <filename>meta/recipes-bsp/formfactor</filename>: | 389 | <filename>formfactor_0.0.bb</filename> and located in the |
390 | "meta" layer at | ||
391 | <filename>meta/recipes-bsp/formfactor</filename>: | ||
320 | <literallayout class='monospaced'> | 392 | <literallayout class='monospaced'> |
321 | DESCRIPTION = "Device formfactor information" | 393 | DESCRIPTION = "Device formfactor information" |
322 | SECTION = "base" | 394 | SECTION = "base" |
@@ -340,8 +412,10 @@ | |||
340 | fi | 412 | fi |
341 | } | 413 | } |
342 | </literallayout> | 414 | </literallayout> |
343 | Here is the append file, which is named <filename>formfactor_0.0.bbappend</filename> and is from the | 415 | Here is the append file, which is named |
344 | Crown Bay BSP Layer named <filename>meta-intel/meta-crownbay</filename>. | 416 | <filename>formfactor_0.0.bbappend</filename> and is from the |
417 | Crown Bay BSP Layer named | ||
418 | <filename>meta-intel/meta-crownbay</filename>. | ||
345 | The file is in <filename>recipes-bsp/formfactor</filename>: | 419 | The file is in <filename>recipes-bsp/formfactor</filename>: |
346 | <literallayout class='monospaced'> | 420 | <literallayout class='monospaced'> |
347 | FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" | 421 | FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" |
@@ -350,20 +424,24 @@ | |||
350 | </literallayout> | 424 | </literallayout> |
351 | This example adds or overrides files in | 425 | This example adds or overrides files in |
352 | <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink> | 426 | <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink> |
353 | within a <filename>.bbappend</filename> by extending the path BitBake uses to search for files. | 427 | within a <filename>.bbappend</filename> by extending the path |
428 | BitBake uses to search for files. | ||
354 | The most reliable way to do this is by prepending the | 429 | The most reliable way to do this is by prepending the |
355 | <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESEXTRAPATHS'><filename>FILESEXTRAPATHS</filename></ulink> | 430 | <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESEXTRAPATHS'><filename>FILESEXTRAPATHS</filename></ulink> |
356 | variable. | 431 | variable. |
357 | For example, if you have your files in a directory that is named the same as your package | 432 | For example, if you have your files in a directory that is named |
433 | the same as your package | ||
358 | (<ulink url='&YOCTO_DOCS_REF_URL;#var-PN'><filename>PN</filename></ulink>), | 434 | (<ulink url='&YOCTO_DOCS_REF_URL;#var-PN'><filename>PN</filename></ulink>), |
359 | you can add this directory by adding the following to your <filename>.bbappend</filename> file: | 435 | you can add this directory by adding the following to your |
436 | <filename>.bbappend</filename> file: | ||
360 | <literallayout class='monospaced'> | 437 | <literallayout class='monospaced'> |
361 | FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" | 438 | FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" |
362 | </literallayout> | 439 | </literallayout> |
363 | Using the immediate expansion assignment operator <filename>:=</filename> is important because | 440 | Using the immediate expansion assignment operator |
364 | of the reference to <filename>THISDIR</filename>. | 441 | <filename>:=</filename> is important because of the reference to |
365 | The trailing colon character is important as it ensures that items in the list remain | 442 | <filename>THISDIR</filename>. |
366 | colon-separated. | 443 | The trailing colon character is important as it ensures that |
444 | items in the list remain colon-separated. | ||
367 | <note><para>BitBake automatically defines the | 445 | <note><para>BitBake automatically defines the |
368 | <filename>THISDIR</filename> variable. | 446 | <filename>THISDIR</filename> variable. |
369 | You should never set this variable yourself. | 447 | You should never set this variable yourself. |
@@ -383,13 +461,15 @@ | |||
383 | 461 | ||
384 | <para> | 462 | <para> |
385 | Each layer is assigned a priority value. | 463 | Each layer is assigned a priority value. |
386 | Priority values control which layer takes precedence if there are recipe files with | 464 | Priority values control which layer takes precedence if there |
387 | the same name in multiple layers. | 465 | are recipe files with the same name in multiple layers. |
388 | For these cases, the recipe file from the layer with a higher priority number takes precedence. | 466 | For these cases, the recipe file from the layer with a higher |
389 | Priority values also affect the order in which multiple <filename>.bbappend</filename> files | 467 | priority number takes precedence. |
390 | for the same recipe are applied. | 468 | Priority values also affect the order in which multiple |
391 | You can either specify the priority manually, or allow the build system to calculate it | 469 | <filename>.bbappend</filename> files for the same recipe are |
392 | based on the layer's dependencies. | 470 | applied. |
471 | You can either specify the priority manually, or allow the | ||
472 | build system to calculate it based on the layer's dependencies. | ||
393 | </para> | 473 | </para> |
394 | 474 | ||
395 | <para> | 475 | <para> |
@@ -406,8 +486,9 @@ | |||
406 | <para>It is possible for a recipe with a lower version number | 486 | <para>It is possible for a recipe with a lower version number |
407 | <ulink url='&YOCTO_DOCS_REF_URL;#var-PV'><filename>PV</filename></ulink> | 487 | <ulink url='&YOCTO_DOCS_REF_URL;#var-PV'><filename>PV</filename></ulink> |
408 | in a layer that has a higher priority to take precedence.</para> | 488 | in a layer that has a higher priority to take precedence.</para> |
409 | <para>Also, the layer priority does not currently affect the precedence order of | 489 | <para>Also, the layer priority does not currently affect the |
410 | <filename>.conf</filename> or <filename>.bbclass</filename> files. | 490 | precedence order of <filename>.conf</filename> |
491 | or <filename>.bbclass</filename> files. | ||
411 | Future versions of BitBake might address this.</para> | 492 | Future versions of BitBake might address this.</para> |
412 | </note> | 493 | </note> |
413 | </section> | 494 | </section> |
@@ -416,11 +497,12 @@ | |||
416 | <title>Managing Layers</title> | 497 | <title>Managing Layers</title> |
417 | 498 | ||
418 | <para> | 499 | <para> |
419 | You can use the BitBake layer management tool to provide a view into the structure of | 500 | You can use the BitBake layer management tool to provide a view |
420 | recipes across a multi-layer project. | 501 | into the structure of recipes across a multi-layer project. |
421 | Being able to generate output that reports on configured layers with their paths and | 502 | Being able to generate output that reports on configured layers |
422 | priorities and on <filename>.bbappend</filename> files and their applicable recipes | 503 | with their paths and priorities and on |
423 | can help to reveal potential problems. | 504 | <filename>.bbappend</filename> files and their applicable |
505 | recipes can help to reveal potential problems. | ||
424 | </para> | 506 | </para> |
425 | 507 | ||
426 | <para> | 508 | <para> |
@@ -431,46 +513,64 @@ | |||
431 | The following list describes the available commands: | 513 | The following list describes the available commands: |
432 | <itemizedlist> | 514 | <itemizedlist> |
433 | <listitem><para><filename><emphasis>help:</emphasis></filename> | 515 | <listitem><para><filename><emphasis>help:</emphasis></filename> |
434 | Displays general help or help on a specified command.</para></listitem> | 516 | Displays general help or help on a specified command. |
517 | </para></listitem> | ||
435 | <listitem><para><filename><emphasis>show-layers:</emphasis></filename> | 518 | <listitem><para><filename><emphasis>show-layers:</emphasis></filename> |
436 | Show the current configured layers.</para></listitem> | 519 | Show the current configured layers. |
520 | </para></listitem> | ||
437 | <listitem><para><filename><emphasis>show-recipes:</emphasis></filename> | 521 | <listitem><para><filename><emphasis>show-recipes:</emphasis></filename> |
438 | Lists available recipes and the layers that provide them. | 522 | Lists available recipes and the layers that provide them. |
439 | </para></listitem> | 523 | </para></listitem> |
440 | <listitem><para><filename><emphasis>show-overlayed:</emphasis></filename> | 524 | <listitem><para><filename><emphasis>show-overlayed:</emphasis></filename> |
441 | Lists overlayed recipes. | 525 | Lists overlayed recipes. |
442 | A recipe is overlayed when a recipe with the same name exists in another layer | 526 | A recipe is overlayed when a recipe with the same name |
443 | that has a higher layer priority. | 527 | exists in another layer that has a higher layer |
528 | priority. | ||
444 | </para></listitem> | 529 | </para></listitem> |
445 | <listitem><para><filename><emphasis>show-appends:</emphasis></filename> | 530 | <listitem><para><filename><emphasis>show-appends:</emphasis></filename> |
446 | Lists <filename>.bbappend</filename> files and the recipe files to which | 531 | Lists <filename>.bbappend</filename> files and the |
447 | they apply.</para></listitem> | 532 | recipe files to which they apply. |
533 | </para></listitem> | ||
448 | <listitem><para><filename><emphasis>show-cross-depends:</emphasis></filename> | 534 | <listitem><para><filename><emphasis>show-cross-depends:</emphasis></filename> |
449 | Lists dependency relationships between recipes that cross layer boundaries. | 535 | Lists dependency relationships between recipes that |
536 | cross layer boundaries. | ||
450 | </para></listitem> | 537 | </para></listitem> |
451 | <listitem><para><filename><emphasis>flatten:</emphasis></filename> | 538 | <listitem><para><filename><emphasis>flatten:</emphasis></filename> |
452 | Flattens the layer configuration into a separate output directory. | 539 | Flattens the layer configuration into a separate output |
453 | Flattening your layer configuration builds a "flattened" directory that contains | 540 | directory. |
454 | the contents of all layers, with any overlayed recipes removed and any | 541 | Flattening your layer configuration builds a "flattened" |
455 | <filename>.bbappend</filename> files appended to the corresponding recipes. | 542 | directory that contains the contents of all layers, |
456 | You might have to perform some manual cleanup of the flattened layer as follows: | 543 | with any overlayed recipes removed and any |
544 | <filename>.bbappend</filename> files appended to the | ||
545 | corresponding recipes. | ||
546 | You might have to perform some manual cleanup of the | ||
547 | flattened layer as follows: | ||
457 | <itemizedlist> | 548 | <itemizedlist> |
458 | <listitem><para>Non-recipe files (such as patches) are overwritten. | 549 | <listitem><para>Non-recipe files (such as patches) |
459 | The flatten command shows a warning for these files.</para></listitem> | 550 | are overwritten. |
460 | <listitem><para>Anything beyond the normal layer setup has been added to | 551 | The flatten command shows a warning for these |
461 | the <filename>layer.conf</filename> file. | 552 | files. |
462 | Only the lowest priority layer's <filename>layer.conf</filename> is used. | 553 | </para></listitem> |
554 | <listitem><para>Anything beyond the normal layer | ||
555 | setup has been added to the | ||
556 | <filename>layer.conf</filename> file. | ||
557 | Only the lowest priority layer's | ||
558 | <filename>layer.conf</filename> is used. | ||
463 | </para></listitem> | 559 | </para></listitem> |
464 | <listitem><para>Overridden and appended items from <filename>.bbappend</filename> | 560 | <listitem><para>Overridden and appended items from |
465 | files need to be cleaned up. | 561 | <filename>.bbappend</filename> files need to be |
466 | The contents of each <filename>.bbappend</filename> end up in the | 562 | cleaned up. |
563 | The contents of each | ||
564 | <filename>.bbappend</filename> end up in the | ||
467 | flattened recipe. | 565 | flattened recipe. |
468 | However, if there are appended or changed variable values, you need to tidy | 566 | However, if there are appended or changed |
469 | these up yourself. | 567 | variable values, you need to tidy these up |
568 | yourself. | ||
470 | Consider the following example. | 569 | Consider the following example. |
471 | Here, the <filename>bitbake-layers</filename> command adds the line | 570 | Here, the <filename>bitbake-layers</filename> |
472 | <filename>#### bbappended ...</filename> so that you know where the following | 571 | command adds the line |
473 | lines originate: | 572 | <filename>#### bbappended ...</filename> so that |
573 | you know where the following lines originate: | ||
474 | <literallayout class='monospaced'> | 574 | <literallayout class='monospaced'> |
475 | ... | 575 | ... |
476 | DESCRIPTION = "A useful utility" | 576 | DESCRIPTION = "A useful utility" |
@@ -483,7 +583,8 @@ | |||
483 | DESCRIPTION = "Customized utility" | 583 | DESCRIPTION = "Customized utility" |
484 | EXTRA_OECONF += "--enable-somethingelse" | 584 | EXTRA_OECONF += "--enable-somethingelse" |
485 | </literallayout> | 585 | </literallayout> |
486 | Ideally, you would tidy up these utilities as follows: | 586 | Ideally, you would tidy up these utilities as |
587 | follows: | ||
487 | <literallayout class='monospaced'> | 588 | <literallayout class='monospaced'> |
488 | ... | 589 | ... |
489 | DESCRIPTION = "Customized utility" | 590 | DESCRIPTION = "Customized utility" |
@@ -495,6 +596,134 @@ | |||
495 | </itemizedlist> | 596 | </itemizedlist> |
496 | </para> | 597 | </para> |
497 | </section> | 598 | </section> |
599 | |||
600 | <section id='creating-a-general-layer-using-the-yocto-layer-script'> | ||
601 | <title>Creating a General Layer Using the yocto-layer Script</title> | ||
602 | |||
603 | <para> | ||
604 | The <filename>yocto-layer</filename> script simplifies | ||
605 | creating a new general layer. | ||
606 | <note> | ||
607 | For information on BSP layers, see the | ||
608 | "<ulink url='&YOCTO_DOCS_BSP_URL;#bsp-layers'>BSP Layers</ulink>" | ||
609 | section in the Yocto Project Board Specific (BSP) | ||
610 | Developer's Guide. | ||
611 | </note> | ||
612 | The default mode of the script's operation is to prompt you for | ||
613 | information needed to generate the layer: | ||
614 | <itemizedlist> | ||
615 | <listitem><para>The layer priority | ||
616 | </para></listitem> | ||
617 | <listitem><para>Whether or not to create a sample recipe. | ||
618 | </para></listitem> | ||
619 | <listitem><para>Whether or not to create a sample | ||
620 | append file. | ||
621 | </para></listitem> | ||
622 | </itemizedlist> | ||
623 | </para> | ||
624 | |||
625 | <para> | ||
626 | You use the <filename>yocto-layer create</filename> sub-command | ||
627 | to create a new general layer. | ||
628 | In its simplest form, you can create a layer as follows: | ||
629 | <literallayout class='monospaced'> | ||
630 | $ yocto-layer create mylayer | ||
631 | </literallayout> | ||
632 | The previous example creates a layer named | ||
633 | <filename>meta-mylayer</filename> in the current directory. | ||
634 | </para> | ||
635 | |||
636 | <para> | ||
637 | As the <filename>yocto-layer create</filename> command runs, | ||
638 | default values for the prompts appear in brackets. | ||
639 | Pressing enter without supplying anything on the command line | ||
640 | or pressing enter and providing an invalid response causes the | ||
641 | script to accept the default value. | ||
642 | Once the script completes, the new layer | ||
643 | is created in the current working directory. | ||
644 | The script names the layer according to the string you provide | ||
645 | and the prepended <filename>meta-</filename> string. | ||
646 | </para> | ||
647 | |||
648 | <para> | ||
649 | If you choose to not generate a sample recipe or append file, | ||
650 | the script creates the following within the layer: | ||
651 | <itemizedlist> | ||
652 | <listitem><para><emphasis>The <filename>conf</filename> | ||
653 | directory:</emphasis> | ||
654 | This directory contains the layers | ||
655 | <filename>.conf</filename>. | ||
656 | The root name for the file is the same as the root name | ||
657 | your provided for the layer. | ||
658 | </para></listitem> | ||
659 | <listitem><para><emphasis>The | ||
660 | <filename>COPYING.MIT</filename>:</emphasis> | ||
661 | The copyright and use notice for the software. | ||
662 | </para></listitem> | ||
663 | <listitem><para><emphasis>The <filename>README</filename> | ||
664 | file:</emphasis> | ||
665 | A file describing the contents of your new layer. | ||
666 | </para></listitem> | ||
667 | </itemizedlist> | ||
668 | </para> | ||
669 | |||
670 | <para> | ||
671 | If you choose to generate a sample recipe file, the script | ||
672 | prompts you for the name for the recipe and then creates it | ||
673 | in <filename><layer>/recipes-example/example/</filename>. | ||
674 | in a directory named <filename>recipes-example</filename>. | ||
675 | The script creates a <filename>.bb</filename> file and a | ||
676 | directory, which contains a sample | ||
677 | <filename>helloworld.c</filename>source file and along with | ||
678 | a sample patch file. | ||
679 | If you do not provide a recipe name, the script uses | ||
680 | "example". | ||
681 | </para> | ||
682 | |||
683 | <para> | ||
684 | If you choose to generate a sample append file, the script | ||
685 | prompts you for the name for the file and then creates it | ||
686 | in <filename><layer>/recipes-example-bbappend/example-bbappend/</filename>. | ||
687 | The script creates a <filename>.bbappend</filename> file and a | ||
688 | directory, which contains a sample patch file. | ||
689 | If you do not provide a recipe name, the script uses | ||
690 | "example". | ||
691 | The script also prompts you for the version of the append file. | ||
692 | The version should match the recipe to which the append file | ||
693 | is associated. | ||
694 | </para> | ||
695 | |||
696 | <para> | ||
697 | The easiest way to see how the <filename>yocto-layer</filename> | ||
698 | script works is to experiment with the script. | ||
699 | You can also read the usage information by entering the | ||
700 | following: | ||
701 | <literallayout class='monospaced'> | ||
702 | $ yocto-layer help | ||
703 | </literallayout> | ||
704 | </para> | ||
705 | |||
706 | <para> | ||
707 | Once you create your general layer, you must add it to your | ||
708 | <filename>bblayers.conf</filename> file. | ||
709 | Here is an example: | ||
710 | <literallayout class='monospaced'> | ||
711 | BBLAYERS = ?" \ | ||
712 | /usr/local/src/yocto/meta \ | ||
713 | /usr/local/src/yocto/meta-yocto \ | ||
714 | /usr/local/src/yocto/meta-yocto-bsp \ | ||
715 | /usr/local/src/yocto/meta-mylayer \ | ||
716 | " | ||
717 | |||
718 | BBLAYERS_NON_REMOVABLE ?= " \ | ||
719 | /usr/local/src/yocto/meta \ | ||
720 | /usr/local/src/yocto/meta-yocto \ | ||
721 | " | ||
722 | </literallayout> | ||
723 | Adding the layer to this file enables the build system to | ||
724 | the layer during the build. | ||
725 | </para> | ||
726 | </section> | ||
498 | </section> | 727 | </section> |
499 | 728 | ||
500 | <section id='usingpoky-extend-customimage'> | 729 | <section id='usingpoky-extend-customimage'> |