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> |
