summaryrefslogtreecommitdiffstats
path: root/documentation/poky-ref-manual/technical-details.xml
diff options
context:
space:
mode:
Diffstat (limited to 'documentation/poky-ref-manual/technical-details.xml')
-rw-r--r--documentation/poky-ref-manual/technical-details.xml229
1 files changed, 229 insertions, 0 deletions
diff --git a/documentation/poky-ref-manual/technical-details.xml b/documentation/poky-ref-manual/technical-details.xml
new file mode 100644
index 0000000000..8f83ecb3a1
--- /dev/null
+++ b/documentation/poky-ref-manual/technical-details.xml
@@ -0,0 +1,229 @@
1<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
2"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
3<chapter id='technical-details'>
4<title>Technical Details</title>
5
6 <para>
7 This chapter provides technical details for various parts of the Yocto Project.
8 Currently, topics include Yocto Project components and shared state (sstate) cache.
9 </para>
10
11<section id='usingpoky-components'>
12 <title>Yocto Project Components</title>
13
14 <para>
15 The BitBake task executor together with various types of configuration files form the
16 Yocto Project core.
17 This section overviews the BitBake task executor and the
18 configuration files by describing what they are used for and how they interact.
19 </para>
20
21 <para>
22 BitBake handles the parsing and execution of the data files.
23 The data itself is of various types:
24 <itemizedlist>
25 <listitem><para><emphasis>Recipes:</emphasis> Provides details about particular
26 pieces of software</para></listitem>
27 <listitem><para><emphasis>Class Data:</emphasis> An abstraction of common build
28 information (e.g. how to build a Linux kernel).</para></listitem>
29 <listitem><para><emphasis>Configuration Data:</emphasis> Defines machine-specific settings,
30 policy decisions, etc.
31 Configuration data acts as the glue to bind everything together.</para></listitem>
32 </itemizedlist>
33 For more information on data, see the
34 <ulink url='http://www.yoctoproject.org/docs/latest/dev-manual/dev-manual.html#yocto-project-terms'>
35 Yocto Project Terms</ulink> section in
36 <ulink url='http://www.yoctoproject.org/docs/latest/dev-manual/dev-manual.html'>
37 The Yocto Project Development Manual</ulink>.
38 </para>
39
40 <para>
41 BitBake knows how to combine multiple data sources together and refers to each data source
42 as a <link linkend='usingpoky-changes-layers'>'layer'</link>.
43 </para>
44
45 <para>
46 Following are some brief details on these core components.
47 For more detailed information on these components see the
48 <link linkend='ref-structure'>'Reference: Directory Structure'</link>
49 appendix.
50 </para>
51
52 <section id='usingpoky-components-bitbake'>
53 <title>BitBake</title>
54
55 <para>
56 BitBake is the tool at the heart of the Yocto Project and is responsible
57 for parsing the metadata, generating a list of tasks from it,
58 and then executing those tasks.
59 To see a list of the options BitBake supports, use the following help command:
60 <literallayout class='monospaced'>
61 $ bitbake --help
62 </literallayout>
63 </para>
64
65 <para>
66 The most common usage for BitBake is <filename>bitbake &lt;packagename&gt;</filename>, where
67 <filename>packagename</filename> is the name of the package you want to build
68 (referred to as the "target" in this manual).
69 The target often equates to the first part of a <filename>.bb</filename> filename.
70 So, to run the <filename>matchbox-desktop_1.2.3.bb</filename> file, you
71 might type the following:
72 <literallayout class='monospaced'>
73 $ bitbake matchbox-desktop
74 </literallayout>
75 Several different versions of <filename>matchbox-desktop</filename> might exist.
76 BitBake chooses the one selected by the distribution configuration.
77 You can get more details about how BitBake chooses between different
78 target versions and providers in the
79 <link linkend='ref-bitbake-providers'>Preferences and Providers</link> section.
80 </para>
81
82 <para>
83 BitBake also tries to execute any dependent tasks first.
84 So for example, before building <filename>matchbox-desktop</filename>, BitBake
85 would build a cross compiler and <filename>eglibc</filename> if they had not already
86 been built.
87 <note>This release of the Yocto Project does not support the <filename>glibc</filename>
88 GNU version of the Unix standard C library. By default, the Yocto Project builds with
89 <filename>eglibc</filename>.</note>
90 </para>
91
92 <para>
93 A useful BitBake option to consider is the <filename>-k</filename> or
94 <filename>--continue</filename> option.
95 This option instructs BitBake to try and continue processing the job as much
96 as possible even after encountering an error.
97 When an error occurs, the target that
98 failed and those that depend on it cannot be remade.
99 However, when you use this option other dependencies can still be processed.
100 </para>
101 </section>
102
103 <section id='usingpoky-components-metadata'>
104 <title>Metadata (Recipes)</title>
105
106 <para>
107 The <filename>.bb</filename> files are usually referred to as "recipes."
108 In general, a recipe contains information about a single piece of software.
109 The information includes the location from which to download the source patches
110 (if any are needed), which special configuration options to apply,
111 how to compile the source files, and how to package the compiled output.
112 </para>
113
114 <para>
115 The term "package" can also be used to describe recipes.
116 However, since the same word is used for the packaged output from the Yocto
117 Project (i.e. <filename>.ipk</filename> or <filename>.deb</filename> files),
118 this document avoids using the term "package" to refer to recipes.
119 </para>
120 </section>
121
122 <section id='usingpoky-components-classes'>
123 <title>Classes</title>
124
125 <para>
126 Class files (<filename>.bbclass</filename>) contain information that is useful to share
127 between metadata files.
128 An example is the Autotools class, which contains
129 common settings for any application that Autotools uses.
130 The <link linkend='ref-classes'>Reference: Classes</link> appendix provides details
131 about common classes and how to use them.
132 </para>
133 </section>
134
135 <section id='usingpoky-components-configuration'>
136 <title>Configuration</title>
137
138 <para>
139 The configuration files (<filename>.conf</filename>) define various configuration variables
140 that govern the Yocto Project build process.
141 These files fall into several areas that define machine configuration options,
142 distribution configuration options, compiler tuning options, general common configuration
143 options and user configuration options (<filename>local.conf</filename>, which is found
144 in the Yocto Project files build directory).
145 </para>
146 </section>
147</section>
148
149<section id="considering-shared-state-cache">
150 <title>Considering Shared State Cache</title>
151
152 <para>
153 By design, the Yocto Project builds everything from scratch unless it can determine that
154 a given task's inputs have not changed.
155 While building from scratch ensures that everything is current, it does also
156 mean that a lot of time could be spent rebuiding things that don't necessarily need built.
157 </para>
158
159 <para>
160 The Yocto Project build process uses a shared state caching scheme to avoid having to
161 rebuild software when it is not necessary.
162 Because the build time for a Yocto image can be significant, it is helpful to try and
163 determine what really needs built and what can be skipped given a particular project's
164 build process.
165 </para>
166
167 <para>
168 The scheme that the Yocto Project uses involves checksum generation and comparison for
169 a task's inputs.
170 The scheme also employs an area of memory called the shared state cache that is
171 pointed to by the <filename>SSTATE_DIR</filename> variable.
172 This area contains task output generated from a previous build.
173 If a given task's checksum matches the checksum of a previous build for the same
174 task, the build process uses the state of the cache rather than rerunning that
175 task.
176 </para>
177
178 <para>
179 The previous paragraph is a simplistic explanation of how the build process
180 uses checksums and shared state memory cache to avoide building tasks that
181 don't need built.
182 If you want a bit more explanation on the topic,
183 see "<ulink url='https://lists.yoctoproject.org/pipermail/yocto/2011-March/003366.html'>Shared
184 State - What does it mean and why should I care?</ulink>" from the Yocto
185 Project discussion archives.
186 </para>
187
188 <para>
189 As with all schemes, this one has some drawbacks.
190 It is possible that you could make implicit changes that are not factored into the checksum
191 calculation, but do affect a task's output.
192 A good example is perhaps when a tool changes its output.
193 Let's say that the output of <filename>rpmdeps</filename> needed to change.
194 The result of the change should be that all the "package", "package_write_rpm",
195 and "package_deploy-rpm" sstate-cache items would become invalid.
196 But, because this is a change that is external to the code and therefore implicit,
197 the associated sstate-cache items do not become invalidated.
198 In this case, the build process would use the cache items rather than running the
199 task again.
200 Obviously, these types of implicit changes can cause problems.
201 </para>
202
203 <para>
204 To avoid these problems during the build, you need to understand the effects of any
205 change you make.
206 Note that any changes you make directly to a function automatically are factored into
207 the checksum calculation and thus, will invalidate the associated area of sstate cache.
208 You need to be aware of any implicit changes that are not obvious changes to the
209 code and could affect the output of a given task.
210 Once you are aware of such a change, you can take steps to invalidate the cache
211 and force the task to run.
212 The step to take is as simple as changing a function's comments in the source code.
213 For example, to invalidate package sstate files, change the comment statments
214 of <filename>do_package</filename> or one of the functions it calls.
215 The change is purely cosmetic, but it causes the checksum to be recalculated and
216 forces the task to be run again.
217 </para>
218
219 <note>
220 For an example of a commit that makes a cosmetic change to invalidate an sstate,
221 see this
222 <ulink url='http://git.yoctoproject.org/cgit.cgi/poky/commit/meta/classes/package.bbclass?id=737f8bbb4f27b4837047cb9b4fbfe01dfde36d54'>commit</ulink>.
223 </note>
224</section>
225
226</chapter>
227<!--
228vim: expandtab tw=80 ts=4
229-->