diff options
-rw-r--r-- | documentation/poky-ref-manual/ref-bitbake.xml | 269 |
1 files changed, 135 insertions, 134 deletions
diff --git a/documentation/poky-ref-manual/ref-bitbake.xml b/documentation/poky-ref-manual/ref-bitbake.xml index cf019aabcd..1a98b048be 100644 --- a/documentation/poky-ref-manual/ref-bitbake.xml +++ b/documentation/poky-ref-manual/ref-bitbake.xml | |||
@@ -28,15 +28,15 @@ | |||
28 | <title>Parsing</title> | 28 | <title>Parsing</title> |
29 | 29 | ||
30 | <para> | 30 | <para> |
31 | The first thing BitBake does is work out its configuration by | 31 | BitBake parses configuration files, classes, and <filename>.bb</filename> files. |
32 | looking for a file called <filename>bitbake.conf</filename>. | 32 | </para> |
33 | BitBake examines the <varname>BBPATH</varname> environment | 33 | |
34 | variable looking for a <filename class="directory">conf/</filename> | 34 | <para> |
35 | directory that contains a <filename>bitbake.conf</filename> file. | 35 | The first thing BitBake does is look for the <filename>bitbake.conf</filename> file. |
36 | BitBake adds the first <filename>bitbake.conf</filename> file found in | 36 | Poky keeps this file in <filename class="directory">meta/conf/</filename>. |
37 | <varname>BBPATH</varname> (similar to the PATH environment variable). | 37 | BitBake finds it by examining the <varname>BBPATH</varname> environment |
38 | For Poky, <filename>bitbake.conf</filename> is found in <filename | 38 | variable and looking for the <filename class="directory">meta/conf/</filename> |
39 | class="directory">meta/conf/</filename>. | 39 | directory. |
40 | </para> | 40 | </para> |
41 | 41 | ||
42 | <para> | 42 | <para> |
@@ -75,12 +75,12 @@ | |||
75 | </para> | 75 | </para> |
76 | 76 | ||
77 | <para> | 77 | <para> |
78 | After the parsing of the configuration files is complete, the | 78 | After classes are included, the |
79 | variable <glossterm><link linkend='var-BBFILES'>BBFILES</link></glossterm> | 79 | variable <glossterm><link linkend='var-BBFILES'>BBFILES</link></glossterm> |
80 | is set, usually in | 80 | is set, usually in |
81 | <filename>local.conf</filename>, and defines the list of places to search for | 81 | <filename>local.conf</filename>, and defines the list of places to search for |
82 | <filename class="extension">.bb</filename> files. | 82 | <filename class="extension">.bb</filename> files. |
83 | By default this specifies the <filename class="directory">meta/packages/ | 83 | By default, the BBFILES variable specifies the <filename class="directory">meta/packages/ |
84 | </filename> directory within Poky, but other directories such as | 84 | </filename> directory within Poky, but other directories such as |
85 | <filename class="directory">meta-extras/</filename> can be included | 85 | <filename class="directory">meta-extras/</filename> can be included |
86 | too. | 86 | too. |
@@ -92,19 +92,19 @@ | |||
92 | BitBake parses each <filename class="extension">.bb</filename> file in BBFILES and | 92 | BitBake parses each <filename class="extension">.bb</filename> file in BBFILES and |
93 | stores the values of various variables. | 93 | stores the values of various variables. |
94 | In summary, for each <filename class="extension">.bb</filename> | 94 | In summary, for each <filename class="extension">.bb</filename> |
95 | file the configuration + base class of variables are set, followed | 95 | file the configuration plus the base class of variables are set, followed |
96 | by the data in the <filename class="extension">.bb</filename> file | 96 | by the data in the <filename class="extension">.bb</filename> file |
97 | itself, followed by any inherit commands that | 97 | itself, followed by any inherit commands that |
98 | <filename class="extension">.bb</filename> file might contain. | 98 | <filename class="extension">.bb</filename> file might contain. |
99 | </para> | 99 | </para> |
100 | 100 | ||
101 | <para> | 101 | <para> |
102 | Parsing <filename class="extension">.bb</filename> files is a time | 102 | Because parsing <filename class="extension">.bb</filename> files is a time |
103 | consuming process, so a cache is kept to speed up subsequent parsing. | 103 | consuming process, a cache is kept to speed up subsequent parsing. |
104 | This cache is invalid if the timestamp of the <filename class="extension">.bb</filename> | 104 | This cache is invalid if the timestamp of the <filename class="extension">.bb</filename> |
105 | file itself has changed, or if the timestamps of any of the include, | 105 | file itself changes, or if the timestamps of any of the include, |
106 | configuration or class files the <filename class="extension">.bb</filename> | 106 | configuration or class files the <filename class="extension">.bb</filename> |
107 | file depends on have changed. | 107 | file depends on changes. |
108 | </para> | 108 | </para> |
109 | </section> | 109 | </section> |
110 | 110 | ||
@@ -113,58 +113,53 @@ | |||
113 | 113 | ||
114 | <para> | 114 | <para> |
115 | Once all the <filename class="extension">.bb</filename> files have been | 115 | Once all the <filename class="extension">.bb</filename> files have been |
116 | parsed, BitBake will proceed to build "poky-image-sato" (or whatever was | 116 | parsed, BitBake starts to build the target (poky-image-sato in the previous section's |
117 | specified on the commandline) and looks for providers of that target. | 117 | example) and looks for providers of that target. |
118 | Once a provider is selected, BitBake resolves all the dependencies for | 118 | Once a provider is selected, BitBake resolves all the dependencies for |
119 | the target. In the case of "poky-image-sato", it would lead to | 119 | the target. |
120 | <filename>task-base.bb</filename> | 120 | In the case of "poky-image-sato", it would lead to <filename>task-base.bb</filename>, |
121 | which in turn would lead to packages like <application>Contacts</application>, | 121 | which in turn leads to packages like <application>Contacts</application>, |
122 | <application>Dates</application>, <application>BusyBox</application> | 122 | <application>Dates</application> and <application>BusyBox</application>. |
123 | and these in turn depend on glibc and the toolchain. | 123 | These packages in turn depend on glibc and the toolchain. |
124 | </para> | 124 | </para> |
125 | 125 | ||
126 | <para> | 126 | <para> |
127 | Sometimes a target might have multiple providers and a common example | 127 | Sometimes a target might have multiple providers. |
128 | is "virtual/kernel" that is provided by each kernel package. Each machine | 128 | An common example is "virtual/kernel", which is provided by each kernel package. |
129 | will often elect the best provider of its kernel with a line like the | 129 | Each machine often elects the best kernel provider by using a line similar to the |
130 | following in the machine configuration file: | 130 | following in the machine configuration file: |
131 | </para> | 131 | </para> |
132 | <programlisting><glossterm><link linkend='var-PREFERRED_PROVIDER'>PREFERRED_PROVIDER</link></glossterm>_virtual/kernel = "linux-rp"</programlisting> | 132 | |
133 | <programlisting> | ||
134 | PREFERRED_PROVIDER_virtual/kernel = "linux-rp" | ||
135 | </programlisting> | ||
136 | |||
133 | <para> | 137 | <para> |
134 | The default <glossterm><link linkend='var-PREFERRED_PROVIDER'> | 138 | The default <glossterm><link linkend='var-PREFERRED_PROVIDER'>PREFERRED_PROVIDER</link></glossterm> |
135 | PREFERRED_PROVIDER</link></glossterm> is the provider with the same name as | 139 | is the provider with the same name as the target. |
136 | the target. | ||
137 | </para> | 140 | </para> |
138 | 141 | ||
139 | <para> | 142 | <para> |
140 | Understanding how providers are chosen is complicated by the fact | 143 | Understanding how providers are chosen is made complicated by the fact |
141 | multiple versions might be present. BitBake defaults to the highest | 144 | that multiple versions might exist. |
142 | version of a provider by default. Version comparisons are made using | 145 | BitBake defaults to the highest version of a provider. |
143 | the same method as Debian. The <glossterm><link | 146 | Version comparisons are made using the same method as Debian. |
144 | linkend='var-PREFERRED_VERSION'>PREFERRED_VERSION</link></glossterm> | 147 | You can use the <glossterm><link linkend='var-PREFERRED_VERSION'>PREFERRED_VERSION</link></glossterm> |
145 | variable can be used to specify a particular version | 148 | variable to specify a particular version (usually in the distro configuration). |
146 | (usually in the distro configuration) but the order can | 149 | You can influence the order by using the |
147 | also be influenced by the <glossterm><link | 150 | <glossterm><link linkend='var-DEFAULT_PREFERENCE'>DEFAULT_PREFERENCE</link></glossterm> |
148 | linkend='var-DEFAULT_PREFERENCE'>DEFAULT_PREFERENCE</link></glossterm> | 151 | variable. |
149 | variable. By default files | 152 | By default, files have a preference of "0". |
150 | have a preference of "0". Setting the | 153 | Setting the DEFAULT_PREFERENCE to "-1" makes the package unlikely to be used unless it is |
151 | <glossterm><link | 154 | explicitly referenced. |
152 | linkend='var-DEFAULT_PREFERENCE'>DEFAULT_PREFERENCE</link></glossterm> to "-1" will | 155 | Setting the DEFAULT_PREFERENCE to "1" makes it likely the package is used. |
153 | make a package unlikely to be used unless it was explicitly referenced and | 156 | PREFERRED_VERSION overrides any DEFAULT_PREFERENCE setting. |
154 | "1" makes it likely the package will be used. | 157 | DEFAULT_PREFERENCE is often used to mark newer and more experimental package |
155 | <glossterm><link | 158 | versions until they have undergone sufficient testing to be considered stable. |
156 | linkend='var-PREFERRED_VERSION'>PREFERRED_VERSION</link></glossterm> overrides | ||
157 | any <glossterm><link | ||
158 | linkend='var-DEFAULT_PREFERENCE'>DEFAULT_PREFERENCE</link></glossterm>. <glossterm><link | ||
159 | linkend='var-DEFAULT_PREFERENCE'>DEFAULT_PREFERENCE</link></glossterm> | ||
160 | is often used to mark more | ||
161 | experimental new versions of packages until they've undergone sufficient | ||
162 | testing to be considered stable. | ||
163 | </para> | 159 | </para> |
164 | 160 | ||
165 | <para> | 161 | <para> |
166 | The end result is that internally, BitBake has now built a list of | 162 | In summary, BitBake has created a list of providers, which is prioritized, for each target. |
167 | providers for each target it needs in order of priority. | ||
168 | </para> | 163 | </para> |
169 | </section> | 164 | </section> |
170 | 165 | ||
@@ -172,18 +167,20 @@ | |||
172 | <title>Dependencies</title> | 167 | <title>Dependencies</title> |
173 | 168 | ||
174 | <para> | 169 | <para> |
175 | Each target BitBake builds consists of multiple tasks (e.g. fetch, | 170 | Each target BitBake builds consists of multiple tasks such as fetch, unpack, patch, configure, |
176 | unpack, patch, configure, compile etc.). For best performance on | 171 | and compile. |
177 | multi-core systems, BitBake considers each task as an independent | 172 | For best performance on multi-core systems, BitBake considers each task as an independent |
178 | entity with a set of dependencies. There are many variables that | 173 | entity with its own set of dependencies. |
179 | are used to signify these dependencies and more information can be found | 174 | </para> |
180 | about these in the <ulink url='http://bitbake.berlios.de/manual/'> | 175 | |
181 | BitBake manual</ulink>. At a basic level it is sufficient to know | 176 | <para> |
182 | that BitBake uses the <glossterm><link | 177 | Dependencies are defined through several variables. |
183 | linkend='var-DEPENDS'>DEPENDS</link></glossterm> and | 178 | You can find information about variables BitBake uses in the |
184 | <glossterm><link linkend='var-RDEPENDS'>RDEPENDS</link></glossterm> variables when | 179 | <ulink url='http://bitbake.berlios.de/manual/'>BitBake manual</ulink>. |
185 | calculating dependencies and descriptions of these variables are | 180 | At a basic level it is sufficient to know that BitBake uses the |
186 | available through the links. | 181 | <glossterm><link linkend='var-DEPENDS'>DEPENDS</link></glossterm> and |
182 | <glossterm><link linkend='var-RDEPENDS'>RDEPENDS</link></glossterm> variables when | ||
183 | calculating dependencies. | ||
187 | </para> | 184 | </para> |
188 | 185 | ||
189 | </section> | 186 | </section> |
@@ -193,69 +190,75 @@ | |||
193 | 190 | ||
194 | <para> | 191 | <para> |
195 | Based on the generated list of providers and the dependency information, | 192 | Based on the generated list of providers and the dependency information, |
196 | BitBake can now calculate exactly which tasks it needs to run and in what | 193 | BitBake can now calculate exactly what tasks it needs to run and in what |
197 | order. The build now starts with BitBake forking off threads up to | 194 | order it needs to run them. |
198 | the limit set in the <glossterm><link | 195 | The build now starts with BitBake forking off threads up to the limit set in the |
199 | linkend='var-BB_NUMBER_THREADS'>BB_NUMBER_THREADS</link></glossterm> variable | 196 | <glossterm><link linkend='var-BB_NUMBER_THREADS'>BB_NUMBER_THREADS</link></glossterm> variable. |
200 | as long as there are tasks ready to run, i.e. tasks with all their | 197 | BitBake continues to fork threads as long as there are tasks ready to run, |
201 | dependencies met. | 198 | those taksks have all their dependencies met, and the thread threshold has not been |
199 | exceeded. | ||
202 | </para> | 200 | </para> |
203 | 201 | ||
204 | <para> | 202 | <para> |
205 | As each task completes, a timestamp is written to the directory | 203 | As each task completes, a timestamp is written to the directory specified by the |
206 | specified by the <glossterm><link | 204 | <glossterm><link linkend='var-STAMPS'>STAMPS</link></glossterm> variable (usually |
207 | linkend='var-STAMPS'>STAMPS</link></glossterm> variable (usually | 205 | <filename class="directory">build/tmp/stamps/*/</filename>). |
208 | <filename class="directory">build/tmp/stamps/*/</filename>). On | 206 | On subsequent runs, BitBake looks at the STAMPS directory and does not rerun |
209 | subsequent runs, BitBake looks at the <glossterm><link | 207 | tasks that are already completed unless a timestamp is found to be invalid. |
210 | linkend='var-STAMPS'>STAMPS</link></glossterm> | 208 | Currently, invalid timestamps are only considered on a per |
211 | directory and will not rerun | 209 | <filename class="extension">.bb</filename> file basis. |
212 | tasks its already completed unless a timestamp is found to be invalid. | 210 | So, for example, if the configure stamp has a timestamp greater than the |
213 | Currently, invalid timestamps are only considered on a per <filename | 211 | compile timestamp for a given target then the compile task would rerun. |
214 | class="extension">.bb</filename> file basis so if for example the configure stamp has a timestamp greater than the | 212 | Running the compile task again, however, has no effect on other providers |
215 | compile timestamp for a given target the compile task would rerun but this | 213 | that depend on that target. |
216 | has no effect on other providers depending on that target. This could | 214 | This behavior could change or become configurable in future versions of BitBake. |
217 | change or become configurable in future versions of BitBake. Some tasks | ||
218 | are marked as "nostamp" tasks which means no timestamp file will be written | ||
219 | and the task will always rerun. | ||
220 | </para> | 215 | </para> |
221 | 216 | ||
222 | <para>Once all the tasks have been completed BitBake exits.</para> | 217 | <note><para> |
223 | 218 | Some tasks are marked as "nostamp" tasks. | |
219 | No timestamp file is created when these tasks are run. | ||
220 | Consequently, "nostamp" tasks are always rerun. | ||
221 | </para></note> | ||
224 | </section> | 222 | </section> |
225 | 223 | ||
226 | <section id='ref-bitbake-runtask'> | 224 | <section id='ref-bitbake-runtask'> |
227 | <title>Running a Task</title> | 225 | <title>Running a Task</title> |
228 | 226 | ||
229 | <para> | 227 | <para> |
230 | It's worth noting what BitBake does to run a task. A task can either | 228 | Tasks can either be a shell task or a python task. |
231 | be a shell task or a python task. For shell tasks, BitBake writes a | 229 | For shell tasks, BitBake writes a shell script to |
232 | shell script to <filename>${WORKDIR}/temp/run.do_taskname.pid</filename> | 230 | <filename>${WORKDIR}/temp/run.do_taskname.pid</filename> and then executes the script. |
233 | and then executes the script. The generated | 231 | The generated shell script contains all the exported variables, and the shell functions |
234 | shell script contains all the exported variables, and the shell functions | 232 | with all variables expanded. |
235 | with all variables expanded. Output from the shell script is | 233 | Output from the shell script goes to the file <filename>${WORKDIR}/temp/log.do_taskname.pid</filename>. |
236 | sent to the file <filename>${WORKDIR}/temp/log.do_taskname.pid</filename>. | 234 | Looking at the expanded shell functions in the run file and the output in the log files |
237 | Looking at the | ||
238 | expanded shell functions in the run file and the output in the log files | ||
239 | is a useful debugging technique. | 235 | is a useful debugging technique. |
240 | </para> | 236 | </para> |
241 | 237 | ||
242 | <para> | 238 | <para> |
243 | Python functions are executed internally to BitBake itself and | 239 | For Python tasks, BitBake executes the task internally and logs information to the |
244 | logging goes to the controlling terminal. Future versions of BitBake will | 240 | controlling terminal. |
245 | write the functions to files in a similar way to shell functions and | 241 | Future versions of BitBake will write the functions to files similar to the way |
246 | logging will also go to the log files in a similar way. | 242 | shell tasks are handled. |
243 | Logging will be handled in way similar to shell tasks as well. | ||
247 | </para> | 244 | </para> |
245 | |||
246 | <para> | ||
247 | Once all the tasks have been completed BitBake exits. | ||
248 | </para> | ||
248 | </section> | 249 | </section> |
249 | 250 | ||
250 | 251 | ||
251 | <section id='ref-bitbake-commandline'> | 252 | <section id='ref-bitbake-commandline'> |
252 | <title>Commandline</title> | 253 | <title>BitBake Command Line</title> |
253 | 254 | ||
254 | <para> | 255 | <para> |
255 | To quote from "bitbake --help": | 256 | Following is the bitbake manpage: |
256 | </para> | 257 | </para> |
257 | 258 | ||
258 | <screen>Usage: bitbake [options] [package ...] | 259 | <screen> |
260 | $ bitbake --help | ||
261 | Usage: bitbake [options] [package ...] | ||
259 | 262 | ||
260 | Executes the specified task (default is 'build') for a given set of BitBake files. | 263 | Executes the specified task (default is 'build') for a given set of BitBake files. |
261 | It expects that BBFILES is defined, which is a space separated list of files to | 264 | It expects that BBFILES is defined, which is a space separated list of files to |
@@ -275,6 +278,8 @@ Options: | |||
275 | -a, --tryaltconfigs continue with builds by trying to use alternative | 278 | -a, --tryaltconfigs continue with builds by trying to use alternative |
276 | providers where possible. | 279 | providers where possible. |
277 | -f, --force force run of specified cmd, regardless of stamp status | 280 | -f, --force force run of specified cmd, regardless of stamp status |
281 | -i, --interactive drop into the interactive mode also called the BitBake | ||
282 | shell. | ||
278 | -c CMD, --cmd=CMD Specify task to execute. Note that this only executes | 283 | -c CMD, --cmd=CMD Specify task to execute. Note that this only executes |
279 | the specified task for the providee and the packages | 284 | the specified task for the providee and the packages |
280 | it depends on, i.e. 'compile' does not implicitly call | 285 | it depends on, i.e. 'compile' does not implicitly call |
@@ -287,9 +292,6 @@ Options: | |||
287 | -D, --debug Increase the debug level. You can specify this more | 292 | -D, --debug Increase the debug level. You can specify this more |
288 | than once. | 293 | than once. |
289 | -n, --dry-run don't execute, just go through the motions | 294 | -n, --dry-run don't execute, just go through the motions |
290 | -S, --dump-signatures | ||
291 | don't execute, just dump out the signature | ||
292 | construction information | ||
293 | -p, --parse-only quit after parsing the BB files (developers only) | 295 | -p, --parse-only quit after parsing the BB files (developers only) |
294 | -d, --disable-psyco disable using the psyco just-in-time compiler (not | 296 | -d, --disable-psyco disable using the psyco just-in-time compiler (not |
295 | recommended) | 297 | recommended) |
@@ -298,46 +300,45 @@ Options: | |||
298 | what used to be bbread) | 300 | what used to be bbread) |
299 | -g, --graphviz emit the dependency trees of the specified packages in | 301 | -g, --graphviz emit the dependency trees of the specified packages in |
300 | the dot syntax | 302 | the dot syntax |
301 | -I EXTRA_ASSUME_PROVIDED, --ignore-deps=EXTRA_ASSUME_PROVIDED | 303 | -I IGNORED_DOT_DEPS, --ignore-deps=IGNORED_DOT_DEPS |
302 | Assume these dependencies don't exist and are already | 304 | Stop processing at the given list of dependencies when |
303 | provided (equivalent to ASSUME_PROVIDED). Useful to | 305 | generating dependency graphs. This can help to make |
304 | make dependency graphs more appealing | 306 | the graph more appealing |
305 | -l DEBUG_DOMAINS, --log-domains=DEBUG_DOMAINS | 307 | -l DEBUG_DOMAINS, --log-domains=DEBUG_DOMAINS |
306 | Show debug logging for the specified logging domains | 308 | Show debug logging for the specified logging domains |
307 | -P, --profile profile the command and print a report | 309 | -P, --profile profile the command and print a report |
308 | -u UI, --ui=UI userinterface to use | 310 | </screen> |
309 | --revisions-changed Set the exit code depending on whether upstream | ||
310 | floating revisions have changed or not</screen> | ||
311 | |||
312 | </section> | 311 | </section> |
313 | 312 | ||
314 | <section id='ref-bitbake-fetchers'> | 313 | <section id='ref-bitbake-fetchers'> |
315 | <title>Fetchers</title> | 314 | <title>Fetchers</title> |
316 | 315 | ||
317 | <para> | 316 | <para> |
318 | As well as the containing the parsing and task/dependency handling | 317 | BitBake also contains a set of "fetcher" modules that allow |
319 | code, BitBake also contains a set of "fetcher" modules which allow | 318 | retrieval of source code from various types of sources. |
320 | fetching of source code from various types of sources. Example | 319 | For example, BitBake can get source code from a disk with the metadata, from websites, |
321 | sources might be from disk with the metadata, from websites, from | 320 | from remote shell accounts or from Source Code Management (SCM) systems |
322 | remote shell accounts or from SCM systems like cvs/subversion/git. | 321 | like <filename>cvs/subversion/git</filename>. |
323 | </para> | 322 | </para> |
324 | 323 | ||
325 | <para> | 324 | <para> |
326 | The fetchers are usually triggered by entries in | 325 | Fetchers are usually triggered by entries in |
327 | <glossterm><link linkend='var-SRC_URI'>SRC_URI</link></glossterm>. Information about the | 326 | <glossterm><link linkend='var-SRC_URI'>SRC_URI</link></glossterm>. |
328 | options and formats of entries for specific fetchers can be found in the | 327 | You can find information about the options and formats of entries for specific |
329 | <ulink url='http://bitbake.berlios.de/manual/'>BitBake manual</ulink>. | 328 | fetchers in the <ulink url='http://bitbake.berlios.de/manual/'>BitBake manual</ulink>. |
330 | </para> | 329 | </para> |
331 | 330 | ||
332 | <para> | 331 | <para> |
333 | One useful feature for certain SCM fetchers is the ability to | 332 | One useful feature for certain SCM fetchers is the ability to |
334 | "auto-update" when the upstream SCM changes version. Since this | 333 | "auto-update" when the upstream SCM changes version. |
335 | requires certain functionality from the SCM only certain systems | 334 | Since this ability requires certain functionality from the SCM, not all |
336 | support it, currently Subversion, Bazaar and to a limited extent, Git. It | 335 | systems support it. |
337 | works using the <glossterm><link linkend='var-SRCREV'>SRCREV</link> | 336 | Currently Subversion, Bazaar and to a limited extent, Git support the ability to "auto-update". |
338 | </glossterm> variable. See the <link linkend='platdev-appdev-srcrev'> | 337 | This feature works using the <glossterm><link linkend='var-SRCREV'>SRCREV</link></glossterm> |
339 | developing with an external SCM based project</link> section for more | 338 | variable. |
340 | information. | 339 | See the |
340 | <link linkend='platdev-appdev-srcrev'>Developing within Poky with an External SCM-based Package</link> | ||
341 | section for more information. | ||
341 | </para> | 342 | </para> |
342 | 343 | ||
343 | </section> | 344 | </section> |