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="2014-09-10 02:55: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">September 2014</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-dreambox</a></span>
53 <br /><span class="sectionToc" >2 <a
54 href="#x1-120002" id="QQ2-1-12">Further readings</a></span>
55 <br /><span class="sectionToc" >3 <a
56 href="#x1-130003" id="QQ2-1-13">Prerequisites</a></span>
57 <br /> <span class="subsectionToc" >3.1 <a
58 href="#x1-140003.1" id="QQ2-1-14">Required software</a></span>
59 <br /><span class="sectionToc" >4 <a
60 href="#x1-150004" id="QQ2-1-15">Major changes since previous public releases</a></span>
61 <br /> <span class="subsectionToc" >4.1 <a
62 href="#x1-160004.1" id="QQ2-1-16">Changes since release 1.6</a></span>
63 <br /> <span class="subsectionToc" >4.2 <a
64 href="#x1-170004.2" id="QQ2-1-17">Changes since release 2.0</a></span>
65 <br /><span class="sectionToc" >5 <a
66 href="#x1-180005" id="QQ2-1-18">Known Issues</a></span>
70 <br /><span class="sectionToc" >6 <a
71 href="#x1-190006" id="QQ2-1-19">Building OpenDreambox</a></span>
72 <br /> <span class="subsectionToc" >6.1 <a
73 href="#x1-200006.1" id="QQ2-1-20">Makefile targets</a></span>
74 <br /> <span class="subsectionToc" >6.2 <a
75 href="#x1-210006.2" id="QQ2-1-21">Configuration variables</a></span>
76 <br />  <span class="subsubsectionToc" >6.2.1 <a
77 href="#x1-220006.2.1" id="QQ2-1-22">BB_NUMBER_THREADS</a></span>
78 <br />  <span class="subsubsectionToc" >6.2.2 <a
79 href="#x1-230006.2.2" id="QQ2-1-23">MACHINE</a></span>
80 <br />  <span class="subsubsectionToc" >6.2.3 <a
81 href="#x1-240006.2.3" id="QQ2-1-24">PARALLEL_MAKE</a></span>
82 <br /> <span class="subsectionToc" >6.3 <a
83 href="#x1-250006.3" id="QQ2-1-25">Adding custom layers</a></span>
84 <br /> <span class="subsectionToc" >6.4 <a
85 href="#x1-260006.4" id="QQ2-1-26">Adding custom options</a></span>
86 <br />  <span class="subsubsectionToc" >6.4.1 <a
87 href="#x1-270006.4.1" id="QQ2-1-27">DISTRO_FEED_PREFIX</a></span>
88 <br />  <span class="subsubsectionToc" >6.4.2 <a
89 href="#x1-280006.4.2" id="QQ2-1-28">DISTRO_FEED_URI</a></span>
90 <br />  <span class="subsubsectionToc" >6.4.3 <a
91 href="#x1-290006.4.3" id="QQ2-1-29">INHERIT</a></span>
92 <br /> <span class="subsectionToc" >6.5 <a
93 href="#x1-300006.5" id="QQ2-1-30">Setting up a build directory</a></span>
94 <br /> <span class="subsectionToc" >6.6 <a
95 href="#x1-310006.6" id="QQ2-1-31">Building a firmware image</a></span>
96 <br /> <span class="subsectionToc" >6.7 <a
97 href="#x1-320006.7" id="QQ2-1-32">Building a package</a></span>
98 <br /><span class="sectionToc" >7 <a
99 href="#x1-330007" id="QQ2-1-33">Development hints</a></span>
100 <br /> <span class="subsectionToc" >7.1 <a
101 href="#x1-340007.1" id="QQ2-1-34">Cross-compilation of external software</a></span>
102 <br /> <span class="subsectionToc" >7.2 <a
103 href="#x1-350007.2" id="QQ2-1-35">Coding style</a></span>
104 <br /> <span class="subsectionToc" >7.3 <a
105 href="#x1-360007.3" id="QQ2-1-36">Package architecture</a></span>
106 <br /><span class="sectionToc" >8 <a
107 href="#x1-370008" id="QQ2-1-37">Bug reports and patches</a></span>
112 <!--l. 54--><p class="noindent" >
113 <h3 class="sectionHead"><span class="titlemark">1 </span> <a
114 id="x1-20001"></a>Introduction</h3>
115 <div class="flushleft"
117 <!--l. 55--><p class="noindent" >
118 This document briefly describes the OpenDreambox distribution, an
119 embedded Linux distribution for Set-Top-Boxes manufactured by <a
120 href="http://www.dream-multimedia-tv.de/" >Dream
122 <!--l. 59--><p class="noindent" >OpenDreambox is based on the <a
123 href="http://www.openembedded.org/" >OpenEmbedded</a> build framework, which uses
124 BitBake to transform build instructions into distributable firmare images and
126 <!--l. 63--><p class="noindent" >The current version, OpenDreambox 2.2, is based on the <a
127 href="https://www.yoctoproject.org/" >Yocto Project</a>, release
128 1.5.1 ”Dora”, an umbrella project for OpenEmbedded and related tools.</div>
129 <!--l. 67--><p class="noindent" >
130 <h4 class="subsectionHead"><span class="titlemark">1.1 </span> <a
131 id="x1-30001.1"></a>Target audience</h4>
132 <div class="flushleft"
134 <!--l. 68--><p class="noindent" >
135 Developers familiar with previous versions of OpenDreambox or
136 OpenEmbedded in general.</div>
137 <!--l. 73--><p class="noindent" >
138 <h4 class="subsectionHead"><span class="titlemark">1.2 </span> <a
139 id="x1-40001.2"></a>Supported products</h4>
140 <div class="flushleft"
142 <!--l. 75--><p class="noindent" >
143 The current version includes support for the following products:
147 <div class="tabular"> <table id="TBL-2" class="tabular"
148 cellspacing="0" cellpadding="0" rules="groups"
149 ><colgroup id="TBL-2-1g"><col
150 id="TBL-2-1"></colgroup><colgroup id="TBL-2-2g"><col
151 id="TBL-2-2"></colgroup><tr
152 class="hline"><td><hr></td><td><hr></td></tr><tr
153 style="vertical-align:baseline;" id="TBL-2-1-"><td style="white-space:nowrap; text-align:left;" id="TBL-2-1-1"
155 class="cmbx-10">Product name </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-2-1-2"
157 class="cmbx-10">Environment variable</span></td></tr><tr
158 class="hline"><td><hr></td><td><hr></td></tr><tr
159 style="vertical-align:baseline;" id="TBL-2-2-"><td style="white-space:nowrap; text-align:left;" id="TBL-2-2-1"
160 class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-2-2-2"
163 style="vertical-align:baseline;" id="TBL-2-3-"><td style="white-space:nowrap; text-align:left;" id="TBL-2-3-1"
164 class="td11">DM 500 HD </td><td style="white-space:nowrap; text-align:left;" id="TBL-2-3-2"
166 class="cmtt-9">MACHINE=dm500hd </span></td>
168 style="vertical-align:baseline;" id="TBL-2-4-"><td style="white-space:nowrap; text-align:left;" id="TBL-2-4-1"
169 class="td11">DM 500 HD V2 </td><td style="white-space:nowrap; text-align:left;" id="TBL-2-4-2"
171 class="cmtt-9">MACHINE=dm500hdv2 </span></td>
173 style="vertical-align:baseline;" id="TBL-2-5-"><td style="white-space:nowrap; text-align:left;" id="TBL-2-5-1"
174 class="td11">DM 800 HD SE </td><td style="white-space:nowrap; text-align:left;" id="TBL-2-5-2"
176 class="cmtt-9">MACHINE=dm800se </span></td>
178 style="vertical-align:baseline;" id="TBL-2-6-"><td style="white-space:nowrap; text-align:left;" id="TBL-2-6-1"
179 class="td11">DM 800 HD SE V2</td><td style="white-space:nowrap; text-align:left;" id="TBL-2-6-2"
181 class="cmtt-9">MACHINE=dm800sev2 </span></td>
183 style="vertical-align:baseline;" id="TBL-2-7-"><td style="white-space:nowrap; text-align:left;" id="TBL-2-7-1"
184 class="td11">DM 7020 HD </td><td style="white-space:nowrap; text-align:left;" id="TBL-2-7-2"
186 class="cmtt-9">MACHINE=dm7020hd </span></td>
188 style="vertical-align:baseline;" id="TBL-2-8-"><td style="white-space:nowrap; text-align:left;" id="TBL-2-8-1"
189 class="td11">DM 7020 HD V2 </td><td style="white-space:nowrap; text-align:left;" id="TBL-2-8-2"
191 class="cmtt-9">MACHINE=dm7020hdv2 </span></td>
193 style="vertical-align:baseline;" id="TBL-2-9-"><td style="white-space:nowrap; text-align:left;" id="TBL-2-9-1"
194 class="td11">DM 7080 </td><td style="white-space:nowrap; text-align:left;" id="TBL-2-9-2"
196 class="cmtt-9">MACHINE=dm7080 </span></td>
198 style="vertical-align:baseline;" id="TBL-2-10-"><td style="white-space:nowrap; text-align:left;" id="TBL-2-10-1"
199 class="td11">DM 8000 HD PVR</td><td style="white-space:nowrap; text-align:left;" id="TBL-2-10-2"
201 class="cmtt-9">MACHINE=dm8000 </span></td>
203 style="vertical-align:baseline;" id="TBL-2-11-"><td style="white-space:nowrap; text-align:left;" id="TBL-2-11-1"
204 class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-2-11-2"
207 class="hline"><td><hr></td><td><hr></td></tr><tr
208 style="vertical-align:baseline;" id="TBL-2-12-"><td style="white-space:nowrap; text-align:left;" id="TBL-2-12-1"
211 <!--l. 94--><p class="noindent" >Note, that not all of these platforms offer enough internal storage to actually flash a
212 generated firmware image. It might be possible to boot from external storage or
213 network, though.</div>
214 <!--l. 99--><p class="noindent" >
215 <h4 class="subsectionHead"><span class="titlemark">1.3 </span> <a
216 id="x1-50001.3"></a>License</h4>
220 <div class="verbatim" id="verbatim-1">
221 Copyright (c) 2010-2014 Dream Property GmbH, Germany
222  <br />                        http://www.dream-multimedia-tv.de/
223  <br />Authors:
224  <br />  Andreas Frisch <fraxinas@opendreambox.org>
225  <br />  Andreas Monzner <ghost@opendreambox.org>
226  <br />  Andreas Oberritter <obi@opendreambox.org>
227  <br />  Mladen Horvat <acid-burn@opendreambox.org>
228  <br />  Stefan Pluecken <thedoc@opendreambox.org>
229  <br />  Stephan Reichholf <reichi@opendreambox.org>
231  <br />Permission is hereby granted, free of charge, to any person obtaining a copy
232  <br />of this software and associated documentation files (the "Software"), to deal
233  <br />in the Software without restriction, including without limitation the rights
234  <br />to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
235  <br />copies of the Software, and to permit persons to whom the Software is
236  <br />furnished to do so, subject to the following conditions:
238  <br />The above copyright notice and this permission notice shall be included in
239  <br />all copies or substantial portions of the Software.
241  <br />THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
242  <br />IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
243  <br />FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
244  <br />AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
245  <br />LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
246  <br />OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
247  <br />THE SOFTWARE.
248  <br />    </div>
249 <!--l. 129--><p class="nopar" >
250 <!--l. 131--><p class="noindent" >
251 <h4 class="subsectionHead"><span class="titlemark">1.4 </span> <a
252 id="x1-60001.4"></a>Obtaining the source code</h4>
253 <!--l. 132--><p class="noindent" >OpenDreambox uses the Git version control system. To obtain the source code, it is
254 required to install Git. See <a
255 href="http://git-scm.com/" class="url" ><span
256 class="cmtt-10">http://git-_scm.com/</span></a>.
257 <!--l. 135--><p class="noindent" >To initially download the source into the current directory, issue the following
259 <!--l. 138--><p class="noindent" ><span
260 class="cmtt-9">git clone -b dora git://git.opendreambox.org/git/opendreambox.git</span>
261 <!--l. 140--><p class="noindent" >The Git repository can be viewed online at:
262 <!--l. 142--><p class="noindent" ><a
263 href="http://git.opendreambox.org/?p=opendreambox.git" class="url" ><span
264 class="cmtt-10">http://git.opendreambox.org/?p=opendreambox.git</span></a>
268 <!--l. 144--><p class="noindent" >
269 <h4 class="subsectionHead"><span class="titlemark">1.5 </span> <a
270 id="x1-70001.5"></a>Quick start</h4>
271 <!--l. 145--><p class="noindent" >For the impatient:
272 <!--l. 147--><p class="noindent" ><span
273 class="cmtt-9">make -C opendreambox image</span>
274 <!--l. 149--><p class="noindent" >If this command fails, prerequisites my be missing. See section <a
275 href="#x1-130003">3<!--tex4ht:ref: prerequisites --></a>.
276 <!--l. 151--><p class="noindent" >
277 <h4 class="subsectionHead"><span class="titlemark">1.6 </span> <a
278 id="x1-80001.6"></a>Directory structure</h4>
279 <!--l. 152--><p class="noindent" >OpenDreambox consists of a set of layers containing build instructions. This meta
280 data is used by BitBake to download and compile source code and to assemble
281 installable software packages and firmware images.
282 <!--l. 156--><p class="noindent" >Currently, these layers are used, ordered by priority from highest to lowest:
283 <ul class="itemize1">
284 <li class="itemize"><span
285 class="cmtt-9">meta-dreambox</span>
287 <li class="itemize"><span
288 class="cmtt-9">meta-opendreambox</span>
290 <li class="itemize"><span
291 class="cmtt-9">meta-qt5</span>
293 <li class="itemize"><span
294 class="cmtt-9">meta-openembedded/meta-oe</span>
296 <li class="itemize"><span
297 class="cmtt-9">meta-openembedded/meta-filesystems</span>
299 <li class="itemize"><span
300 class="cmtt-9">meta-openembedded/meta-initramfs</span>
302 <li class="itemize"><span
303 class="cmtt-9">meta-openembedded/meta-multimedia</span>
305 <li class="itemize"><span
306 class="cmtt-9">meta-openembedded/meta-networking</span>
308 <li class="itemize"><span
309 class="cmtt-9">meta-openembedded/meta-ruby</span>
311 <li class="itemize"><span
312 class="cmtt-9">openembedded-core/meta</span></li></ul>
316 <!--l. 172--><p class="noindent" >If a recipe for the same package exists in multiple layers, then the higher priority
317 layer takes precedence over the lower priority layer.
318 <!--l. 176--><p class="noindent" >For example, if <span
319 class="cmtt-9">libmad</span><span
320 class="cmtt-9">_0.15.1b.bb </span>existed in both <span
321 class="cmtt-9">meta-openembedded </span>and
323 class="cmtt-9">openembedded-core</span>, the recipe in <span
324 class="cmtt-9">meta-openembedded </span>would be used, because
326 class="cmtt-9">openembedded-core </span>has lower priority.
327 <!--l. 181--><p class="noindent" ><span
328 class="cmbx-10">NOTE: </span>This would still be true even if the version of <span
329 class="cmtt-9">libmad </span>in <span
330 class="cmtt-9">openembeded-core</span>
331 was higher than the version in <span
332 class="cmtt-9">meta-openembedded</span>, unless <span
333 class="cmtt-9">PREFERRED</span><span
334 class="cmtt-9">_VERSION</span><span
335 class="cmtt-9">_libmad</span>
336 was set to the version in <span
337 class="cmtt-9">openembedded-core</span>. There is currently no way to prefer a
338 version of a lower priority layer, if the same version is present in a higher priority
340 <!--l. 187--><p class="noindent" >
341 <h5 class="subsubsectionHead"><span class="titlemark">1.6.1 </span> <a
342 id="x1-90001.6.1"></a>openembedded-core and meta-openembedded</h5>
343 <!--l. 188--><p class="noindent" >These directories contain copies of Git repositories from git.openembedded.org,
344 including the OpenEmbedded-Core layer and the (Meta-)OpenEmbedded layers.
345 They get created automatically when building the distribution for the first
347 <!--l. 192--><p class="noindent" >Throughout this document, the combination of these directories will be referred to as
349 <!--l. 195--><p class="noindent" >The latest changes to these Git repositories can be seen at:
350 <!--l. 197--><p class="noindent" ><a
351 href="http://git.openembedded.org/openembedded-core-contrib/log/?h=obi/dora" class="url" ><span
352 class="cmtt-10">http://git.openembedded.org/openembedded-_core-_contrib/log/?h=obi/dora</span></a>
353 <!--l. 199--><p class="noindent" ><a
354 href="http://git.openembedded.org/meta-openembedded-contrib/log/?h=obi/dora" class="url" ><span
355 class="cmtt-10">http://git.openembedded.org/meta-_openembedded-_contrib/log/?h=obi/dora</span></a>
356 <!--l. 201--><p class="noindent" >
357 <h5 class="subsubsectionHead"><span class="titlemark">1.6.2 </span> <a
358 id="x1-100001.6.2"></a>meta-opendreambox</h5>
359 <!--l. 202--><p class="noindent" >This directory contains:
360 <ul class="itemize1">
361 <li class="itemize">Recipes for packages written specifically for the OpenDreambox
364 <li class="itemize">Modifications to recipes from OpenEmbedded
366 <li class="itemize">Recipes for software versions older than those available from
369 <li class="itemize">Recipes for software versions newer than those available from
370 OpenEmbedded</li></ul>
374 <!--l. 211--><p class="noindent" >
375 <h5 class="subsubsectionHead"><span class="titlemark">1.6.3 </span> <a
376 id="x1-110001.6.3"></a>meta-dreambox</h5>
377 <!--l. 212--><p class="noindent" >The directory <span
378 class="cmtt-9">meta-dreambox </span>contains Board Support Packages (BSP) for the
379 supported Dreambox models. This includes:
380 <ul class="itemize1">
381 <li class="itemize">Hardware drivers
383 <li class="itemize">Machine specific overrides
385 <li class="itemize">The Linux kernel
387 <li class="itemize">The boot loader
389 <li class="itemize">Splash images</li></ul>
390 <!--l. 223--><p class="noindent" >
391 <h3 class="sectionHead"><span class="titlemark">2 </span> <a
392 id="x1-120002"></a>Further readings</h3>
393 <ul class="itemize1">
394 <li class="itemize">The Yocto Project Reference Manual: <a
395 href="https://www.yoctoproject.org/docs/1.5.1/ref-manual/ref-manual.html" class="url" ><span
396 class="cmtt-10">https://www.yoctoproject.org/docs/1.5.1/ref-_manual/ref-_manual.html</span></a></li></ul>
397 <!--l. 229--><p class="noindent" >
398 <h3 class="sectionHead"><span class="titlemark">3 </span> <a
399 id="x1-130003"></a>Prerequisites</h3>
400 <!--l. 232--><p class="noindent" >
401 <h4 class="subsectionHead"><span class="titlemark">3.1 </span> <a
402 id="x1-140003.1"></a>Required software</h4>
403 <!--l. 234--><p class="noindent" >The OpenEmbedded project provides a general list of prerequisites for many Linux
404 distributions and also for some other operating systems.
408 <ul class="itemize1">
409 <li class="itemize"><a
410 href="http://www.openembedded.org/wiki/Getting\_started#Required\_software" class="url" ><span
411 class="cmtt-10">http://www.openembedded.org/wiki/Getting\_started#Required\_software</span></a></li></ul>
412 <!--l. 241--><p class="noindent" >It is highly recommended to use Linux to build OpenDreambox. In theory, any recent
413 distribution will do, but not many distributions have been verified to build
414 OpenDreambox without errors. Tested distributions include:
415 <ul class="itemize1">
416 <li class="itemize">Debian 7.6 ”Wheezy” [i386, amd64]
418 <li class="itemize">Ubuntu 14.04.1 LTS ”Trusty Tahr” [amd64]</li></ul>
422 <!--l. 253--><p class="noindent" >
423 <h3 class="sectionHead"><span class="titlemark">4 </span> <a
424 id="x1-150004"></a>Major changes since previous public releases</h3>
425 <!--l. 255--><p class="noindent" >
426 <h4 class="subsectionHead"><span class="titlemark">4.1 </span> <a
427 id="x1-160004.1"></a>Changes since release 1.6</h4>
428 <ul class="itemize1">
429 <li class="itemize">Recipes were split across multiple layers and categorized.
431 <li class="itemize"><span
432 class="cmtt-9">env.source </span>has been replaced by two files, <span
433 class="cmtt-9">bitbake.env </span>and
435 class="cmtt-9">cross-compile.env</span>. The former sets a minimal environment that is needed
436 to execute bitbake. The latter creates machine-specific command aliases,
437 in order to compile external software.
439 <li class="itemize">All machines share a common <span
440 class="cmtt-9">tmp </span>directory.
442 <li class="itemize"><span
443 class="cmtt-9">$</span><span
444 class="cmsy-9">{</span><span
445 class="cmtt-9">MACHINE</span><span
446 class="cmsy-9">}</span><span
447 class="cmtt-9">/build </span>directories were renamed to <span
448 class="cmtt-9">build/$</span><span
449 class="cmsy-9">{</span><span
450 class="cmtt-9">MACHINE</span><span
451 class="cmsy-9">}</span>.
453 <li class="itemize">Kernel packages were renamed from <span
454 class="cmtt-9">linux-$</span><span
455 class="cmsy-9">{</span><span
456 class="cmtt-9">MACHINE</span><span
457 class="cmsy-9">} </span>to <span
458 class="cmtt-9">linux-dreambox</span>.
460 <li class="itemize">Support for machines based on ATI Xilleon or IBM STB was dropped.</li></ul>
461 <!--l. 268--><p class="noindent" >
462 <h4 class="subsectionHead"><span class="titlemark">4.2 </span> <a
463 id="x1-170004.2"></a>Changes since release 2.0</h4>
464 <ul class="itemize1">
465 <li class="itemize">Added support for DM7080.
467 <li class="itemize">If a recipe changes, the corresponding packages will be rebuilt
468 automatically, in contrast to required manual PR bumps in the past.
470 <li class="itemize">Each machine uses its own tmp directory again, like before 2.0. However,
471 there is a shared <span
472 class="cmtt-9">sstate-cache</span>, which allows to share already compiled
473 data between compatible machines. This impacts performance and size of
474 the build system, but improves reliability and consistency across builds.
479 <li class="itemize">Support for machines without FPU and kernel versions below 3.x was
482 <li class="itemize">Layers under meta-bsp were combined into meta-dreambox.
484 <li class="itemize">Default package format switched from ipk (opkg) to deb (dpkg + apt).
486 <li class="itemize"><span
487 class="cmtt-9">dreambox-image </span>was renamed to include the package format
489 class="cmtt-9">dreambox-image-deb</span>).</li></ul>
490 <!--l. 283--><p class="noindent" >
491 <h3 class="sectionHead"><span class="titlemark">5 </span> <a
492 id="x1-180005"></a>Known Issues</h3>
493 <!--l. 285--><p class="noindent" >None.
497 <!--l. 289--><p class="noindent" >
498 <h3 class="sectionHead"><span class="titlemark">6 </span> <a
499 id="x1-190006"></a>Building OpenDreambox</h3>
500 <!--l. 291--><p class="noindent" >In the top level directory, there is a <span
501 class="cmtt-9">Makefile</span>, which is used to set up build
502 directories and to fetch or update all used repositories. The Makefile can
503 be influenced by environment variables, either by specifing them on the
504 command-line or by storing them in a file called <span
505 class="cmtt-9">conf/make.conf</span>. It is not
506 recommended to edit the <span
507 class="cmtt-9">Makefile </span>directly in order to avoid conflicts with future
509 <!--l. 298--><p class="noindent" >When the <span
510 class="cmtt-9">Makefile </span>is run for the first time, the following steps will be executed:
511 <ul class="itemize1">
512 <li class="itemize">Creation of configuration files
513 <ul class="itemize2">
514 <li class="itemize"><span
515 class="cmtt-9">bitbake.env</span>
517 <li class="itemize"><span
518 class="cmtt-9">conf/opendreambox.conf</span>
520 <li class="itemize"><span
521 class="cmtt-9">build/$</span><span
522 class="cmsy-9">{</span><span
523 class="cmtt-9">MACHINE</span><span
524 class="cmsy-9">}</span><span
525 class="cmtt-9">/conf/bblayers.conf</span>
527 <li class="itemize"><span
528 class="cmtt-9">build/$</span><span
529 class="cmsy-9">{</span><span
530 class="cmtt-9">MACHINE</span><span
531 class="cmsy-9">}</span><span
532 class="cmtt-9">/conf/local.conf</span></li></ul>
534 <li class="itemize">Update or checkout of Git repositories
535 <ul class="itemize2">
536 <li class="itemize">OpenDreambox
538 <li class="itemize">BitBake
540 <li class="itemize">OpenEmbedded</li></ul>
542 <!--l. 317--><p class="noindent" >
543 <h4 class="subsectionHead"><span class="titlemark">6.1 </span> <a
544 id="x1-200006.1"></a>Makefile targets</h4>
545 <!--l. 318--><p class="noindent" >Run <span
546 class="cmtt-9">make help </span>to get a list of targets of the top level Makefile, together with a brief
551 <!--l. 320--><p class="noindent" >
552 <h4 class="subsectionHead"><span class="titlemark">6.2 </span> <a
553 id="x1-210006.2"></a>Configuration variables</h4>
554 <!--l. 321--><p class="noindent" >
555 <h5 class="subsubsectionHead"><span class="titlemark">6.2.1 </span> <a
556 id="x1-220006.2.1"></a>BB_NUMBER_THREADS</h5>
557 <!--l. 322--><p class="noindent" >Controls how many BitBake tasks may run at a time. Defaults to the number of cores
558 available on the build system.
559 <!--l. 325--><p class="noindent" >
560 <h5 class="subsubsectionHead"><span class="titlemark">6.2.2 </span> <a
561 id="x1-230006.2.2"></a>MACHINE</h5>
562 <!--l. 326--><p class="noindent" >Controls the target machine to build packages for. See section <a
563 href="#x1-40001.2">1.2<!--tex4ht:ref: products --></a> for a list of
565 <!--l. 329--><p class="noindent" >
566 <h5 class="subsubsectionHead"><span class="titlemark">6.2.3 </span> <a
567 id="x1-240006.2.3"></a>PARALLEL_MAKE</h5>
568 <!--l. 330--><p class="noindent" >Controls how many processes per recipe <span
569 class="cmtt-9">make </span>may use. Defaults to the number of
570 cores available on the build system.
571 <!--l. 333--><p class="noindent" >
572 <h4 class="subsectionHead"><span class="titlemark">6.3 </span> <a
573 id="x1-250006.3"></a>Adding custom layers</h4>
574 <!--l. 335--><p class="noindent" >It is possible to add custom layers to the build system. This can be done globally and
575 per machine. To add a layer globally, edit <span
576 class="cmtt-9">conf/bblayers-ext.conf</span>. To add a
577 machine-specific layer, edit <span
578 class="cmtt-9">conf/bblayers-$</span><span
579 class="cmsy-9">{</span><span
580 class="cmtt-9">MACHINE</span><span
581 class="cmsy-9">}</span><span
582 class="cmtt-9">-ext.conf</span>. Assuming that an
583 additional layer is available at <span
584 class="cmtt-9">$</span><span
585 class="cmsy-9">{</span><span
586 class="cmtt-9">HOME</span><span
587 class="cmsy-9">}</span><span
588 class="cmtt-9">/custom-layer</span>, the entry to add to the file will
590 <!--l. 341--><p class="noindent" ><span
591 class="cmtt-9">BBLAYERS =+ "$</span><span
592 class="cmsy-9">{</span><span
593 class="cmtt-9">HOME</span><span
594 class="cmsy-9">}</span><span
595 class="cmtt-9">/custom-layer"</span>
596 <!--l. 343--><p class="noindent" >
597 <h4 class="subsectionHead"><span class="titlemark">6.4 </span> <a
598 id="x1-260006.4"></a>Adding custom options</h4>
599 <!--l. 344--><p class="noindent" >It is possible to tweak a lot more options than those used by the <span
600 class="cmtt-9">Makefile </span>by editing
602 class="cmtt-9">conf/local-ext.conf </span>or <span
603 class="cmtt-9">conf/local-$</span><span
604 class="cmsy-9">{</span><span
605 class="cmtt-9">MACHINE</span><span
606 class="cmsy-9">}</span><span
607 class="cmtt-9">-ext.conf</span>.
611 <!--l. 347--><p class="noindent" >For example, if the firmware shall use the package feed built on the develoment
612 machine, which happens to be 192.168.1.1 and has a webserver configured to point to
614 class="cmtt-9">tmp/deploy/ipk</span>, a line like the following may be added:
615 <!--l. 351--><p class="noindent" ><span
616 class="cmtt-9">DISTRO</span><span
617 class="cmtt-9">_FEED</span><span
618 class="cmtt-9">_URI = "http://192.168.1.1/$</span><span
619 class="cmsy-9">{</span><span
620 class="cmtt-9">DISTRO</span><span
621 class="cmsy-9">}</span><span
622 class="cmtt-9">/$</span><span
623 class="cmsy-9">{</span><span
624 class="cmtt-9">DISTRO</span><span
625 class="cmtt-9">_VERSION</span><span
626 class="cmsy-9">}</span><span
627 class="cmtt-9">"</span>
628 <!--l. 353--><p class="noindent" >In general, any variable in OpenEmbedded that uses weak assignment (<span
629 class="cmtt-9">?=</span>) may be
630 overridden from these files.
631 <!--l. 356--><p class="noindent" >The following sections list some commonly used options.
632 <!--l. 358--><p class="noindent" >
633 <h5 class="subsubsectionHead"><span class="titlemark">6.4.1 </span> <a
634 id="x1-270006.4.1"></a>DISTRO_FEED_PREFIX</h5>
635 <!--l. 360--><p class="noindent" ><span
636 class="cmtt-9">DISTRO</span><span
637 class="cmtt-9">_FEED</span><span
638 class="cmtt-9">_PREFIX </span>specifies the name of the package update feed. This name may be
640 <!--l. 363--><p class="noindent" >Default: <span
641 class="cmtt-9">DISTRO</span><span
642 class="cmtt-9">_FEED</span><span
643 class="cmtt-9">_PREFIX = "remote"</span>
644 <!--l. 365--><p class="noindent" >
645 <h5 class="subsubsectionHead"><span class="titlemark">6.4.2 </span> <a
646 id="x1-280006.4.2"></a>DISTRO_FEED_URI</h5>
647 <!--l. 367--><p class="noindent" ><span
648 class="cmtt-9">DISTRO</span><span
649 class="cmtt-9">_FEED</span><span
650 class="cmtt-9">_URI </span>specifies the URI of the package update feed.
651 <!--l. 369--><p class="noindent" >Default: <span
652 class="cmtt-9">DISTRO</span><span
653 class="cmtt-9">_FEED</span><span
654 class="cmtt-9">_URI = "http://my-distribution.example/remote-feed/"</span>
655 <!--l. 371--><p class="noindent" >
656 <h5 class="subsubsectionHead"><span class="titlemark">6.4.3 </span> <a
657 id="x1-290006.4.3"></a>INHERIT</h5>
658 <!--l. 373--><p class="noindent" ><span
659 class="cmtt-9">INHERIT </span>specifies bbclasses to include from a configuration file. Usually, this variable
660 gets appended to by using the <span
661 class="cmtt-9">+= </span>operator.
662 <!--l. 376--><p class="noindent" >The OpenDreambox distribution automatically appends <span
663 class="cmtt-9">"buildhistory recipe</span><span
664 class="cmtt-9">_sanity"</span>
666 class="cmtt-9">INHERIT</span>.
667 <!--l. 378--><p class="noindent" >Default: <span
668 class="cmtt-9">INHERIT = ""</span>
669 <!--l. 380--><p class="noindent" ><span
670 class="cmbx-10">Some examples:</span>
671 <!--l. 382--><p class="noindent" >Always build the latest versions of OpenDreambox-related projects from
673 <!--l. 384--><p class="noindent" ><span
674 class="cmtt-9">INHERIT += "opendreambox-autorev"</span>
675 <!--l. 386--><p class="noindent" >Remove temporary files of previous versions of a recipe before a newer version gets
677 <!--l. 388--><p class="noindent" ><span
678 class="cmtt-9">INHERIT += "rm</span><span
679 class="cmtt-9">_old</span><span
680 class="cmtt-9">_work"</span>
684 <!--l. 390--><p class="noindent" >
685 <h4 class="subsectionHead"><span class="titlemark">6.5 </span> <a
686 id="x1-300006.5"></a>Setting up a build directory</h4>
687 <!--l. 391--><p class="noindent" >To set up a build directory for e.g. <span
688 class="cmbx-10">DM 7080 </span>run <span
689 class="cmtt-9">make MACHINE=dm7080</span>. If
691 class="cmtt-9">MACHINE=dm7080 </span>has been set in <span
692 class="cmtt-9">conf/make.conf </span>(default), you can simply run
694 class="cmtt-9">make </span>with no arguments instead. This will create and initialize the directory
696 class="cmtt-9">build/dm7080</span>.
697 <!--l. 395--><p class="noindent" >
698 <h4 class="subsectionHead"><span class="titlemark">6.6 </span> <a
699 id="x1-310006.6"></a>Building a firmware image</h4>
700 <!--l. 396--><p class="noindent" >To build a firmware image for e.g. <span
701 class="cmbx-10">DM 7080 </span>run <span
702 class="cmtt-9">make MACHINE=dm7080 image</span>. If
704 class="cmtt-9">MACHINE=dm7080 </span>has been set in <span
705 class="cmtt-9">conf/make.conf </span>(default), you can simply run <span
706 class="cmtt-9">make</span>
708 class="cmtt-9">image </span>instead.
709 <!--l. 400--><p class="noindent" >
710 <h4 class="subsectionHead"><span class="titlemark">6.7 </span> <a
711 id="x1-320006.7"></a>Building a package</h4>
712 <!--l. 401--><p class="noindent" >To build a single package, BitBake has to be used directly. First, the environment has
713 to be set up, in order to make BitBake available to the shell. This can be done with
714 the following command:
715 <!--l. 405--><p class="noindent" ><span
716 class="cmtt-9">source bitbake.env</span>
717 <!--l. 407--><p class="noindent" >BitBake must be run from the machine’s build directory. For <span
718 class="cmbx-10">DM 7080</span>
720 <!--l. 409--><p class="noindent" ><span
721 class="cmtt-9">cd build/dm7080</span>
722 <!--l. 411--><p class="noindent" >In order to build enigma2, run:
723 <!--l. 413--><p class="noindent" ><span
724 class="cmtt-9">bitbake enigma2</span>.
725 <!--l. 415--><p class="noindent" >
726 <h3 class="sectionHead"><span class="titlemark">7 </span> <a
727 id="x1-330007"></a>Development hints</h3>
728 <!--l. 417--><p class="noindent" >
729 <h4 class="subsectionHead"><span class="titlemark">7.1 </span> <a
730 id="x1-340007.1"></a>Cross-compilation of external software</h4>
731 <!--l. 418--><p class="noindent" >OpenDreambox provides a script called <span
732 class="cmtt-9">cross-compile.env</span>. Once run, the script will
733 create the following commands (shell aliases), aiming to ease cross-compilation of
734 external source trees:
738 <ul class="itemize1">
739 <li class="itemize"><span
740 class="cmtt-9">oe</span><span
741 class="cmtt-9">_autoreconf </span>- Calls OE’s version of <span
742 class="cmtt-9">autoreconf</span>. Useful for projects based
745 <li class="itemize"><span
746 class="cmtt-9">oe</span><span
747 class="cmtt-9">_runconf </span>- Calls <span
748 class="cmtt-9">./configure </span>with parameters suitable for OE. Useful
749 for projects based on GNU autotools.
751 <li class="itemize"><span
752 class="cmtt-9">oe</span><span
753 class="cmtt-9">_runmake </span>- Calls <span
754 class="cmtt-9">make </span>with parameters suitable for OE. Useful for
755 projects based on GNU autotools or GNU make.
757 <li class="itemize"><span
758 class="cmtt-9">oe</span><span
759 class="cmtt-9">_env </span>- Useful to execute arbitrary commands in the OE environment
761 class="cmtt-9">oe</span><span
762 class="cmtt-9">_env env</span>).
764 <li class="itemize"><span
765 class="cmtt-9">oe</span><span
766 class="cmtt-9">_setenv </span>- Exports the OE environment to the currently running shell
768 <!--l. 429--><p class="noindent" >The script needs to know the target machine, which can be one of the supported
770 href="#x1-40001.2">1.2<!--tex4ht:ref: products --></a>). Because the script adds aliases to your currently running shell
771 session, it has to be invoked using <span
772 class="cmtt-9">source </span>or <span
773 class="cmtt-9">. </span>(the dot operator), e.g.:
774 <!--l. 432--><p class="noindent" ><span
775 class="cmtt-9">source cross-compile.env dm7080</span>
776 <!--l. 434--><p class="noindent" >The script may be called from any location, but must reside inside the OpenDreambox
777 Git tree. You may want to create a symlink to <span
778 class="cmtt-9">cross-compile.env </span>somewhere in your
780 class="cmtt-9">PATH</span>.
781 <!--l. 437--><p class="noindent" >
782 <h4 class="subsectionHead"><span class="titlemark">7.2 </span> <a
783 id="x1-350007.2"></a>Coding style</h4>
784 <!--l. 438--><p class="noindent" >Run <span
785 class="cmtt-9">scripts/do</span><span
786 class="cmtt-9">_stylize.sh </span>on new recipes to ensure proper coding style.
787 <!--l. 440--><p class="noindent" >
788 <h4 class="subsectionHead"><span class="titlemark">7.3 </span> <a
789 id="x1-360007.3"></a>Package architecture</h4>
790 <!--l. 441--><p class="noindent" >Set <span
791 class="cmtt-9">PACKAGE</span><span
792 class="cmtt-9">_ARCH = "$</span><span
793 class="cmsy-9">{</span><span
794 class="cmtt-9">MACHINE</span><span
795 class="cmtt-9">_ARCH</span><span
796 class="cmsy-9">}</span><span
797 class="cmtt-9">" </span>if either condition is met:
798 <ul class="itemize1">
799 <li class="itemize">The recipe uses <span
800 class="cmtt-9">COMBINED</span><span
801 class="cmtt-9">_FEATURES</span>, <span
802 class="cmtt-9">MACHINE</span><span
803 class="cmtt-9">_FEATURES </span>or
805 class="cmtt-9">DREAMBOX</span><span
806 class="cmtt-9">_FEATURES</span>.
808 <li class="itemize">The recipe uses <span
809 class="cmtt-9">COMPATIBLE</span><span
810 class="cmtt-9">_MACHINE</span>.
815 <li class="itemize">The recipe is part of <span
816 class="cmtt-9">meta-dreambox</span>.</li></ul>
817 <!--l. 448--><p class="noindent" >
818 <h3 class="sectionHead"><span class="titlemark">8 </span> <a
819 id="x1-370008"></a>Bug reports and patches</h3>
820 <!--l. 450--><p class="noindent" >Please send bug reports and patches to the Enigma2 development mailing list
822 class="cmtt-9"><enigma2-devel@lists.elitedvb.net></span>.
823 <!--l. 452--><p class="noindent" >A comfortable way to create patches is to use <span
824 class="cmtt-9">git format-patch</span>, after all changes
825 have been committed to your local copy of the repository.