1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
2 "http://www.w3.org/TR/html4/loose.dtd">
4 <head><title>opendreambox</title>
5 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
6 <meta name="generator" content="TeX4ht (http://www.cse.ohio-state.edu/~gurari/TeX4ht/)">
7 <meta name="originator" content="TeX4ht (http://www.cse.ohio-state.edu/~gurari/TeX4ht/)">
9 <meta name="src" content="opendreambox.tex">
10 <meta name="date" content="2012-04-19 16:27:00">
11 <link rel="stylesheet" type="text/css" href="opendreambox.css">
14 <div class="maketitle">
22 <h2 class="titleHead">opendreambox</h2>
23 <div class="author" ><span
24 class="cmr-12">Andreas Oberritter </span><span
25 class="cmtt-9"><obi@opendreambox.org></span></div>
27 <div class="date" ><span
28 class="cmr-12">March 2012</span></div>
30 <h3 class="likesectionHead"><a
31 id="x1-1000"></a>Contents</h3>
32 <div class="tableofcontents">
33 <span class="sectionToc" >1 <a
34 href="#x1-20001" id="QQ2-1-2">Introduction</a></span>
35 <br /> <span class="subsectionToc" >1.1 <a
36 href="#x1-30001.1" id="QQ2-1-3">Target audience</a></span>
37 <br /> <span class="subsectionToc" >1.2 <a
38 href="#x1-40001.2" id="QQ2-1-4">Supported products</a></span>
39 <br /> <span class="subsectionToc" >1.3 <a
40 href="#x1-50001.3" id="QQ2-1-5">License</a></span>
41 <br /> <span class="subsectionToc" >1.4 <a
42 href="#x1-60001.4" id="QQ2-1-6">Obtaining the source code</a></span>
43 <br /> <span class="subsectionToc" >1.5 <a
44 href="#x1-70001.5" id="QQ2-1-7">Quick start</a></span>
45 <br /> <span class="subsectionToc" >1.6 <a
46 href="#x1-80001.6" id="QQ2-1-8">Directory structure</a></span>
47 <br />  <span class="subsubsectionToc" >1.6.1 <a
48 href="#x1-90001.6.1" id="QQ2-1-9">openembedded-core and meta-openembedded</a></span>
49 <br />  <span class="subsubsectionToc" >1.6.2 <a
50 href="#x1-100001.6.2" id="QQ2-1-10">meta-opendreambox</a></span>
51 <br />  <span class="subsubsectionToc" >1.6.3 <a
52 href="#x1-110001.6.3" id="QQ2-1-11">meta-bsp</a></span>
53 <br /><span class="sectionToc" >2 <a
54 href="#x1-120002" id="QQ2-1-12">Prerequisites</a></span>
55 <br /> <span class="subsectionToc" >2.1 <a
56 href="#x1-130002.1" id="QQ2-1-13">Required software</a></span>
57 <br /><span class="sectionToc" >3 <a
58 href="#x1-140003" id="QQ2-1-14">Major changes since previous releases</a></span>
59 <br /> <span class="subsectionToc" >3.1 <a
60 href="#x1-150003.1" id="QQ2-1-15">Changes since release 1.6</a></span>
61 <br /><span class="sectionToc" >4 <a
62 href="#x1-160004" id="QQ2-1-16">Known Bugs</a></span>
63 <br /><span class="sectionToc" >5 <a
64 href="#x1-170005" id="QQ2-1-17">Building OpenDreambox</a></span>
65 <br /> <span class="subsectionToc" >5.1 <a
66 href="#x1-180005.1" id="QQ2-1-18">Makefile targets</a></span>
70 <br /> <span class="subsectionToc" >5.2 <a
71 href="#x1-190005.2" id="QQ2-1-19">Configuration variables</a></span>
72 <br />  <span class="subsubsectionToc" >5.2.1 <a
73 href="#x1-200005.2.1" id="QQ2-1-20">BB_NUMBER_THREADS</a></span>
74 <br />  <span class="subsubsectionToc" >5.2.2 <a
75 href="#x1-210005.2.2" id="QQ2-1-21">MACHINE</a></span>
76 <br />  <span class="subsubsectionToc" >5.2.3 <a
77 href="#x1-220005.2.3" id="QQ2-1-22">PARALLEL_MAKE</a></span>
78 <br /> <span class="subsectionToc" >5.3 <a
79 href="#x1-230005.3" id="QQ2-1-23">Adding custom layers</a></span>
80 <br /> <span class="subsectionToc" >5.4 <a
81 href="#x1-240005.4" id="QQ2-1-24">Adding custom options</a></span>
82 <br />  <span class="subsubsectionToc" >5.4.1 <a
83 href="#x1-250005.4.1" id="QQ2-1-25">DISTRO_FEED_PREFIX</a></span>
84 <br />  <span class="subsubsectionToc" >5.4.2 <a
85 href="#x1-260005.4.2" id="QQ2-1-26">DISTRO_FEED_URI</a></span>
86 <br />  <span class="subsubsectionToc" >5.4.3 <a
87 href="#x1-270005.4.3" id="QQ2-1-27">INHERIT</a></span>
88 <br /> <span class="subsectionToc" >5.5 <a
89 href="#x1-280005.5" id="QQ2-1-28">Setting up a build directory</a></span>
90 <br /> <span class="subsectionToc" >5.6 <a
91 href="#x1-290005.6" id="QQ2-1-29">Building a firmware image</a></span>
92 <br /> <span class="subsectionToc" >5.7 <a
93 href="#x1-300005.7" id="QQ2-1-30">Building a package</a></span>
94 <br /><span class="sectionToc" >6 <a
95 href="#x1-310006" id="QQ2-1-31">Development hints</a></span>
96 <br /> <span class="subsectionToc" >6.1 <a
97 href="#x1-320006.1" id="QQ2-1-32">Cross-compilation of external software</a></span>
98 <br /> <span class="subsectionToc" >6.2 <a
99 href="#x1-330006.2" id="QQ2-1-33">Coding style</a></span>
100 <br /> <span class="subsectionToc" >6.3 <a
101 href="#x1-340006.3" id="QQ2-1-34">Package architecture</a></span>
102 <br /><span class="sectionToc" >7 <a
103 href="#x1-350007" id="QQ2-1-35">Bug reports and patches</a></span>
108 <!--l. 54--><p class="noindent" >
109 <h3 class="sectionHead"><span class="titlemark">1 </span> <a
110 id="x1-20001"></a>Introduction</h3>
111 <div class="flushleft"
113 <!--l. 55--><p class="noindent" >
114 This document briefly describes the OpenDreambox distribution, an
115 embedded Linux distribution for Set-Top-Boxes manufactured by <a
116 href="http://www.dream-multimedia-tv.de/" >Dream
118 <!--l. 59--><p class="noindent" >OpenDreambox is based on the <a
119 href="http://www.openembedded.org/" >OpenEmbedded</a> build framework, which uses
121 href="http://bitbake.berlios.de/" >BitBake</a> to transform build instructions into distributable firmare images and
122 software packages.</div>
123 <!--l. 64--><p class="noindent" >
124 <h4 class="subsectionHead"><span class="titlemark">1.1 </span> <a
125 id="x1-30001.1"></a>Target audience</h4>
126 <div class="flushleft"
128 <!--l. 65--><p class="noindent" >
129 Developers familiar with previous versions of OpenDreambox or
130 OpenEmbedded in general.</div>
131 <!--l. 70--><p class="noindent" >
132 <h4 class="subsectionHead"><span class="titlemark">1.2 </span> <a
133 id="x1-40001.2"></a>Supported products</h4>
134 <div class="flushleft"
136 <!--l. 72--><p class="noindent" >
137 The current version includes support for the following machines:
138 <div class="tabular"> <table id="TBL-2" class="tabular"
139 cellspacing="0" cellpadding="0" rules="groups"
140 ><colgroup id="TBL-2-1g"><col
141 id="TBL-2-1"></colgroup><colgroup id="TBL-2-2g"><col
142 id="TBL-2-2"></colgroup><tr
143 class="hline"><td><hr></td><td><hr></td></tr><tr
144 style="vertical-align:baseline;" id="TBL-2-1-"><td style="white-space:nowrap; text-align:left;" id="TBL-2-1-1"
146 class="cmbx-10">Product name </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-2-1-2"
148 class="cmbx-10">Environment variable</span></td></tr><tr
149 class="hline"><td><hr></td><td><hr></td></tr><tr
150 style="vertical-align:baseline;" id="TBL-2-2-"><td style="white-space:nowrap; text-align:left;" id="TBL-2-2-1"
151 class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-2-2-2"
154 style="vertical-align:baseline;" id="TBL-2-3-"><td style="white-space:nowrap; text-align:left;" id="TBL-2-3-1"
155 class="td11">DM 500 HD </td><td style="white-space:nowrap; text-align:left;" id="TBL-2-3-2"
157 class="cmtt-9">MACHINE=dm500hd </span></td>
159 style="vertical-align:baseline;" id="TBL-2-4-"><td style="white-space:nowrap; text-align:left;" id="TBL-2-4-1"
160 class="td11">DM 800 HD PVR </td><td style="white-space:nowrap; text-align:left;" id="TBL-2-4-2"
162 class="cmtt-9">MACHINE=dm800 </span></td>
164 style="vertical-align:baseline;" id="TBL-2-5-"><td style="white-space:nowrap; text-align:left;" id="TBL-2-5-1"
165 class="td11">DM 800 HD SE </td><td style="white-space:nowrap; text-align:left;" id="TBL-2-5-2"
167 class="cmtt-9">MACHINE=dm800se </span></td>
169 style="vertical-align:baseline;" id="TBL-2-6-"><td style="white-space:nowrap; text-align:left;" id="TBL-2-6-1"
170 class="td11">DM 7020 HD </td><td style="white-space:nowrap; text-align:left;" id="TBL-2-6-2"
172 class="cmtt-9">MACHINE=dm7020hd </span></td>
174 style="vertical-align:baseline;" id="TBL-2-7-"><td style="white-space:nowrap; text-align:left;" id="TBL-2-7-1"
175 class="td11">DM 8000 HD PVR</td><td style="white-space:nowrap; text-align:left;" id="TBL-2-7-2"
177 class="cmtt-9">MACHINE=dm8000 </span></td>
179 style="vertical-align:baseline;" id="TBL-2-8-"><td style="white-space:nowrap; text-align:left;" id="TBL-2-8-1"
180 class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-2-8-2"
183 class="hline"><td><hr></td><td><hr></td></tr><tr
184 style="vertical-align:baseline;" id="TBL-2-9-"><td style="white-space:nowrap; text-align:left;" id="TBL-2-9-1"
186 </tr></table></div></div>
190 <!--l. 89--><p class="noindent" >
191 <h4 class="subsectionHead"><span class="titlemark">1.3 </span> <a
192 id="x1-50001.3"></a>License</h4>
196 <div class="verbatim" id="verbatim-1">
197 Copyright (c) 2010-2012 Dream Multimedia GmbH, Germany
198  <br />                        http://www.dream-multimedia-tv.de/
199  <br />Authors:
200  <br />  Andreas Frisch <fraxinas@opendreambox.org>
201  <br />  Andreas Monzner <ghost@opendreambox.org>
202  <br />  Andreas Oberritter <obi@opendreambox.org>
203  <br />  Mladen Horvat <acid-burn@opendreambox.org>
204  <br />  Stefan Pluecken <thedoc@opendreambox.org>
205  <br />  Stephan Reichholf <reichi@opendreambox.org>
207  <br />Permission is hereby granted, free of charge, to any person obtaining a copy
208  <br />of this software and associated documentation files (the "Software"), to deal
209  <br />in the Software without restriction, including without limitation the rights
210  <br />to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
211  <br />copies of the Software, and to permit persons to whom the Software is
212  <br />furnished to do so, subject to the following conditions:
214  <br />The above copyright notice and this permission notice shall be included in
215  <br />all copies or substantial portions of the Software.
217  <br />THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
218  <br />IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
219  <br />FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
220  <br />AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
221  <br />LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
222  <br />OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
223  <br />THE SOFTWARE.
224  <br />    </div>
225 <!--l. 119--><p class="nopar" >
226 <!--l. 121--><p class="noindent" >
227 <h4 class="subsectionHead"><span class="titlemark">1.4 </span> <a
228 id="x1-60001.4"></a>Obtaining the source code</h4>
229 <!--l. 122--><p class="noindent" >OpenDreambox uses the Git version control system. To obtain the source code, it is
230 required to install Git. See <a
231 href="http://git-scm.com/" class="url" ><span
232 class="cmtt-10">http://git-scm.com/</span></a>.
233 <!--l. 125--><p class="noindent" >To initially download the source into the current directory, issue the following
235 <!--l. 128--><p class="noindent" ><span
236 class="cmtt-9">git clone git://git.opendreambox.org/git/opendreambox.git</span>
240 <!--l. 130--><p class="noindent" >
241 <h4 class="subsectionHead"><span class="titlemark">1.5 </span> <a
242 id="x1-70001.5"></a>Quick start</h4>
243 <!--l. 131--><p class="noindent" >For the impatient:
244 <!--l. 133--><p class="noindent" ><span
245 class="cmtt-9">make -C opendreambox image</span>
246 <!--l. 135--><p class="noindent" >If this command fails, prerequisites my be missing. See section <a
247 href="#x1-120002">2<!--tex4ht:ref: prerequisites --></a>.
248 <!--l. 137--><p class="noindent" >
249 <h4 class="subsectionHead"><span class="titlemark">1.6 </span> <a
250 id="x1-80001.6"></a>Directory structure</h4>
251 <!--l. 138--><p class="noindent" >OpenDreambox consists of a set of layers containing build instructions. This meta
252 data is used by BitBake to download and compile source code and to assemble
253 installable software packages and firmware images.
254 <!--l. 142--><p class="noindent" >Currently, there are five layers, ordered by priority from lowest to highest:
255 <ul class="itemize1">
256 <li class="itemize"><span
257 class="cmtt-9">openembedded-core</span>
259 <li class="itemize"><span
260 class="cmtt-9">meta-openembedded</span>
262 <li class="itemize"><span
263 class="cmtt-9">meta-opendreambox</span>
265 <li class="itemize"><span
266 class="cmtt-9">meta-bsp/common</span>
268 <li class="itemize"><span
269 class="cmtt-9">meta-bsp/$</span><span
270 class="cmsy-9">{</span><span
271 class="cmtt-9">MACHINE</span><span
272 class="cmsy-9">}</span></li></ul>
273 <!--l. 153--><p class="noindent" >If a recipe for the same package exists in multiple layers, then the higher priority
274 layer takes precedence over the lower priority layer.
275 <!--l. 157--><p class="noindent" >For example, <span
276 class="cmtt-9">libmad</span><span
277 class="cmtt-9">_0.15.1b.bb </span>exists in both <span
278 class="cmtt-9">meta-openembedded </span>and
280 class="cmtt-9">openembedded-core</span>. The recipe in <span
281 class="cmtt-9">meta-openembedded </span>will be used, because
283 class="cmtt-9">openembedded-core </span>has lower priority.
284 <!--l. 162--><p class="noindent" ><span
285 class="cmbx-10">NOTE: </span>This would still be true even if the version of <span
286 class="cmtt-9">libmad </span>in <span
287 class="cmtt-9">openembeded-core</span>
288 was higher than the version in <span
289 class="cmtt-9">meta-openembedded</span>, unless <span
290 class="cmtt-9">PREFERRED</span><span
291 class="cmtt-9">_VERSION</span><span
292 class="cmtt-9">_libmad</span>
293 was set to the version in <span
294 class="cmtt-9">openembedded-core</span>. There is currently no way to prefer a
295 version of a lower priority layer, if the same version is present in a higher priority
297 <!--l. 168--><p class="noindent" >
298 <h5 class="subsubsectionHead"><span class="titlemark">1.6.1 </span> <a
299 id="x1-90001.6.1"></a>openembedded-core and meta-openembedded</h5>
303 <!--l. 169--><p class="noindent" >These directories contain copies of Git repositories from git.openembedded.org,
304 including the OpenEmbedded-Core layer (”meta”) and the OpenEmbedded layer
305 (”meta-oe”). They get created automatically when building the distribution for the
307 <!--l. 173--><p class="noindent" >Throughout this document, the combination of these directories will be referred to as
309 <!--l. 176--><p class="noindent" >
310 <h5 class="subsubsectionHead"><span class="titlemark">1.6.2 </span> <a
311 id="x1-100001.6.2"></a>meta-opendreambox</h5>
312 <!--l. 177--><p class="noindent" >This directory contains:
313 <ul class="itemize1">
314 <li class="itemize">Recipes for packages written specifically for the OpenDreambox
317 <li class="itemize">Modifications to recipes from OpenEmbedded
319 <li class="itemize">Recipes for software versions older than those available from
322 <li class="itemize">Recipes for software versions newer than those available from
323 OpenEmbedded</li></ul>
324 <!--l. 186--><p class="noindent" >
325 <h5 class="subsubsectionHead"><span class="titlemark">1.6.3 </span> <a
326 id="x1-110001.6.3"></a>meta-bsp</h5>
327 <!--l. 187--><p class="noindent" >The directory <span
328 class="cmtt-9">meta-bsp </span>contains Board Support Packages (BSP) for the supported
329 Dreambox models. This includes:
330 <ul class="itemize1">
331 <li class="itemize">Hardware drivers
333 <li class="itemize">Machine specific overrides
335 <li class="itemize">The Linux kernel
337 <li class="itemize">The boot loader
342 <li class="itemize">Splash images</li></ul>
343 <!--l. 198--><p class="noindent" >
344 <h3 class="sectionHead"><span class="titlemark">2 </span> <a
345 id="x1-120002"></a>Prerequisites</h3>
346 <!--l. 201--><p class="noindent" >
347 <h4 class="subsectionHead"><span class="titlemark">2.1 </span> <a
348 id="x1-130002.1"></a>Required software</h4>
349 <!--l. 203--><p class="noindent" >The OpenEmbedded project provides a general list of prerequisites for many Linux
350 distributions and also for some other operating systems.
351 <ul class="itemize1">
352 <li class="itemize"><a
353 href="http://www.openembedded.org/index.php/OEandYourDistro" class="url" ><span
354 class="cmtt-10">http://www.openembedded.org/index.php/OEandYourDistro</span></a>
356 <li class="itemize"><a
357 href="http://www.openembedded.org/index.php/Required\_software" class="url" ><span
358 class="cmtt-10">http://www.openembedded.org/index.php/Required\_software</span></a></li></ul>
359 <!--l. 211--><p class="noindent" >It is highly recommended to use Linux to build OpenDreambox. In theory, any recent
360 distribution will do, but not many distributions have been verified to build
361 OpenDreambox without errors. Tested distributions include:
362 <ul class="itemize1">
363 <li class="itemize">Arch Linux 2011.08.19 [amd64]
365 <li class="itemize">Debian 6.0 (Squeeze) [i386]
367 <li class="itemize">Debian ”Testing” (Wheezy) [i386]
369 <li class="itemize">Fedora 16 [i386, amd64]
371 <li class="itemize">Ubuntu 10.04 LTS (Lucid Lynx) [i386]
373 <li class="itemize">Ubuntu 10.10 (Maverick Meerkat) [i386]
375 <li class="itemize">Ubuntu 11.10 (Oneiric Ocelot) [amd64]
377 <li class="itemize">Ubuntu 12.04 LTS (Precise Pangolin) [i386, amd64]</li></ul>
381 <!--l. 227--><p class="noindent" >Distributions known not to work:
382 <ul class="itemize1">
383 <li class="itemize">Debian 5.0 (Lenny): Comes with Python 2.5, which is too old.</li></ul>
387 <!--l. 235--><p class="noindent" >
388 <h3 class="sectionHead"><span class="titlemark">3 </span> <a
389 id="x1-140003"></a>Major changes since previous releases</h3>
390 <!--l. 237--><p class="noindent" >
391 <h4 class="subsectionHead"><span class="titlemark">3.1 </span> <a
392 id="x1-150003.1"></a>Changes since release 1.6</h4>
393 <ul class="itemize1">
394 <li class="itemize">Recipes were split across multiple layers and categorized.
396 <li class="itemize"><span
397 class="cmtt-9">env.source </span>has been replaced by two files, <span
398 class="cmtt-9">bitbake.env </span>and
400 class="cmtt-9">cross-compile.env</span>. The former sets a minimal environment that is needed
401 to execute bitbake. The latter creates machine-specific command aliases,
402 in order to compile external software.
404 <li class="itemize">All machines share a common <span
405 class="cmtt-9">tmp </span>directory.
407 <li class="itemize"><span
408 class="cmtt-9">$</span><span
409 class="cmsy-9">{</span><span
410 class="cmtt-9">MACHINE</span><span
411 class="cmsy-9">}</span><span
412 class="cmtt-9">/build </span>directories were renamed to <span
413 class="cmtt-9">build/$</span><span
414 class="cmsy-9">{</span><span
415 class="cmtt-9">MACHINE</span><span
416 class="cmsy-9">}</span>.
418 <li class="itemize">Kernel packages were renamed from <span
419 class="cmtt-9">linux-$</span><span
420 class="cmsy-9">{</span><span
421 class="cmtt-9">MACHINE</span><span
422 class="cmsy-9">} </span>to <span
423 class="cmtt-9">linux-dreambox</span>.
425 <li class="itemize">Support for machines based on ATI Xilleon or IBM STB was dropped.</li></ul>
426 <!--l. 250--><p class="noindent" >
427 <h3 class="sectionHead"><span class="titlemark">4 </span> <a
428 id="x1-160004"></a>Known Bugs</h3>
429 <!--l. 252--><p class="noindent" >None.
433 <!--l. 256--><p class="noindent" >
434 <h3 class="sectionHead"><span class="titlemark">5 </span> <a
435 id="x1-170005"></a>Building OpenDreambox</h3>
436 <!--l. 258--><p class="noindent" >In the top level directory, there is a <span
437 class="cmtt-9">Makefile</span>, which is used to set up build
438 directories and to fetch or update all used repositories. The Makefile can
439 be influenced by environment variables, either by specifing them on the
440 command-line or by storing them in a file called <span
441 class="cmtt-9">conf/make.conf</span>. It is not
442 recommended to edit the <span
443 class="cmtt-9">Makefile </span>directly in order to avoid conflicts with future
445 <!--l. 265--><p class="noindent" >When the <span
446 class="cmtt-9">Makefile </span>is run for the first time, the following steps will be executed:
447 <ul class="itemize1">
448 <li class="itemize">Creation of configuration files
449 <ul class="itemize2">
450 <li class="itemize"><span
451 class="cmtt-9">bitbake.env</span>
453 <li class="itemize"><span
454 class="cmtt-9">conf/opendreambox.conf</span>
456 <li class="itemize"><span
457 class="cmtt-9">build/$</span><span
458 class="cmsy-9">{</span><span
459 class="cmtt-9">MACHINE</span><span
460 class="cmsy-9">}</span><span
461 class="cmtt-9">/conf/bblayers.conf</span>
463 <li class="itemize"><span
464 class="cmtt-9">build/$</span><span
465 class="cmsy-9">{</span><span
466 class="cmtt-9">MACHINE</span><span
467 class="cmsy-9">}</span><span
468 class="cmtt-9">/conf/local.conf</span></li></ul>
470 <li class="itemize">Update or checkout of Git repositories
471 <ul class="itemize2">
472 <li class="itemize">OpenDreambox
474 <li class="itemize">BitBake
476 <li class="itemize">OpenEmbedded</li></ul>
478 <!--l. 284--><p class="noindent" >
479 <h4 class="subsectionHead"><span class="titlemark">5.1 </span> <a
480 id="x1-180005.1"></a>Makefile targets</h4>
481 <!--l. 285--><p class="noindent" >Run <span
482 class="cmtt-9">make help </span>to get a list of targets of the top level Makefile, together with a brief
487 <!--l. 287--><p class="noindent" >
488 <h4 class="subsectionHead"><span class="titlemark">5.2 </span> <a
489 id="x1-190005.2"></a>Configuration variables</h4>
490 <!--l. 288--><p class="noindent" >
491 <h5 class="subsubsectionHead"><span class="titlemark">5.2.1 </span> <a
492 id="x1-200005.2.1"></a>BB_NUMBER_THREADS</h5>
493 <!--l. 289--><p class="noindent" >Controls how many BitBake tasks may run at a time. Defaults to the number of cores
494 available on the build system. The number of cores is obtained from <span
495 class="cmtt-9">/proc/cpuinfo</span>. If
496 this file is unavailable, the default value is 1.
497 <!--l. 294--><p class="noindent" >
498 <h5 class="subsubsectionHead"><span class="titlemark">5.2.2 </span> <a
499 id="x1-210005.2.2"></a>MACHINE</h5>
500 <!--l. 295--><p class="noindent" >Controls the target machine to build packages for. See section <a
501 href="#x1-40001.2">1.2<!--tex4ht:ref: products --></a> for a list of
503 <!--l. 298--><p class="noindent" >
504 <h5 class="subsubsectionHead"><span class="titlemark">5.2.3 </span> <a
505 id="x1-220005.2.3"></a>PARALLEL_MAKE</h5>
506 <!--l. 299--><p class="noindent" >Controls how many processes per recipe <span
507 class="cmtt-9">make </span>may use. Defaults to the number of
508 cores available on the build system. The number of cores is obtained from
510 class="cmtt-9">/proc/cpuinfo</span>. If this file is unavailable, the default value is 1.
511 <!--l. 304--><p class="noindent" >NOTE: If you see seemingly random build failures, try setting this variable to
513 <!--l. 306--><p class="noindent" >
514 <h4 class="subsectionHead"><span class="titlemark">5.3 </span> <a
515 id="x1-230005.3"></a>Adding custom layers</h4>
516 <!--l. 308--><p class="noindent" >It is possible to add custom layers to the build system. This can be done globally and
517 per machine. To add a layer globally, edit <span
518 class="cmtt-9">conf/bblayers-ext.conf</span>. To add a
519 machine-specific layer, edit <span
520 class="cmtt-9">conf/bblayers-$</span><span
521 class="cmsy-9">{</span><span
522 class="cmtt-9">MACHINE</span><span
523 class="cmsy-9">}</span><span
524 class="cmtt-9">-ext.conf</span>. Assuming that an
525 additional layer is available at <span
526 class="cmtt-9">$</span><span
527 class="cmsy-9">{</span><span
528 class="cmtt-9">HOME</span><span
529 class="cmsy-9">}</span><span
530 class="cmtt-9">/custom-layer</span>, the entry to add to the file will
532 <!--l. 314--><p class="noindent" ><span
533 class="cmtt-9">BBLAYERS =+ "$</span><span
534 class="cmsy-9">{</span><span
535 class="cmtt-9">HOME</span><span
536 class="cmsy-9">}</span><span
537 class="cmtt-9">/custom-layer"</span>
541 <!--l. 316--><p class="noindent" >
542 <h4 class="subsectionHead"><span class="titlemark">5.4 </span> <a
543 id="x1-240005.4"></a>Adding custom options</h4>
544 <!--l. 317--><p class="noindent" >It is possible to tweak a lot more options than those used by the <span
545 class="cmtt-9">Makefile </span>by editing
547 class="cmtt-9">conf/local-ext.conf </span>or <span
548 class="cmtt-9">conf/local-$</span><span
549 class="cmsy-9">{</span><span
550 class="cmtt-9">MACHINE</span><span
551 class="cmsy-9">}</span><span
552 class="cmtt-9">-ext.conf</span>.
553 <!--l. 320--><p class="noindent" >For example, if the firmware shall use the package feed built on the develoment
554 machine, which happens to be 192.168.1.1 and has a webserver configured to point to
556 class="cmtt-9">tmp/deploy/ipk</span>, a line like the following may be added:
557 <!--l. 324--><p class="noindent" ><span
558 class="cmtt-9">DISTRO</span><span
559 class="cmtt-9">_FEED</span><span
560 class="cmtt-9">_URI = "http://192.168.1.1/$</span><span
561 class="cmsy-9">{</span><span
562 class="cmtt-9">DISTRO</span><span
563 class="cmsy-9">}</span><span
564 class="cmtt-9">/$</span><span
565 class="cmsy-9">{</span><span
566 class="cmtt-9">DISTRO</span><span
567 class="cmtt-9">_VERSION</span><span
568 class="cmsy-9">}</span><span
569 class="cmtt-9">"</span>
570 <!--l. 326--><p class="noindent" >In general, any variable in OpenEmbedded that uses weak assignment (<span
571 class="cmtt-9">?=</span>) may be
572 overridden from these files.
573 <!--l. 329--><p class="noindent" >The following sections list some commonly used options.
574 <!--l. 331--><p class="noindent" >
575 <h5 class="subsubsectionHead"><span class="titlemark">5.4.1 </span> <a
576 id="x1-250005.4.1"></a>DISTRO_FEED_PREFIX</h5>
577 <!--l. 333--><p class="noindent" ><span
578 class="cmtt-9">DISTRO</span><span
579 class="cmtt-9">_FEED</span><span
580 class="cmtt-9">_PREFIX </span>specifies the name of the package update feed. This name may be
582 <!--l. 336--><p class="noindent" >Default: <span
583 class="cmtt-9">DISTRO</span><span
584 class="cmtt-9">_FEED</span><span
585 class="cmtt-9">_PREFIX = "remote"</span>
586 <!--l. 338--><p class="noindent" >
587 <h5 class="subsubsectionHead"><span class="titlemark">5.4.2 </span> <a
588 id="x1-260005.4.2"></a>DISTRO_FEED_URI</h5>
589 <!--l. 340--><p class="noindent" ><span
590 class="cmtt-9">DISTRO</span><span
591 class="cmtt-9">_FEED</span><span
592 class="cmtt-9">_URI </span>specifies the URI of the package update feed.
593 <!--l. 342--><p class="noindent" >Default: <span
594 class="cmtt-9">DISTRO</span><span
595 class="cmtt-9">_FEED</span><span
596 class="cmtt-9">_URI = "http://my-distribution.example/remote-feed/"</span>
597 <!--l. 344--><p class="noindent" >
598 <h5 class="subsubsectionHead"><span class="titlemark">5.4.3 </span> <a
599 id="x1-270005.4.3"></a>INHERIT</h5>
600 <!--l. 346--><p class="noindent" ><span
601 class="cmtt-9">INHERIT </span>specifies bbclasses to include from a configuration file. Usually, this variable
602 gets appended to by using the <span
603 class="cmtt-9">+= </span>operator.
604 <!--l. 349--><p class="noindent" >The OpenDreambox distribution automatically appends <span
605 class="cmtt-9">"buildhistory recipe</span><span
606 class="cmtt-9">_sanity</span>
608 class="cmtt-9">testlab" </span>to <span
609 class="cmtt-9">INHERIT</span>.
610 <!--l. 351--><p class="noindent" >Default: <span
611 class="cmtt-9">INHERIT = ""</span>
612 <!--l. 353--><p class="noindent" ><span
613 class="cmbx-10">Some examples:</span>
614 <!--l. 355--><p class="noindent" >Always build the latest versions of OpenDreambox-related projects from
616 <!--l. 357--><p class="noindent" ><span
617 class="cmtt-9">INHERIT += "opendreambox-autorev"</span>
621 <!--l. 359--><p class="noindent" >Remove temporary files of previous versions of a recipe before a newer version gets
623 <!--l. 361--><p class="noindent" ><span
624 class="cmtt-9">INHERIT += "rm</span><span
625 class="cmtt-9">_old</span><span
626 class="cmtt-9">_work"</span>
627 <!--l. 363--><p class="noindent" >Remove temporary files of a recipe after it has been built and packaged
629 <!--l. 365--><p class="noindent" ><span
630 class="cmtt-9">INHERIT += "rm</span><span
631 class="cmtt-9">_work"</span>
632 <!--l. 367--><p class="noindent" >
633 <h4 class="subsectionHead"><span class="titlemark">5.5 </span> <a
634 id="x1-280005.5"></a>Setting up a build directory</h4>
635 <!--l. 368--><p class="noindent" >To set up a build directory for e.g. <span
636 class="cmbx-10">DM 500 HD </span>run <span
637 class="cmtt-9">make MACHINE=dm500hd</span>. If
639 class="cmtt-9">MACHINE=dm500hd </span>has been set in <span
640 class="cmtt-9">conf/make.conf</span>, you can simply run <span
641 class="cmtt-9">make </span>with no
642 arguments instead. This will create and initialize the directory <span
643 class="cmtt-9">build/dm500hd</span>.
644 <!--l. 372--><p class="noindent" >
645 <h4 class="subsectionHead"><span class="titlemark">5.6 </span> <a
646 id="x1-290005.6"></a>Building a firmware image</h4>
647 <!--l. 373--><p class="noindent" >To build a firmware image for e.g. <span
648 class="cmbx-10">DM 500 HD </span>run <span
649 class="cmtt-9">make MACHINE=dm500hd image</span>. If
651 class="cmtt-9">MACHINE=dm500hd </span>has been set in <span
652 class="cmtt-9">conf/make.conf</span>, you can simply run <span
653 class="cmtt-9">make image</span>
655 <!--l. 377--><p class="noindent" >
656 <h4 class="subsectionHead"><span class="titlemark">5.7 </span> <a
657 id="x1-300005.7"></a>Building a package</h4>
658 <!--l. 378--><p class="noindent" >To build a single package, BitBake has to be used directly. First, the environment has
659 to be set up, in order to make BitBake available to the shell. This can be done with
660 the following command:
661 <!--l. 382--><p class="noindent" ><span
662 class="cmtt-9">source bitbake.env</span>
663 <!--l. 384--><p class="noindent" >BitBake must be run from the machine’s build directory. For <span
664 class="cmbx-10">DM 500 HD</span>
666 <!--l. 386--><p class="noindent" ><span
667 class="cmtt-9">cd build/dm500hd</span>
668 <!--l. 388--><p class="noindent" >In order to build enigma2, run:
669 <!--l. 390--><p class="noindent" ><span
670 class="cmtt-9">bitbake enigma2</span>.
674 <!--l. 392--><p class="noindent" >
675 <h3 class="sectionHead"><span class="titlemark">6 </span> <a
676 id="x1-310006"></a>Development hints</h3>
677 <!--l. 394--><p class="noindent" >
678 <h4 class="subsectionHead"><span class="titlemark">6.1 </span> <a
679 id="x1-320006.1"></a>Cross-compilation of external software</h4>
680 <!--l. 395--><p class="noindent" >OpenDreambox provides a script called <span
681 class="cmtt-9">cross-compile.env</span>. Once run, the script will
682 create the following commands (shell aliases), aiming to ease cross-compilation of
683 external source trees:
684 <ul class="itemize1">
685 <li class="itemize"><span
686 class="cmtt-9">oe</span><span
687 class="cmtt-9">_autoreconf </span>- Calls OE’s version of <span
688 class="cmtt-9">autoreconf</span>. Useful for projects based
691 <li class="itemize"><span
692 class="cmtt-9">oe</span><span
693 class="cmtt-9">_runconf </span>- Calls <span
694 class="cmtt-9">./configure </span>with parameters suitable for OE. Useful
695 for projects based on GNU autotools.
697 <li class="itemize"><span
698 class="cmtt-9">oe</span><span
699 class="cmtt-9">_runmake </span>- Calls <span
700 class="cmtt-9">make </span>with parameters suitable for OE. Useful for
701 projects based on GNU autotools or GNU make.
703 <li class="itemize"><span
704 class="cmtt-9">oe</span><span
705 class="cmtt-9">_env </span>- Useful to execute arbitrary commands in the OE environment
707 class="cmtt-9">oe</span><span
708 class="cmtt-9">_env env</span>).
710 <li class="itemize"><span
711 class="cmtt-9">oe</span><span
712 class="cmtt-9">_setenv </span>- Exports the OE environment to the currently running shell
714 <!--l. 406--><p class="noindent" >The script needs to know the target machine, which can be one of the supported
716 href="#x1-40001.2">1.2<!--tex4ht:ref: products --></a>). Because the script adds aliases to your currently running shell
717 session, it has to be invoked using <span
718 class="cmtt-9">source </span>or <span
719 class="cmtt-9">. </span>(the dot operator), e.g.:
720 <!--l. 409--><p class="noindent" ><span
721 class="cmtt-9">source cross-compile.env dm7020hd</span>
722 <!--l. 411--><p class="noindent" >The script may be called from any location, but must reside inside the OpenDreambox
723 Git tree. You may want to create a symlink to <span
724 class="cmtt-9">cross-compile.env </span>somewhere in your
726 class="cmtt-9">PATH</span>.
727 <!--l. 414--><p class="noindent" >
728 <h4 class="subsectionHead"><span class="titlemark">6.2 </span> <a
729 id="x1-330006.2"></a>Coding style</h4>
730 <!--l. 415--><p class="noindent" >Run <span
731 class="cmtt-9">scripts/do</span><span
732 class="cmtt-9">_stylize.sh </span>on new recipes to ensure proper coding style.
736 <!--l. 417--><p class="noindent" >
737 <h4 class="subsectionHead"><span class="titlemark">6.3 </span> <a
738 id="x1-340006.3"></a>Package architecture</h4>
739 <!--l. 418--><p class="noindent" >Set <span
740 class="cmtt-9">PACKAGE</span><span
741 class="cmtt-9">_ARCH = "$</span><span
742 class="cmsy-9">{</span><span
743 class="cmtt-9">MACHINE</span><span
744 class="cmtt-9">_ARCH</span><span
745 class="cmsy-9">}</span><span
746 class="cmtt-9">" </span>if either condition is met:
747 <ul class="itemize1">
748 <li class="itemize">The recipe uses <span
749 class="cmtt-9">COMBINED</span><span
750 class="cmtt-9">_FEATURES</span>, <span
751 class="cmtt-9">MACHINE</span><span
752 class="cmtt-9">_FEATURES </span>or
754 class="cmtt-9">DREAMBOX</span><span
755 class="cmtt-9">_FEATURES</span>.
757 <li class="itemize">The recipe is part of <span
758 class="cmtt-9">meta-bsp</span>.</li></ul>
759 <!--l. 424--><p class="noindent" >
760 <h3 class="sectionHead"><span class="titlemark">7 </span> <a
761 id="x1-350007"></a>Bug reports and patches</h3>
762 <!--l. 426--><p class="noindent" >Please send bug reports and patches to the Enigma2 development mailing list
764 class="cmtt-9"><enigma2-devel@lists.elitedvb.net></span>.
765 <!--l. 428--><p class="noindent" >A comfortable way to create patches is to use <span
766 class="cmtt-9">git format-patch</span>, after all changes
767 have been committed to your local copy of the repository.