diff options
Diffstat (limited to 'documentation')
-rw-r--r-- | documentation/dev-manual/dev-manual-start.xml | 212 |
1 files changed, 113 insertions, 99 deletions
diff --git a/documentation/dev-manual/dev-manual-start.xml b/documentation/dev-manual/dev-manual-start.xml index d8726b4857..f72606553a 100644 --- a/documentation/dev-manual/dev-manual-start.xml +++ b/documentation/dev-manual/dev-manual-start.xml | |||
@@ -10,8 +10,10 @@ | |||
10 | This chapter provides procedures related to getting set up to use the | 10 | This chapter provides procedures related to getting set up to use the |
11 | Yocto Project. | 11 | Yocto Project. |
12 | You can learn about creating a team environment that develops using the | 12 | You can learn about creating a team environment that develops using the |
13 | Yocto Project, how to set up a build host, how to locate Yocto Project | 13 | Yocto Project, how to set up a |
14 | source repositories, and how to create local Git repositories. | 14 | <ulink url='&YOCTO_DOCS_REF_URL;#hardware-build-system-term'>build host</ulink>, |
15 | how to locate Yocto Project source repositories, and how to create local | ||
16 | Git repositories. | ||
15 | </para> | 17 | </para> |
16 | 18 | ||
17 | <section id="usingpoky-changes-collaborate"> | 19 | <section id="usingpoky-changes-collaborate"> |
@@ -19,69 +21,71 @@ | |||
19 | 21 | ||
20 | <para> | 22 | <para> |
21 | It might not be immediately clear how you can use the Yocto | 23 | It might not be immediately clear how you can use the Yocto |
22 | Project in a team development environment, or scale it for a large | 24 | Project in a team development environment, or how to scale it for a |
23 | team of developers. | 25 | large team of developers. |
24 | One of the strengths of the Yocto Project is that it is extremely | 26 | One of the strengths of the Yocto Project is that it is extremely |
25 | flexible. | 27 | flexible. |
26 | Thus, you can adapt it to many different use cases and scenarios. | 28 | Thus, you can adapt it to many different use cases and scenarios. |
27 | However, these characteristics can cause a struggle if you are trying | 29 | However, this flexibility could cause difficulties if you are trying |
28 | to create a working setup that scales across a large team. | 30 | to create a working setup that scales across a large team. |
29 | </para> | 31 | </para> |
30 | 32 | ||
31 | <para> | 33 | <para> |
32 | To help you understand how to set up this type of environment, | 34 | To help you understand how to set up this type of environment, |
33 | this section presents a procedure that gives you the information | 35 | this section presents a procedure that gives you information |
34 | to learn how to get the results you want. | 36 | that can help you get the results you want. |
35 | The procedure is high-level and presents some of the project's most | 37 | The procedure is high-level and presents some of the project's most |
36 | successful experiences, practices, solutions, and available | 38 | successful experiences, practices, solutions, and available |
37 | technologies that work well. | 39 | technologies that have proved to work well in the past. |
38 | Keep in mind, the procedure here is a starting point. | 40 | Keep in mind, the procedure here is a starting point. |
39 | You can build off it and customize it to fit any | 41 | You can build off these steps and customize the procedure to fit any |
40 | particular working environment and set of practices. | 42 | particular working environment and set of practices. |
41 | <orderedlist> | 43 | <orderedlist> |
42 | <listitem><para> | 44 | <listitem><para> |
43 | <emphasis>Determine Who is Going to be Developing:</emphasis> | 45 | <emphasis>Determine Who is Going to be Developing:</emphasis> |
44 | You need to understand who is going to be doing anything | 46 | You need to understand who is going to be doing anything |
45 | related to the Yocto Project and what their roles would be. | 47 | related to the Yocto Project and what their roles would be. |
46 | Making this determination is essential to completing the | 48 | Making this determination is essential to completing |
47 | steps two and three, which are to get your equipment together | 49 | steps two and three, which are to get your equipment together |
48 | and set up your development environment's hardware topology. | 50 | and set up your development environment's hardware topology. |
49 | </para> | 51 | </para> |
50 | 52 | ||
51 | <para>The following roles exist: | 53 | <para>The following roles exist: |
52 | <itemizedlist> | 54 | <itemizedlist> |
53 | <listitem><para> | 55 | <listitem><para> |
54 | <emphasis>Application Development:</emphasis> | 56 | <emphasis>Application Developer:</emphasis> |
55 | These types of developers do application level work | 57 | This type of developer does application level work |
56 | on top of an existing software stack. | 58 | on top of an existing software stack. |
57 | </para></listitem> | 59 | </para></listitem> |
58 | <listitem><para> | 60 | <listitem><para> |
59 | <emphasis>Core System Development:</emphasis> | 61 | <emphasis>Core System Developer:</emphasis> |
60 | These types of developers work on the contents of the | 62 | This type of developer works on the contents of the |
61 | operating system image itself. | 63 | operating system image itself. |
62 | </para></listitem> | 64 | </para></listitem> |
63 | <listitem><para> | 65 | <listitem><para> |
64 | <emphasis>Build Engineer:</emphasis> | 66 | <emphasis>Build Engineer:</emphasis> |
65 | This type of developer manages Autobuilders and | 67 | This type of developer manages Autobuilders and |
66 | releases. | 68 | releases. |
67 | Not all environments need a Build Engineer. | 69 | Not all environments need a Build Engineer. |
68 | </para></listitem> | 70 | </para></listitem> |
69 | <listitem><para> | 71 | <listitem><para> |
70 | <emphasis>Test Engineer:</emphasis> | 72 | <emphasis>Test Engineer:</emphasis> |
71 | This type of developer creates and manages automated | 73 | This type of developer creates and manages automated |
72 | tests needed to ensure all application and core | 74 | tests that are used to ensure all application and |
73 | system development meets desired quality standards. | 75 | core system development meets desired quality |
74 | </para></listitem> | 76 | standards. |
75 | </itemizedlist> | 77 | </para></listitem> |
78 | </itemizedlist> | ||
76 | </para></listitem> | 79 | </para></listitem> |
77 | <listitem><para> | 80 | <listitem><para> |
78 | <emphasis>Gather the Hardware:</emphasis> | 81 | <emphasis>Gather the Hardware:</emphasis> |
79 | Based on the size and make-up of the team, get the hardware | 82 | Based on the size and make-up of the team, get the hardware |
80 | together. | 83 | together. |
81 | Any development, build, or test engineer should be using | 84 | Ideally, any development, build, or test engineer uses |
82 | a system that is running a supported Linux distribution. | 85 | a system that runs a supported Linux distribution. |
83 | Systems, in general, should be high performance (e.g. dual, | 86 | These systems, in general, should be high performance |
84 | six-core Xeons with 24 Gbytes of RAM and plenty of disk space). | 87 | (e.g. dual, six-core Xeons with 24 Gbytes of RAM and plenty |
88 | of disk space). | ||
85 | You can help ensure efficiency by having any machines used | 89 | You can help ensure efficiency by having any machines used |
86 | for testing or that run Autobuilders be as high performance | 90 | for testing or that run Autobuilders be as high performance |
87 | as possible. | 91 | as possible. |
@@ -107,11 +111,12 @@ | |||
107 | <emphasis>Use Git as Your Source Control Manager (SCM):</emphasis> | 111 | <emphasis>Use Git as Your Source Control Manager (SCM):</emphasis> |
108 | Keeping your | 112 | Keeping your |
109 | <ulink url='&YOCTO_DOCS_REF_URL;#metadata'>Metadata</ulink> | 113 | <ulink url='&YOCTO_DOCS_REF_URL;#metadata'>Metadata</ulink> |
110 | and any software you are developing under the | 114 | (i.e. recipes, configuration files, classes, and so forth) |
111 | control of an SCM system that is compatible | 115 | and any software you are developing under the control of an SCM |
112 | with the OpenEmbedded build system is advisable. | 116 | system that is compatible with the OpenEmbedded build system |
113 | Of the SCMs BitBake supports, the | 117 | is advisable. |
114 | Yocto Project team strongly recommends using | 118 | Of the SCMs BitBake supports, the Yocto Project team strongly |
119 | recommends using | ||
115 | <ulink url='&YOCTO_DOCS_OM_URL;#git'>Git</ulink>. | 120 | <ulink url='&YOCTO_DOCS_OM_URL;#git'>Git</ulink>. |
116 | Git is a distributed system that is easy to backup, | 121 | Git is a distributed system that is easy to backup, |
117 | allows you to work remotely, and then connects back to the | 122 | allows you to work remotely, and then connects back to the |
@@ -129,20 +134,19 @@ | |||
129 | being used to generate the web interface that lets you view the | 134 | being used to generate the web interface that lets you view the |
130 | repositories. | 135 | repositories. |
131 | The <filename>gitolite</filename> software identifies users | 136 | The <filename>gitolite</filename> software identifies users |
132 | using SSH keys and allows branch-based | 137 | using SSH keys and allows branch-based access controls to |
133 | access controls to repositories that you can control as little | 138 | repositories that you can control as little or as much as |
134 | or as much as necessary. | 139 | necessary. |
135 | |||
136 | <note> | 140 | <note> |
137 | The setup of these services is beyond the scope of this | 141 | The setup of these services is beyond the scope of this |
138 | manual. | 142 | manual. |
139 | However, sites such as these exist that describe how to | 143 | However, sites such as the following exist that describe |
140 | perform setup: | 144 | how to perform setup: |
141 | <itemizedlist> | 145 | <itemizedlist> |
142 | <listitem><para> | 146 | <listitem><para> |
143 | <ulink url='http://git-scm.com/book/ch4-8.html'>Git documentation</ulink>: | 147 | <ulink url='http://git-scm.com/book/ch4-8.html'>Git documentation</ulink>: |
144 | Describes how to install <filename>gitolite</filename> | 148 | Describes how to install |
145 | on the server. | 149 | <filename>gitolite</filename> on the server. |
146 | </para></listitem> | 150 | </para></listitem> |
147 | <listitem><para> | 151 | <listitem><para> |
148 | <ulink url='http://gitolite.com'>Gitolite</ulink>: | 152 | <ulink url='http://gitolite.com'>Gitolite</ulink>: |
@@ -150,8 +154,8 @@ | |||
150 | </para></listitem> | 154 | </para></listitem> |
151 | <listitem><para> | 155 | <listitem><para> |
152 | <ulink url='https://git.wiki.kernel.org/index.php/Interfaces,_frontends,_and_tools'>Interfaces, frontends, and tools</ulink>: | 156 | <ulink url='https://git.wiki.kernel.org/index.php/Interfaces,_frontends,_and_tools'>Interfaces, frontends, and tools</ulink>: |
153 | Documentation on how to create interfaces and frontends | 157 | Documentation on how to create interfaces and |
154 | for Git. | 158 | frontends for Git. |
155 | </para></listitem> | 159 | </para></listitem> |
156 | </itemizedlist> | 160 | </itemizedlist> |
157 | </note> | 161 | </note> |
@@ -161,23 +165,22 @@ | |||
161 | As mentioned earlier, application developers are creating | 165 | As mentioned earlier, application developers are creating |
162 | applications on top of existing software stacks. | 166 | applications on top of existing software stacks. |
163 | Following are some best practices for setting up machines | 167 | Following are some best practices for setting up machines |
164 | that do application development: | 168 | used for application development: |
165 | <itemizedlist> | 169 | <itemizedlist> |
166 | <listitem><para> | 170 | <listitem><para> |
167 | Use a pre-built toolchain that | 171 | Use a pre-built toolchain that contains the software |
168 | contains the software stack itself. | 172 | stack itself. |
169 | Then, develop the application code on top of the | 173 | Then, develop the application code on top of the |
170 | stack. | 174 | stack. |
171 | This method works well for small numbers of relatively | 175 | This method works well for small numbers of relatively |
172 | isolated applications. | 176 | isolated applications. |
173 | </para></listitem> | 177 | </para></listitem> |
174 | <listitem><para> | 178 | <listitem><para> |
175 | When possible, use the Yocto Project | 179 | When possible, use the Yocto Project plug-in for the |
176 | plug-in for the | ||
177 | <trademark class='trade'>Eclipse</trademark> IDE | 180 | <trademark class='trade'>Eclipse</trademark> IDE |
178 | and SDK development practices. | 181 | and SDK development practices. |
179 | For more information, see the | 182 | For more information, see the |
180 | "<ulink url='&YOCTO_DOCS_SDK_URL;'>Yocto Project Application Development and the Extensible Software Development Kit (eSDK)</ulink>" | 183 | <ulink url='&YOCTO_DOCS_SDK_URL;'>Yocto Project Application Development and the Extensible Software Development Kit (eSDK)</ulink> |
181 | manual. | 184 | manual. |
182 | </para></listitem> | 185 | </para></listitem> |
183 | <listitem><para> | 186 | <listitem><para> |
@@ -186,27 +189,29 @@ | |||
186 | toolchain downloads or as updates through a package | 189 | toolchain downloads or as updates through a package |
187 | update mechanism using <filename>opkg</filename> | 190 | update mechanism using <filename>opkg</filename> |
188 | to provide updates to an existing toolchain. | 191 | to provide updates to an existing toolchain. |
189 | The exact mechanics of how and when to do this are a | 192 | The exact mechanics of how and when to do this depend |
190 | question for local policy. | 193 | on local policy. |
191 | </para></listitem> | 194 | </para></listitem> |
192 | <listitem><para> | 195 | <listitem><para> |
193 | Use multiple toolchains installed locally | 196 | Use multiple toolchains installed locally into |
194 | into different locations to allow development across | 197 | different locations to allow development across |
195 | versions. | 198 | versions. |
196 | </para></listitem> | 199 | </para></listitem> |
197 | </itemizedlist> | 200 | </itemizedlist> |
198 | </para></listitem> | 201 | </para></listitem> |
199 | <listitem><para> | 202 | <listitem><para> |
200 | <emphasis>Set up the Core Development Machines:</emphasis> | 203 | <emphasis>Set up the Core Development Machines:</emphasis> |
201 | As mentioned earlier, these types of developers work on the | 204 | As mentioned earlier, core developers work on the contents of |
202 | contents of the operating system itself. | 205 | the operating system itself. |
203 | Following are some best practices for setting up machines | 206 | Following are some best practices for setting up machines |
204 | used for developing images: | 207 | used for developing images: |
205 | <itemizedlist> | 208 | <itemizedlist> |
206 | <listitem><para> | 209 | <listitem><para> |
207 | Have the Yocto Project build system itself available on | 210 | Have the |
208 | the developer workstations so developers can run their own | 211 | <ulink url='&YOCTO_DOCS_REF_URL;#build-system-term'>OpenEmbedded build system</ulink> |
209 | builds and directly rebuild the software stack. | 212 | available on the developer workstations so developers |
213 | can run their own builds and directly rebuild the | ||
214 | software stack. | ||
210 | </para></listitem> | 215 | </para></listitem> |
211 | <listitem><para> | 216 | <listitem><para> |
212 | Keep the core system unchanged as much as | 217 | Keep the core system unchanged as much as |
@@ -228,8 +233,9 @@ | |||
228 | Autobuilders are often the core of the development | 233 | Autobuilders are often the core of the development |
229 | environment. | 234 | environment. |
230 | It is here that changes from individual developers are brought | 235 | It is here that changes from individual developers are brought |
231 | together and centrally tested and subsequent decisions about | 236 | together and centrally tested. |
232 | releases can be made. | 237 | Based on this automated build and test environment, subsequent |
238 | decisions about releases can be made. | ||
233 | Autobuilders also allow for "continuous integration" style | 239 | Autobuilders also allow for "continuous integration" style |
234 | testing of software components and regression identification | 240 | testing of software components and regression identification |
235 | and tracking.</para> | 241 | and tracking.</para> |
@@ -239,22 +245,23 @@ | |||
239 | The Yocto Project team has found this implementation | 245 | The Yocto Project team has found this implementation |
240 | works well in this role. | 246 | works well in this role. |
241 | A public example of this is the Yocto Project | 247 | A public example of this is the Yocto Project |
242 | Autobuilders, which we use to test the overall health of the | 248 | Autobuilders, which the Yocto Project team uses to test the |
243 | project.</para> | 249 | overall health of the project.</para> |
244 | 250 | ||
245 | <para>The features of this system are: | 251 | <para>The features of this system are: |
246 | <itemizedlist> | 252 | <itemizedlist> |
247 | <listitem><para> | 253 | <listitem><para> |
248 | Highlights when commits break the build. | 254 | Highlights when commits break the build. |
249 | </para></listitem> | 255 | </para></listitem> |
250 | <listitem><para> | 256 | <listitem><para> |
251 | Populates an sstate cache from which | 257 | Populates an |
252 | developers can pull rather than requiring local | 258 | <ulink url='&YOCTO_DOCS_OM_URL;#shared-state-cache'>sstate cache</ulink> |
253 | builds. | 259 | from which developers can pull rather than requiring |
260 | local builds. | ||
254 | </para></listitem> | 261 | </para></listitem> |
255 | <listitem><para> | 262 | <listitem><para> |
256 | Allows commit hook triggers, | 263 | Allows commit hook triggers, which trigger builds when |
257 | which trigger builds when commits are made. | 264 | commits are made. |
258 | </para></listitem> | 265 | </para></listitem> |
259 | <listitem><para> | 266 | <listitem><para> |
260 | Allows triggering of automated image booting | 267 | Allows triggering of automated image booting |
@@ -275,19 +282,19 @@ | |||
275 | Allows scheduling of builds so that resources | 282 | Allows scheduling of builds so that resources |
276 | can be used efficiently. | 283 | can be used efficiently. |
277 | </para></listitem> | 284 | </para></listitem> |
278 | </itemizedlist> | 285 | </itemizedlist> |
279 | </para></listitem> | 286 | </para></listitem> |
280 | <listitem><para> | 287 | <listitem><para> |
281 | <emphasis>Set up Test Machines:</emphasis> | 288 | <emphasis>Set up Test Machines:</emphasis> |
282 | Use a small number of shared, high performance systems | 289 | Use a small number of shared, high performance systems |
283 | for testing purposes. | 290 | for testing purposes. |
284 | Developers can use these systems for wider, more | 291 | Developers can use these systems for wider, more |
285 | extensive testing while they continue to develop | 292 | extensive testing while they continue to develop |
286 | locally using their primary development system. | 293 | locally using their primary development system. |
287 | </para></listitem> | 294 | </para></listitem> |
288 | <listitem><para> | 295 | <listitem><para> |
289 | <emphasis>Document Policies and Change Flow:</emphasis> | 296 | <emphasis>Document Policies and Change Flow:</emphasis> |
290 | The Yocto Project itself uses a hierarchical structure and a | 297 | The Yocto Project uses a hierarchical structure and a |
291 | pull model. | 298 | pull model. |
292 | Scripts exist to create and send pull requests | 299 | Scripts exist to create and send pull requests |
293 | (i.e. <filename>create-pull-request</filename> and | 300 | (i.e. <filename>create-pull-request</filename> and |
@@ -330,16 +337,20 @@ | |||
330 | <listitem><para> | 337 | <listitem><para> |
331 | Maintain your Metadata in layers that make sense | 338 | Maintain your Metadata in layers that make sense |
332 | for your situation. | 339 | for your situation. |
333 | See the "<link linkend='understanding-and-creating-layers'>Understanding | 340 | See the |
334 | and Creating Layers</link>" section for more information on | 341 | "<ulink url='&YOCTO_DOCS_OM_URL;#the-yocto-project-layer-model'>The Yocto Project Layer Model</ulink>" |
335 | layers. | 342 | section in the Yocto Project Overview and Concepts |
343 | Manual and the | ||
344 | "<link linkend='understanding-and-creating-layers'>Understanding and Creating Layers</link>" | ||
345 | section for more information on layers. | ||
336 | </para></listitem> | 346 | </para></listitem> |
337 | <listitem><para> | 347 | <listitem><para> |
338 | Separate the project's Metadata and code by using | 348 | Separate the project's Metadata and code by using |
339 | separate Git repositories. | 349 | separate Git repositories. |
340 | See the | 350 | See the |
341 | "<ulink url='&YOCTO_DOCS_OM_URL;#yocto-project-repositories'>Yocto Project Source Repositories</ulink>" | 351 | "<ulink url='&YOCTO_DOCS_OM_URL;#yocto-project-repositories'>Yocto Project Source Repositories</ulink>" |
342 | section for information on these repositories. | 352 | section in the Yocto Project Overview and Concepts |
353 | Manual for information on these repositories. | ||
343 | See the | 354 | See the |
344 | "<link linkend='locating-yocto-project-source-files'>Locating Yocto Project Source Files</link>" | 355 | "<link linkend='locating-yocto-project-source-files'>Locating Yocto Project Source Files</link>" |
345 | section for information on how to set up local Git | 356 | section for information on how to set up local Git |
@@ -360,7 +371,8 @@ | |||
360 | </para></listitem> | 371 | </para></listitem> |
361 | <listitem><para> | 372 | <listitem><para> |
362 | The Yocto Project community encourages you | 373 | The Yocto Project community encourages you |
363 | to send patches to the project to fix bugs or add features. | 374 | to send patches to the project to fix bugs or add |
375 | features. | ||
364 | If you do submit patches, follow the project commit | 376 | If you do submit patches, follow the project commit |
365 | guidelines for writing good commit messages. | 377 | guidelines for writing good commit messages. |
366 | See the "<link linkend='how-to-submit-a-change'>Submitting a Change to the Yocto Project</link>" | 378 | See the "<link linkend='how-to-submit-a-change'>Submitting a Change to the Yocto Project</link>" |
@@ -369,10 +381,12 @@ | |||
369 | <listitem><para> | 381 | <listitem><para> |
370 | Send changes to the core sooner than later | 382 | Send changes to the core sooner than later |
371 | as others are likely to run into the same issues. | 383 | as others are likely to run into the same issues. |
372 | For some guidance on mailing lists to use, see the list in the | 384 | For some guidance on mailing lists to use, see the list |
385 | in the | ||
373 | "<link linkend='how-to-submit-a-change'>Submitting a Change to the Yocto Project</link>" | 386 | "<link linkend='how-to-submit-a-change'>Submitting a Change to the Yocto Project</link>" |
374 | section. | 387 | section. |
375 | For a description of the available mailing lists, see the | 388 | For a description of the available mailing lists, see |
389 | the | ||
376 | "<ulink url='&YOCTO_DOCS_REF_URL;#resources-mailinglist'>Mailing Lists</ulink>" | 390 | "<ulink url='&YOCTO_DOCS_REF_URL;#resources-mailinglist'>Mailing Lists</ulink>" |
377 | section in the Yocto Project Reference Manual. | 391 | section in the Yocto Project Reference Manual. |
378 | </para></listitem> | 392 | </para></listitem> |