diff options
author | Scott Rifenbark <scott.m.rifenbark@intel.com> | 2011-08-17 14:38:22 -0700 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2011-08-23 18:46:37 -0700 |
commit | 96f0c57a0af655b9ff1a48835a7ab2001dbb4d1e (patch) | |
tree | a5c9dcf8a846e99f5894e76f95c6c286cbbdb59a | |
parent | 34de4996855932cd7f6af53dc7b4453782e1b764 (diff) | |
download | poky-96f0c57a0af655b9ff1a48835a7ab2001dbb4d1e.tar.gz |
documentation/poky-ref-manual/development.xml: re-write of software dev section
This is a comprehensive pass through this entire section that incorporates
understanding given to me by Scott Garman. I have added more detail and
text that helps the non-developer understand what is fundamentally going
on.
(From yocto-docs rev: 124c722ccf0316f6e62790ca77c88d0444559378)
Signed-off-by: Scott Rifenbark <scott.m.rifenbark@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r-- | documentation/poky-ref-manual/development.xml | 658 |
1 files changed, 185 insertions, 473 deletions
diff --git a/documentation/poky-ref-manual/development.xml b/documentation/poky-ref-manual/development.xml index e9e00fa3cc..83531bc1dc 100644 --- a/documentation/poky-ref-manual/development.xml +++ b/documentation/poky-ref-manual/development.xml | |||
@@ -15,40 +15,56 @@ | |||
15 | </para> | 15 | </para> |
16 | 16 | ||
17 | <section id="platdev-appdev-external-sdk"> | 17 | <section id="platdev-appdev-external-sdk"> |
18 | <title>External Development Using the Application Development Toolkit (ADT)</title> | 18 | <title>External Development Using the Meta-Toolchain</title> |
19 | <para> | 19 | <para> |
20 | The meta-toolchain and meta-toolchain-sdk targets build tarballs that contain toolchains and | 20 | The Yocto Project provides toolchains that allow you to develop your application |
21 | libraries suitable for application development outside of Poky. | 21 | outside of the Yocto Project build system for specific hardware. |
22 | For information on these targets see the <ulink linkend='ref-images'>Reference: Images</ulink> | 22 | These toolchains (called meta-toolchains) contain cross-development tools like compilers, |
23 | appendix. | 23 | linkers, and debuggers that build your application for your target. |
24 | </para> | 24 | The Yocto Project also provides images that have toolchains set up for supported |
25 | <para> | 25 | architectures. |
26 | These tarballs unpack into the | 26 | See |
27 | <filename class="directory">/opt/poky</filename> directory and contain | 27 | <xref linkend='ref-images'>Reference: Images</xref> for a listing of the image |
28 | a setup script (e.g. | 28 | types that Yocto Project supports. |
29 | <filename>/opt/poky/environment-setup-i586-poky-linux</filename>), from which | 29 | </para> |
30 | you can source to initialize a suitable environment. Sourcing these files adds the | 30 | <para> |
31 | compiler, QEMU scripts, QEMU binary, a special version of pkgconfig and other | 31 | Using the BitBake tool you can build a meta-toolchain or meta-toolchain-sdk target, |
32 | useful utilities to the PATH variable. Variables to assist pkgconfig and | 32 | which is in the form of a tarball. |
33 | autotools are also defined so that, for example, configure can find pre-generated test | 33 | Unpacking this tarball into the <filename class="directory">/opt/poky</filename> directory |
34 | results for tests that need target hardware on which to run. | 34 | on your host produces a setup script |
35 | </para> | 35 | (e.g. <filename>/opt/poky/environment-setup-i586-poky-linux</filename>) that |
36 | <para> | 36 | you can source to initialize your build environment. |
37 | Using the toolchain with autotool-enabled packages is straightforward - just pass the | 37 | Sourcing this script adds the compiler, QEMU scripts, QEMU binary, a special version of |
38 | appropriate host option to configure. | 38 | <filename>pkgconfig</filename> and other |
39 | useful utilities to the <filename>PATH</filename> variable used by the Yocto Project | ||
40 | build environment. | ||
41 | Variables to assist <filename>pkgconfig</filename> and | ||
42 | Autotools are also defined so that, for example, <filename>configure</filename> | ||
43 | can find pre-generated test results for tests that need target hardware on which to run. | ||
44 | </para> | ||
45 | <para> | ||
46 | Using the toolchain with Autotool-enabled packages is straightforward - just pass the | ||
47 | appropriate <filename>host</filename> option to <filename>configure</filename>. | ||
39 | Following is an example: | 48 | Following is an example: |
40 | <literallayout class='monospaced'> | 49 | <literallayout class='monospaced'> |
41 | $ ./configure --host=arm-poky-linux-gnueabi | 50 | $ ./configure --host=arm-poky-linux-gnueabi |
42 | </literallayout> | 51 | </literallayout> |
43 | For other projects it is usually a case of ensuring the cross tools are used: | 52 | For projects that are not Autotool-enabled, it is usually just a case of ensuring |
53 | you point to and use the cross-toolchain. | ||
54 | For example, the following two lines of code in a <filename>Makefile</filename> | ||
55 | that builds your application | ||
56 | specify to use the cross-compiler <filename>arm-poky-linux-gnueabi-gcc</filename> | ||
57 | and linker <filename>arm-poky-linux-gnueabi-ld</filename>, which are part of the | ||
58 | meta-toolchain you have previously established: | ||
44 | <literallayout class='monospaced'> | 59 | <literallayout class='monospaced'> |
45 | CC=arm-poky-linux-gnueabi-gcc and LD=arm-poky-linux-gnueabi-ld | 60 | CC=arm-poky-linux-gnueabi-gcc; |
61 | LD=arm-poky-linux-gnueabi-ld; | ||
46 | </literallayout> | 62 | </literallayout> |
47 | </para> | 63 | </para> |
48 | </section> | 64 | </section> |
49 | 65 | ||
50 | <section id="using-the-eclipse-and-anjuta-plug-ins"> | 66 | <section id="using-the-eclipse-and-anjuta-plug-ins"> |
51 | <title>Using the Eclipse Plug-in</title> | 67 | <title>External Development Using the Eclipse Plug-in</title> |
52 | <para> | 68 | <para> |
53 | The current release of the Yocto Project supports the Eclipse IDE plug-in | 69 | The current release of the Yocto Project supports the Eclipse IDE plug-in |
54 | to make developing software easier for the application developer. | 70 | to make developing software easier for the application developer. |
@@ -79,420 +95,74 @@ | |||
79 | <ulink url='http://www.yoctoproject.org/docs/adt-manual/adt-manual.html'> | 95 | <ulink url='http://www.yoctoproject.org/docs/adt-manual/adt-manual.html'> |
80 | "Application Development Toolkit (ADT) User's Guide."</ulink> | 96 | "Application Development Toolkit (ADT) User's Guide."</ulink> |
81 | </para> | 97 | </para> |
82 | 98 | </section> | |
83 | |||
84 | |||
85 | <!-- | ||
86 | |||
87 | <section id="the-eclipse-plug-in"> | ||
88 | <title>The Eclipse Plug-in</title> | ||
89 | <para> | ||
90 | To use the Eclipse plug-in, a toolchain and SDK built by Poky is required along with | ||
91 | the Eclipse Framework (Helios 3.6.1). | ||
92 | To install the plug-in you need to be in the Eclipse IDE and select | ||
93 | the following menu: | ||
94 | <literallayout class='monospaced'> | ||
95 | Help -> Install New Software | ||
96 | </literallayout> | ||
97 | Specify the target URL as | ||
98 | <ulink url='http://www.yoctoproject.org/downloads/eclipse-plugin/'></ulink>. | ||
99 | </para> | ||
100 | <para> | ||
101 | If you want to download the source code for the plug-in you can find it in the Poky | ||
102 | git repository, which has a web interface, and is located at | ||
103 | <ulink url="http://git.yoctoproject.org"></ulink> under IDE Plugins. | ||
104 | </para> | ||
105 | |||
106 | <section id="installing-and-setting-up-the-eclipse-ide"> | ||
107 | <title>Installing and Setting up the Eclipse IDE</title> | ||
108 | <para> | ||
109 | If you don't have the Eclipse IDE (Helios 3.6.1) on your system you need to | ||
110 | download and install it from <ulink url="http://www.eclipse.org/downloads"></ulink>. | ||
111 | Choose the Eclipse Classic, which contains the Eclipse Platform, Java Development | ||
112 | Tools (JDT), and the Plug-in Development Environment. | ||
113 | </para> | ||
114 | <note> | ||
115 | <para> | ||
116 | Due to the Java Virtual Machine's garbage collection (GC) process the | ||
117 | permanent generation space (PermGen) is not cleaned up. This space stores | ||
118 | meta-data descriptions of classes. The default value is set too small | ||
119 | and it could trigger an out-of-memory error like the following: | ||
120 | <literallayout class='monospaced'> | ||
121 | Java.lang.OutOfMemoryError: PermGen space | ||
122 | </literallayout> | ||
123 | This error causes the applications to hang. | ||
124 | </para> | ||
125 | </note> | ||
126 | <para> | ||
127 | To fix this issue you can use the <filename>-vmargs</filename> | ||
128 | option when you start Eclipse to increase the size of the permanent generation space: | ||
129 | <literallayout class='monospaced'> | ||
130 | Eclipse -vmargs -XX:PermSize=256M | ||
131 | </literallayout> | ||
132 | </para> | ||
133 | </section> | ||
134 | |||
135 | <section id="installing-the-yocto-plug-in"> | ||
136 | <title>Installing the Yocto Plug-in</title> | ||
137 | <para> | ||
138 | Once you have the Eclipse IDE installed and configured you need to install the | ||
139 | Yocto plug-in. You do this similar to installing the Eclipse plug-ins in the | ||
140 | previous section. | ||
141 | </para> | ||
142 | <para> | ||
143 | Do the following to install the Yocto plug-in into the Eclipse IDE: | ||
144 | <orderedlist> | ||
145 | <listitem><para>Select the "Help -> Install New Software" item.</para></listitem> | ||
146 | <listitem><para>In the "Work with:" area click "Add..." and enter the URL for | ||
147 | the Yocto plug-in, which is | ||
148 | <ulink url='http://www.yoctoproject.org/downloads/eclipse-plugin/'></ulink></para></listitem> | ||
149 | <listitem><para>Finish out the installation of the update similar to any other | ||
150 | Eclipse plug-in.</para></listitem> | ||
151 | </orderedlist> | ||
152 | </para> | ||
153 | </section> | ||
154 | |||
155 | <section id="configuring-yocto-eclipse-plug-in"> | ||
156 | <title>Configuring Yocto Eclipse plug-in</title> | ||
157 | <para> | ||
158 | To configure the Yocto Eclipse plug-in you need to select the mode and the | ||
159 | architecture with which you will be working. Start by selecting "Preferences" | ||
160 | from the "Window" menu and then select "Yocto SDK". | ||
161 | </para> | ||
162 | <para> | ||
163 | If you normally will use an installed Yocto | ||
164 | SDK (under <filename>/opt/poky</filename>) select “SDK Root Mode”. Otherwise, if your crosstool chain | ||
165 | and sysroot are within your poky tree, select “Poky Tree Mode”. | ||
166 | If you are in SDK Root Mode you need to provide your poky tree path, for | ||
167 | example, <filename>$<Poky_tree>/build/</filename>. | ||
168 | </para> | ||
169 | <para> | ||
170 | Next, you need to select the architecture. | ||
171 | Use the drop down list and select the architecture that you’ll be primarily | ||
172 | working against. | ||
173 | For target option, select your typical target QEMU vs External hardware. If you | ||
174 | choose QEMU, you’ll need to specify your QEMU kernel file with full path and the | ||
175 | rootfs mount point. Yocto QEMU boots off user mode NFS. | ||
176 | See the <link linkend='platdev-appdev-qemu'>Developing Externally in QEMU</link> section for | ||
177 | how to set it up. | ||
178 | </para> | ||
179 | <para> | ||
180 | To make your settings the defaults for every new Yocto project created using | ||
181 | the Eclipse IDE, simply save the settings. | ||
182 | </para> | ||
183 | </section> | ||
184 | |||
185 | <section id="using-the-yocto-eclipse-plug-in"> | ||
186 | <title>Using the Yocto Eclipse Plug-in</title> | ||
187 | <para> | ||
188 | As an example, this section shows you how to cross-compile a Yocto C project that | ||
189 | is autotools-based, deploy the project into QEMU, and then run the debugger against it. | ||
190 | You need to configure the project, trigger the <filename> autogen.sh</filename>, build | ||
191 | the image, start QEMU, and then debug. | ||
192 | </para> | ||
193 | <para> | ||
194 | The following steps show how to create a Yocto autotools-based project using a given template: | ||
195 | </para> | ||
196 | <orderedlist> | ||
197 | <listitem><para>Select "File -> New -> Project" to start the wizard.</para></listitem> | ||
198 | <listitem><para>Expand "C/C++" and select "C Project".</para></listitem> | ||
199 | <listitem><para>Click "Next" and select a template (e.g. "Hello World ANSI C Project").</para></listitem> | ||
200 | <listitem><para>Complete the steps to create the new Yocto autotools-based project using | ||
201 | your chosen template.</para></listitem> | ||
202 | </orderedlist> | ||
203 | <para> | ||
204 | By default, the project uses the Yocto preferences settings as defined using the procedure in | ||
205 | <link linkend="configuring-yocto-eclipse-plug-in">the previous section</link>. | ||
206 | If there are any specific setup requirements for the newly created project | ||
207 | you need to reconfigure the Yocto plug-in through the menu selection by doing the following: | ||
208 | </para> | ||
209 | <orderedlist> | ||
210 | <listitem><para>Select the "Project -> Invoke Yocto Tools -> Reconfigure Yocto" menu item.</para></listitem> | ||
211 | <listitem><para>Complete the dialogue to specify the specific toolchain and QEMU setup information.</para></listitem> | ||
212 | </orderedlist> | ||
213 | <para> | ||
214 | To build the project follow these steps: | ||
215 | </para> | ||
216 | <orderedlist> | ||
217 | <listitem><para>Select "Project -> Reconfigure Project" to trigger the | ||
218 | <filename>autogen.sh</filename> command.</para></listitem> | ||
219 | <listitem><para>Select "Project -> Build" to build the project.</para></listitem> | ||
220 | </orderedlist> | ||
221 | <para> | ||
222 | To start QEMU follow these steps: | ||
223 | </para> | ||
224 | <orderedlist> | ||
225 | <listitem><para>Select "Run -> External Tools" and see if there is | ||
226 | a QEMU instance for the desired target. | ||
227 | If one exists, click on the instance to start QEMU. | ||
228 | If your target does not exist, click "External Tools Configuration" and | ||
229 | you should find an instance of QEMU for your architecture | ||
230 | under the entry under "Program".</para></listitem> | ||
231 | <listitem><para>Wait for the boot to complete.</para></listitem> | ||
232 | </orderedlist> | ||
233 | <para> | ||
234 | To deploy your project and start debugging follow these steps: | ||
235 | </para> | ||
236 | <orderedlist> | ||
237 | <listitem><para>Highlight your project in the project explorer.</para></listitem> | ||
238 | <listitem><para>Select "Run -> Debug Configurations" to bring up your remote debugging configuration | ||
239 | in the right-hand window.</para></listitem> | ||
240 | <listitem><para>Expand “C/C++ Remote Application”.</para></listitem> | ||
241 | <listitem><para>Select "projectname_ gdb_target-poky-linux". | ||
242 | You need to be sure there is an entry for the remote target. | ||
243 | If no entry exists, click "New..." to bring up the wizard. | ||
244 | Use the wizard to select TCF and enter the IP address of you remote target in the | ||
245 | “Host name:” field. | ||
246 | Back in the Remote Debug Configure window, specify in the | ||
247 | “Remote Absolute File Path for C/C++ Application” field the absolute path for the program on | ||
248 | the remote target. | ||
249 | By default, the program deploys into the remote target. | ||
250 | If you don't want this behavior then check “Skip download to target path”.</para></listitem> | ||
251 | <listitem><para>Click "Debug” to start the remote debugging session.</para></listitem> | ||
252 | </orderedlist> | ||
253 | </section> | ||
254 | |||
255 | <section id="using-yocto-eclipse-plug-in-remote-tools-suite"> | ||
256 | <title>Using Yocto Eclipse plug-in Remote Tools Suite</title> | ||
257 | <para> | ||
258 | Remote tools allow you to perform system profiling, kernel tracing, | ||
259 | examine power consumption, and so forth. To see and access the remote tools use the | ||
260 | "Window -> YoctoTools" menu. | ||
261 | </para> | ||
262 | <para> | ||
263 | Once you pick a tool you need to configure it for the remote target. Every tool | ||
264 | needs to have the connection configured. You must select an existing TCF-based | ||
265 | RSE connection to the remote target. If one does not exist, click "New" to create one. | ||
266 | </para> | ||
267 | <para> | ||
268 | Here are some specifics about the remote tools: | ||
269 | <itemizedlist> | ||
270 | <listitem><para>OProfile: Selecting this tool causes the oprofile-server on the remote | ||
271 | target to launch on the local host machine. The oprofile-viewer | ||
272 | must be installed on the local host machine and the oprofile-server must be | ||
273 | installed on the remote target, respectively, in order to use .</para></listitem> | ||
274 | <listitem><para>lttng: Selecting this tool runs "usttrace" on the remote target, transfers | ||
275 | the output data back to the local host machine and uses "lttv-gui" to graphically | ||
276 | display the output. The "lttv-gui" must be installed on the | ||
277 | local host machine to use this tool. | ||
278 | For information on how to use "lttng" to trace an | ||
279 | application, see <ulink url="http://lttng.org/files/ust/manual/ust.html"></ulink>. | ||
280 | <para> | ||
281 | For "Application" you must supply the absolute path name of the application to | ||
282 | be traced by user mode lttng. For example, typing <filename>/path/to/foo" | ||
283 | </filename> triggers "usttrace /path/to/foo" on the | ||
284 | remote target to trace the program <filename>/path/to/foo</filename>. | ||
285 | </para> | ||
286 | <para> | ||
287 | "Argument" is passed to "usttrace" running on the remote target. | ||
288 | </para></para> | ||
289 | </listitem> | ||
290 | <listitem><para>powertop: Selecting this tool runs "powertop" on the | ||
291 | remote target machine and displays the results in a new view called "powertop". | ||
292 | <para> | ||
293 | "Time to gather data(sec):" is the time passed in seconds before data is | ||
294 | gathered from the remote target for analysis. | ||
295 | </para> | ||
296 | <para> | ||
297 | "show pids in wakeups list:" corresponds to the <filename>-p</filename> | ||
298 | argument passed to "powertop". | ||
299 | </para></para> | ||
300 | </listitem> | ||
301 | <listitem><para>latencytop and perf: "latencytop" identifies | ||
302 | system latency, while "perf" monitors the system's performance | ||
303 | counter registers. Selecting either of these tools causes an RSE | ||
304 | terminal view to appear from which you can run the tools. Both tools refresh the | ||
305 | entire screen to display results while they run.</para></listitem> | ||
306 | </itemizedlist> | ||
307 | </para> | ||
308 | </section> | ||
309 | </section> | ||
310 | |||
311 | <section id="the-anjuta-plug-in"> | ||
312 | <title>The Anjuta Plug-in</title> | ||
313 | <note> | ||
314 | <para> | ||
315 | Support for the Anjuta plug-in ends after Yocto project 0.9 Release. | ||
316 | However, the source code can be downloaded from the git repository listed later in | ||
317 | this section. | ||
318 | The community is free to continue supporting it post 0.9 Release. | ||
319 | </para> | ||
320 | </note> | ||
321 | <para> | ||
322 | An Anjuta IDE plug-in exists to make developing software within the Poky framework | ||
323 | easier for the application developer familiar with that environment. | ||
324 | The plug-in presents a graphical IDE that allows you to cross-compile, cross-debug, | ||
325 | profile, deploy, and execute an application. | ||
326 | </para> | ||
327 | <para> | ||
328 | To use the plug-in, a toolchain and SDK built by Poky, Anjuta, its development headers and the Anjuta | ||
329 | Plug-in are all required. | ||
330 | The Poky Anjuta Plug-in is available to download as a tarball at the OpenedHand | ||
331 | labs <ulink url="http://labs.o-hand.com/anjuta-poky-sdk-plugin/"></ulink> page or | ||
332 | directly from the Poky Git repository located at git://git.yoctoproject.org/anjuta-poky. | ||
333 | You can access the source code from a web interface to the repository at | ||
334 | <ulink url="http://git.yoctoproject.org/"></ulink> under IDE Plugins. | ||
335 | </para> | ||
336 | <para> | ||
337 | See the README file contained in the project for more information on | ||
338 | Anjuta dependencies and building the plug-in. | ||
339 | If you want to disable remote gdb debugging, pass the "‐‐disable-gdb-integration" switch when | ||
340 | you configure the plug-in. | ||
341 | </para> | ||
342 | <section id="setting-up-the-anjuta-plugin"> | ||
343 | <title>Setting Up the Anjuta Plug-in</title> | ||
344 | <para> | ||
345 | Follow these steps to set up the plug-in: | ||
346 | <orderedlist> | ||
347 | <listitem><para>Extract the tarball for the toolchain into / as root. | ||
348 | The toolchain will be installed into <filename>/opt/poky</filename>.</para></listitem> | ||
349 | <listitem><para>To use the plug-in, first open or create an existing project. | ||
350 | If you are creating a new project, the "C GTK+" | ||
351 | project type will allow itself to be cross-compiled. | ||
352 | However, you should be aware that this type uses "glade" for the UI.</para></listitem> | ||
353 | <listitem><para>To activate the plug-in, select "Edit -> Preferences" and then choose | ||
354 | "General" from the left hand side. | ||
355 | Choose the "Installed plug-ins" tab, scroll down to "Poky SDK" and | ||
356 | check the box.</para></listitem> | ||
357 | </orderedlist> | ||
358 | The plug-in is now activated but not configured. | ||
359 | </para> | ||
360 | </section> | ||
361 | <section id="configuring-the-anjuta-plugin"> | ||
362 | <title>Configuring the Anjuta Plug-in</title> | ||
363 | <para> | ||
364 | You can find the configuration options for the SDK by choosing the Poky | ||
365 | SDK icon from the left hand side. | ||
366 | You need to define the following options: | ||
367 | <itemizedlist> | ||
368 | <listitem><para>SDK root: If you use an external toolchain you need to set | ||
369 | SDK root, which is the root directory of the SDK's sysroot. | ||
370 | For an i586 SDK directory is <filename>/opt/poky/</filename>. | ||
371 | This directory will contain "bin", "include", "var" and so forth under your | ||
372 | selected target architecture subdirectory | ||
373 | <filename>/opt/poky/sysroot/i586-poky-linux/</filename>. | ||
374 | The cross-compile tools you need are in | ||
375 | <filename>/opt/poky/sysroot/i586-pokysdk-linux/</filename>.</para></listitem> | ||
376 | <listitem><para>Poky root: If you have a local Poky build tree, you need to | ||
377 | set the Poky root, which is the root directory of the poky build tree. | ||
378 | If you build your i586 target architecture under the subdirectory of | ||
379 | <filename>build_x86</filename> within your Poky tree, the Poky root directory | ||
380 | should be <filename>$<poky_tree>/build_x86/</filename>.</para></listitem> | ||
381 | <listitem><para>Target Architecture: This is the cross compile triplet, | ||
382 | for example, "i586-poky-linux". | ||
383 | This target triplet is the prefix extracted from the set up script file's name. | ||
384 | For example, if the script file name is | ||
385 | <filename>/opt/poky/environment-setup-i586-poky-linux</filename> then the extracted target | ||
386 | triplet is "i586-poky-linux".</para></listitem> | ||
387 | <listitem><para>Kernel: Use the file chooser to select the kernel used with QEMU.</para></listitem> | ||
388 | <listitem><para>Root filesystem: Use the file chooser to select the root | ||
389 | filesystem directory. This directory is where you use "runqemu-extract-sdk" to extract the | ||
390 | core-image-sdk tarball.</para></listitem> | ||
391 | </itemizedlist> | ||
392 | </para> | ||
393 | </section> | ||
394 | <section id="using-the-anjuta-plug-in"> | ||
395 | <title>Using the Anjuta Plug-in</title> | ||
396 | <para> | ||
397 | The steps in this section show how to cross-compile a project, deploy it into | ||
398 | QEMU, run a debugger against it and then perform a system-wide profile. | ||
399 | <orderedlist> | ||
400 | <listitem><para>Choose "Build -> Run Configure" or "Build -> Run Autogenerate" to run | ||
401 | "configure" or "autogen", respectively for the project. | ||
402 | Either command passes command-line arguments to instruct the | ||
403 | cross-compile.</para></listitem> | ||
404 | <listitem><para>Choose "Build -> Build Project" to build and compile the project. | ||
405 | If you have previously built the project in the same tree without using | ||
406 | the cross-compiler you might find that your project fails to link. | ||
407 | If this is the case, simply select "Build -> Clean Project" to remove the | ||
408 | old binaries. | ||
409 | After you clean the project you can then try building it again.</para></listitem> | ||
410 | <listitem><para>Choose "Tools -> Start QEMU" to start QEMU. | ||
411 | After QEMU starts any error messages will appear in the message view. | ||
412 | Once Poky has fully booted within QEMU you can deploy the project | ||
413 | into it.</para></listitem> | ||
414 | <listitem><para>Once the project is built and you have QEMU running choose | ||
415 | "Tools -> Deploy" to install the package into a temporary | ||
416 | directory and then copy it using "rsync" over SSH into the target. | ||
417 | A progress bar and appropriate messages appear in the message view.</para></listitem> | ||
418 | <listitem><para>To debug a program installed onto the target choose | ||
419 | "Tools -> Debug remote". | ||
420 | Choosing this menu item causes prompts to appear to define the local binary | ||
421 | for debugging and also for the command line used to run on the target. | ||
422 | When you provide the command line be sure to include the full path to the to binary | ||
423 | installed in the target. | ||
424 | When the command line runs a "gdbserver" over SSH is started on the target and | ||
425 | an instance of "cross-gdb" starts in a local terminal. | ||
426 | The instance of "cross-gdb" will be preloaded to connect to the server and use the SDK root to | ||
427 | find symbols. | ||
428 | It also connects to the target and loads in various libraries as well as the | ||
429 | target program. | ||
430 | You should define any breakpoints or watchpoints at this point in the process since you might not | ||
431 | be able to interrupt the execution later. | ||
432 | To stop the debugger on the target choose "Tools -> Stop debugger".</para></listitem> | ||
433 | <listitem><para>It is also possible to execute a command in the target over SSH. | ||
434 | Doing so causes the appropriate environment to be established for execution. | ||
435 | To execute a command choose "Choose Tools -> Run remote". | ||
436 | This selection opens a terminal with the SSH command inside.</para></listitem> | ||
437 | <listitem><para>To perform a system-wide profile against the system running in QEMU choose | ||
438 | "Tools -> Profile remote". | ||
439 | This choice starts up "OProfileUI" with the appropriate parameters to | ||
440 | connect to the server running inside QEMU and also supplies the path | ||
441 | for debug information necessary to get a useful profile.</para></listitem> | ||
442 | </orderedlist> | ||
443 | </para> | ||
444 | </section> | ||
445 | </section> | ||
446 | |||
447 | |||
448 | --> | ||
449 | |||
450 | </section> | ||
451 | 99 | ||
452 | <section id="platdev-appdev-qemu"> | 100 | <section id="platdev-appdev-qemu"> |
453 | <title>Developing Externally in QEMU</title> | 101 | <title>External Development Using the QEMU Emulator</title> |
454 | <para> | 102 | <para> |
455 | Running Poky QEMU images is covered in the | 103 | Running Poky QEMU images is covered in the |
456 | <ulink url="http://www.yoctoproject.org/docs/yocto-quick-start/yocto-project-qs.html"> | 104 | <ulink url="http://www.yoctoproject.org/docs/yocto-quick-start/yocto-project-qs.html"> |
457 | Yocto Project Quick Start</ulink> in the "A Quick Test Run" section. | 105 | Yocto Project Quick Start</ulink> in the "A Quick Test Run" section. |
458 | </para> | 106 | </para> |
459 | <para> | 107 | <para> |
460 | Poky's QEMU images contain a complete native toolchain. This means | 108 | The QEMU images shipped with the Yocto Project contain complete toolchains |
461 | you can develop applications within QEMU similar to the way you would in a normal system. | 109 | native to specific target architectures. |
462 | Using qemux86 on an x86 machine is fast since the | 110 | This support allows you to develop applications within QEMU similar to the way |
463 | guest and host architectures match. | 111 | you would using a normal host development system. |
464 | On the other hand, using qemuarm can be slower but gives | 112 | </para> |
465 | faithful emulation of ARM-specific issues. To speed things up, these | 113 | |
466 | images support using "distcc" to call a cross-compiler outside the | 114 | <para> |
467 | emulated system. If "runqemu" was used to start | 115 | Speed can be an issue depending on the target and host architecture mix. |
468 | QEMU, and "distccd" is present on the host system, any Bitbake cross-compiling | 116 | For example, using the <filename>qemux86</filename> image in the emulator |
117 | on an Intel-based 32-bit (x86) host machine is fast because the target and | ||
118 | host architectures match. | ||
119 | On the other hand, using the <filename>qemuarm</filename> image on the same Intel-based | ||
120 | host can be slower. | ||
121 | But, you still achieve faithful emulation of ARM-specific issues. | ||
122 | </para> | ||
123 | |||
124 | <para> | ||
125 | To speed things up, the QEMU images support using <filename>distcc</filename> | ||
126 | to call a cross-compiler outside the emulated system. | ||
127 | If you used <filename>runqemu</filename> to start QEMU, and | ||
128 | <filename>distccd</filename> is present on the host system, any BitBake cross-compiling | ||
469 | toolchain available from the build system is automatically | 129 | toolchain available from the build system is automatically |
470 | used from within QEMU simply by calling "distcc". You can accomplish this by defining the | 130 | used from within QEMU simply by calling <filename>distcc</filename>. |
471 | cross-compiler variable (e.g. <filename>export CC="distcc"</filename>). | 131 | You can accomplish this by defining the cross-compiler variable |
132 | (e.g. <filename>export CC="distcc"</filename>). | ||
472 | Alternatively, if a suitable SDK/toolchain is present in | 133 | Alternatively, if a suitable SDK/toolchain is present in |
473 | <filename>/opt/poky</filename> it is also | 134 | <filename>/opt/poky</filename> the toolchain is also automatically used. |
474 | automatically be used. | ||
475 | </para> | 135 | </para> |
476 | 136 | ||
477 | <para> | 137 | <para> |
478 | There are several options for connecting into the emulated system. | 138 | Several mechanisms exist that let you connect into the system running on the |
479 | QEMU provides a framebuffer interface that has standard consoles | 139 | QEMU emulator: |
480 | available. There is also a serial connection available that has a | 140 | <itemizedlist> |
481 | console to the system running on it and uses standard IP networking. | 141 | <listitem><para>QEMU provides a framebuffer interface that makes standard |
482 | The images have a dropbear ssh server running with the root password | 142 | consoles available.</para></listitem> |
483 | disabled to allow standard ssh and scp commands to work. The images | 143 | <listitem><para>Generally, headless embedded devices have a serial port. |
484 | also contain an NFS server that exports the guest's root filesystem, which | 144 | If so, you can configure the operating system of the running image |
485 | allows it to be made available to the host. | 145 | to use that port to run a console. |
146 | The connection uses standard IP networking.</para></listitem> | ||
147 | <listitem><para>The QEMU images have a Dropbear secure shell (ssh) server | ||
148 | that runs with the root password disabled. | ||
149 | This allows you to use standard <filename>ssh</filename> and | ||
150 | <filename>scp</filename> commands.</para></listitem> | ||
151 | <listitem><para>The QEMU images also contain an embedded Network Files | ||
152 | System (NFS) server that exports the image's root filesystem. | ||
153 | This allows you to make the filesystem available to the | ||
154 | host.</para></listitem> | ||
155 | </itemizedlist> | ||
486 | </para> | 156 | </para> |
487 | </section> | 157 | </section> |
488 | 158 | ||
489 | <section id="platdev-appdev-insitu"> | 159 | <section id="platdev-appdev-insitu"> |
490 | <title>Developing in Poky Directly</title> | 160 | <title>Development Using Yocto Project Directly</title> |
491 | <para> | 161 | <para> |
492 | Working directly in Poky is a fast and effective development technique. | 162 | Working directly with the Yocto Project is a fast and effective development technique. |
493 | The idea is that you can directly edit files in | 163 | The idea is that you can directly edit files in a working directory |
494 | <glossterm><link linkend='var-WORKDIR'>WORKDIR</link></glossterm> | 164 | (<glossterm><link linkend='var-WORKDIR'>WORKDIR</link></glossterm>) |
495 | or the source directory <glossterm><link linkend='var-S'>S</link></glossterm> | 165 | or the source directory (<glossterm><link linkend='var-S'>S</link></glossterm>) |
496 | and then force specific tasks to rerun in order to test the changes. | 166 | and then force specific tasks to rerun in order to test the changes. |
497 | An example session working on the matchbox-desktop package might | 167 | An example session working on the matchbox-desktop package might |
498 | look like this: | 168 | look like this: |
@@ -505,6 +175,11 @@ | |||
505 | $ cd tmp/work/armv5te-poky-linux-gnueabi/matchbox-desktop-2.0+svnr1708-r0/ | 175 | $ cd tmp/work/armv5te-poky-linux-gnueabi/matchbox-desktop-2.0+svnr1708-r0/ |
506 | $ cd matchbox-desktop-2 | 176 | $ cd matchbox-desktop-2 |
507 | $ vi src/main.c | 177 | $ vi src/main.c |
178 | . | ||
179 | . | ||
180 | [Make your changes] | ||
181 | . | ||
182 | . | ||
508 | $ exit | 183 | $ exit |
509 | $ bitbake matchbox-desktop -c compile -f | 184 | $ bitbake matchbox-desktop -c compile -f |
510 | $ bitbake matchbox-desktop | 185 | $ bitbake matchbox-desktop |
@@ -512,34 +187,56 @@ | |||
512 | </para> | 187 | </para> |
513 | 188 | ||
514 | <para> | 189 | <para> |
515 | This example builds the package, changes into the work directory for the package, | 190 | This example builds the <filename>matchbox-desktop</filename> package, |
516 | changes a file, then recompiles the package. Instead of using "sh" as it is in the example, | 191 | creates a new terminal, changes into the work directory for the package, |
517 | you can also use two different terminals. However, the risk of using two terminals | 192 | changes a file, exits out of the terminal, and then recompiles the |
518 | is that a command like "unpack" could destroy the changes you've made to the | 193 | package. |
519 | work directory. Consequently, you need to work carefully. | 194 | Instead of using <filename>sh</filename>, |
195 | you can also use two different terminals. | ||
196 | However, the risk of using two terminals is that a command like | ||
197 | <filename>unpack</filename> could destroy your changes in the | ||
198 | work directory. | ||
199 | Consequently, you need to work carefully. | ||
520 | </para> | 200 | </para> |
521 | 201 | ||
522 | <para> | 202 | <para> |
523 | It is useful when making changes directly to the work directory files to do | 203 | It is useful when making changes directly to the work directory files to do |
524 | so using "quilt" as detailed in the <link linkend='usingpoky-modifying-packages-quilt'> | 204 | so using the Quilt tool as detailed in the |
525 | modifying packages with quilt</link> section. You can copy the resulting patches | 205 | <link linkend='usingpoky-modifying-packages-quilt'> |
526 | into the recipe directory and use them directly in the <glossterm><link | 206 | Modifying Package Source Code with Quilt</link> section. |
527 | linkend='var-SRC_URI'>SRC_URI</link></glossterm>. | 207 | Using Quilt, you can copy patches into the recipe directory and use the patches directly |
208 | through use of the <glossterm><link linkend='var-SRC_URI'>SRC_URI</link></glossterm> variable. | ||
528 | </para> | 209 | </para> |
210 | |||
529 | <para> | 211 | <para> |
530 | For a review of the skills used in this section see the <link | 212 | For a review of the skills used in this section, see the |
531 | linkend="usingpoky-components-bitbake">Bitbake</link> and <link | 213 | <link linkend="usingpoky-components-bitbake">BitBake</link> and |
532 | linkend="usingpoky-debugging-taskrunning">Running Specific Tasks</link> Sections. | 214 | <link linkend="usingpoky-debugging-taskrunning">Running Specific Tasks</link> sections |
215 | in this manual. | ||
533 | </para> | 216 | </para> |
534 | </section> | 217 | </section> |
535 | 218 | ||
536 | <section id="platdev-appdev-devshell"> | 219 | <section id="platdev-appdev-devshell"> |
537 | <title>Developing with 'devshell'</title> | 220 | <title>Development Within a Development Shell</title> |
538 | 221 | ||
539 | <para> | 222 | <para> |
540 | When debugging certain commands or even when just editing packages, the | 223 | When debugging certain commands or even when just editing packages, |
541 | 'devshell' can be a useful tool. | 224 | <filename>devshell</filename> can be a useful tool. |
542 | Use a command like the following to start this tool. | 225 | Using <filename>devshell</filename> differs from the example shown in the previous |
226 | section in that when you invoke <filename>devshell</filename> source files are | ||
227 | extracted into your working directory and patches are applied. | ||
228 | Then, a new terminal is opened and you are placed in the working directory. | ||
229 | In the new terminal all the Yocto Project build-related environment variables are | ||
230 | still defined so you can use commands such as <filename>configure</filename> and | ||
231 | <filename>make</filename>. | ||
232 | The commands execute just as if the Yocto Project build system were executing them. | ||
233 | Consequently, workng this way can be helpful when debugging a build or preparing | ||
234 | software to be used with the Yocto Project build system. | ||
235 | </para> | ||
236 | |||
237 | <para> | ||
238 | Following is an example that uses <filename>devshell</filename> on a target named | ||
239 | <filename>matchbox-desktop</filename>: | ||
543 | </para> | 240 | </para> |
544 | 241 | ||
545 | <para> | 242 | <para> |
@@ -550,62 +247,77 @@ | |||
550 | 247 | ||
551 | <para> | 248 | <para> |
552 | This command opens a terminal with a shell prompt within the Poky | 249 | This command opens a terminal with a shell prompt within the Poky |
553 | environment. Consequently, the following occurs: | 250 | environment. |
251 | The following occurs: | ||
554 | <itemizedlist> | 252 | <itemizedlist> |
555 | <listitem><para>The PATH variable includes the cross toolchain.</para></listitem> | 253 | <listitem><para>The <filename>PATH</filename> variable includes the |
556 | <listitem><para>The pkgconfig variables find the correct <filename>.pc</filename> files.</para></listitem> | 254 | cross-toolchain.</para></listitem> |
557 | <listitem><para>"configure" finds the Poky site files as well as any other necessary files.</para></listitem> | 255 | <listitem><para>The <filename>pkgconfig</filename> variables find the correct |
256 | <filename>.pc</filename> files.</para></listitem> | ||
257 | <listitem><para>The <filename>configure</filename> command finds the | ||
258 | Yocto Project site files as well as any other necessary files.</para></listitem> | ||
558 | </itemizedlist> | 259 | </itemizedlist> |
559 | Within this environment, you can run "configure" or "compile" commands as if they | 260 | Within this environment, you can run <filename>configure</filename> |
560 | were being run by Poky itself. | 261 | or <filename>compile</filename> commands as if they were being run by |
561 | The working directory also automatically changes to the (<glossterm><link linkend='var-S'>S</link></glossterm>) | 262 | the Yocto Project build system itself. |
562 | directory. | 263 | As noted earlier, the working directory also automatically changes to the |
563 | When you are finished, you just exit the shell or close the terminal window. | 264 | source directory (<glossterm><link linkend='var-S'>S</link></glossterm>). |
564 | </para> | 265 | </para> |
565 | 266 | ||
566 | <para> | 267 | <para> |
567 | The default shell used by "devshell" is the gnome-terminal. | 268 | When you are finished, you just exit the shell or close the terminal window. |
568 | You can use other forms of terminal can by setting the <glossterm> | ||
569 | <link linkend='var-TERMCMD'>TERMCMD</link></glossterm> and <glossterm> | ||
570 | <link linkend='var-TERMCMDRUN'>TERMCMDRUN</link></glossterm> variables | ||
571 | in <filename>local.conf</filename>. | ||
572 | For examples of the other options available, see | ||
573 | <filename>meta/conf/bitbake.conf</filename>. | ||
574 | </para> | 269 | </para> |
270 | |||
575 | <para> | 271 | <para> |
576 | An external shell is launched rather than opening directly into the original terminal | 272 | The default shell used by <filename>devshell</filename> is the GNOME Terminal. |
577 | window. | 273 | You can use other terminal forms by setting the |
578 | This allows easier interaction with Bitbake's multiple threads as well as | 274 | <glossterm><link linkend='var-TERMCMD'>TERMCMD</link></glossterm> and |
579 | for a future client/server split. | 275 | <glossterm><link linkend='var-TERMCMDRUN'>TERMCMDRUN</link></glossterm> variables |
580 | Note that "devshell" will still work over X11 forwarding or similar situations. | 276 | in the Yocto Project's <filename>local.conf</filename> file found in the build |
277 | directory. | ||
278 | For examples of the other options available, see the "UI/Interaction Configuration" | ||
279 | section of the | ||
280 | <filename>meta/conf/bitbake.conf</filename> configuration file in the Yocto Project | ||
281 | files. | ||
581 | </para> | 282 | </para> |
582 | 283 | ||
583 | <para> | 284 | <para> |
584 | It is worth remembering that inside "devshell" you need to use the full | 285 | Because an external shell is launched rather than opening directly into the |
585 | compiler name such as <filename>arm-poky-linux-gnueabi-gcc</filename> | 286 | original terminal window, it allows easier interaction with Bitbake's multiple |
586 | instead of just <filename>gcc</filename>. | 287 | threads as well as accomodates a future client/server split. |
587 | The same applies to other applications such as gcc, bintuils, libtool and so forth. | ||
588 | Poky will have setup environmental variables such as CC to assist applications, such as make, | ||
589 | find the correct tools. | ||
590 | </para> | 288 | </para> |
289 | |||
290 | <note> | ||
291 | <para>It is worth remembering that when using <filename>devshell</filename> | ||
292 | you need to use the full compiler name such as <filename>arm-poky-linux-gnueabi-gcc</filename> | ||
293 | instead of just using <filename>gcc</filename>. | ||
294 | The same applies to other applications such as <filename>bintuils</filename>, | ||
295 | <filename>libtool</filename> and so forth. | ||
296 | The Yocto Project has setup environment variables such as <filename>CC</filename> | ||
297 | to assist applications, such as <filename>make</filename> to find the correct tools.</para> | ||
298 | <para>It is also worth noting that <filename>devshell</filename> still works over | ||
299 | X11 forwarding and similar situations</para> | ||
300 | </note> | ||
591 | </section> | 301 | </section> |
592 | 302 | ||
593 | <section id="platdev-appdev-srcrev"> | 303 | <section id="platdev-appdev-srcrev"> |
594 | <title>Developing within Poky with an External SCM-based Package</title> | 304 | <title>Development Within Yocto Project for a Package that Uses an External SCM</title> |
595 | 305 | ||
596 | <para> | 306 | <para> |
597 | If you're working on a recipe that pulls from an external SCM it | 307 | If you're working on a recipe that pulls from an external Source Code Manager (SCM), it |
598 | is possible to have Poky notice new changes added to the | 308 | is possible to have the Yocto Project build system notice new changes added to the |
599 | SCM and then build the latest version using them. | 309 | SCM and then build the package that depends on them using the latest version. |
600 | This only works for SCMs from which it is possible to get a sensible revision number for changes. | 310 | This only works for SCMs from which it is possible to get a sensible revision number for changes. |
601 | Currently it works for svn, git and bzr repositories. | 311 | Currently, you can do this with Apache Subversion (SVN), Git, and Bazaar (BZR) repositories. |
602 | </para> | 312 | </para> |
603 | 313 | ||
604 | <para> | 314 | <para> |
605 | To enable this behavior simply add <glossterm> | 315 | To enable this behavior, simply add the following to the <filename>local.conf</filename> |
606 | <link linkend='var-SRCREV'>SRCREV</link></glossterm>_pn-<glossterm> | 316 | configuration file in the build directory of the Yocto Project files: |
607 | <link linkend='var-PN'>PN</link></glossterm> = "${AUTOREV}" to | 317 | <literallayout class='monospaced'> |
608 | <filename>local.conf</filename>, where <glossterm><link linkend='var-PN'>PN</link></glossterm> | 318 | SRCREV_pn-<PN> = "${AUTOREV}" |
319 | </literallayout> | ||
320 | where <filename>PN</filename> | ||
609 | is the name of the package for which you want to enable automatic source | 321 | is the name of the package for which you want to enable automatic source |
610 | revision updating. | 322 | revision updating. |
611 | </para> | 323 | </para> |