| Patrick Williams | c0f7c04 | 2017-02-23 20:41:17 -0600 | [diff] [blame] | 1 | <!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" | 
 | 2 | "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" | 
 | 3 | [<!ENTITY % poky SYSTEM "../poky.ent"> %poky; ] > | 
 | 4 |  | 
 | 5 | <chapter id='ref-devtool-reference'> | 
 | 6 |     <title><filename>devtool</filename> Quick Reference</title> | 
 | 7 |  | 
 | 8 |     <para> | 
 | 9 |         The <filename>devtool</filename> command-line tool provides a number | 
 | 10 |         of features that help you build, test, and package software. | 
 | 11 |         This command is available alongside the <filename>bitbake</filename> | 
 | 12 |         command. | 
 | 13 |         Additionally, the <filename>devtool</filename> command is a key | 
 | 14 |         part of the extensible SDK. | 
 | 15 |     </para> | 
 | 16 |  | 
 | 17 |     <para> | 
 | 18 |         This chapter provides a Quick Reference for the | 
 | 19 |         <filename>devtool</filename> command. | 
 | 20 |         For more information on how to apply the command when using the | 
 | 21 |         extensible SDK, see the | 
 | 22 |         "<ulink url='&YOCTO_DOCS_SDK_URL;#sdk-extensible'>Using the Extensible SDK</ulink>" | 
| Brad Bishop | d7bf8c1 | 2018-02-25 22:55:05 -0500 | [diff] [blame] | 23 |         section in the Yocto Project Application Development and the | 
 | 24 |         Extensible Software Development Kit (eSDK) manual. | 
| Patrick Williams | c0f7c04 | 2017-02-23 20:41:17 -0600 | [diff] [blame] | 25 |     </para> | 
 | 26 |  | 
 | 27 |     <section id='devtool-getting-help'> | 
 | 28 |         <title>Getting Help</title> | 
 | 29 |  | 
 | 30 |         <para> | 
 | 31 |             The <filename>devtool</filename> command line is organized | 
 | 32 |             similarly to Git in that it has a number of sub-commands for | 
 | 33 |             each function. | 
 | 34 |             You can run <filename>devtool --help</filename> to see all | 
 | 35 |             the commands: | 
 | 36 |             <literallayout class='monospaced'> | 
 | 37 |      $ devtool --help | 
| Brad Bishop | d7bf8c1 | 2018-02-25 22:55:05 -0500 | [diff] [blame] | 38 |      usage: devtool add [-h] [--same-dir | --no-same-dir] [--fetch URI] | 
 | 39 |                         [--fetch-dev] [--version VERSION] [--no-git] | 
 | 40 |                         [--srcrev SRCREV | --autorev] [--srcbranch SRCBRANCH] | 
 | 41 |                         [--binary] [--also-native] [--src-subdir SUBDIR] | 
 | 42 |                         [--mirrors] [--provides PROVIDES] | 
 | 43 |                         [recipename] [srctree] [fetchuri] | 
| Patrick Williams | c0f7c04 | 2017-02-23 20:41:17 -0600 | [diff] [blame] | 44 |  | 
| Brad Bishop | d7bf8c1 | 2018-02-25 22:55:05 -0500 | [diff] [blame] | 45 |      Adds a new recipe to the workspace to build a specified source tree. Can | 
 | 46 |      optionally fetch a remote URI and unpack it to create the source tree. | 
 | 47 |  | 
 | 48 |      arguments: | 
 | 49 |        recipename            Name for new recipe to add (just name - no version, | 
 | 50 |                              path or extension). If not specified, will attempt | 
 | 51 |                              to auto-detect it. | 
 | 52 |        srctree               Path to external source tree. If not specified, a | 
 | 53 |                              subdirectory of | 
 | 54 |                              /home/<replaceable>user</replaceable>/poky/build/workspace/sources will be | 
 | 55 |                              used. | 
 | 56 |        fetchuri              Fetch the specified URI and extract it to create | 
 | 57 |                              the source tree | 
| Patrick Williams | c0f7c04 | 2017-02-23 20:41:17 -0600 | [diff] [blame] | 58 |  | 
 | 59 |      options: | 
| Brad Bishop | d7bf8c1 | 2018-02-25 22:55:05 -0500 | [diff] [blame] | 60 |        -h, --help            show this help message and exit | 
 | 61 |        --same-dir, -s        Build in same directory as source | 
 | 62 |        --no-same-dir         Force build in a separate build directory | 
 | 63 |        --fetch URI, -f URI   Fetch the specified URI and extract it to create | 
 | 64 |                              the source tree (deprecated - pass as positional | 
 | 65 |                              argument instead) | 
 | 66 |        --fetch-dev           For npm, also fetch devDependencies | 
 | 67 |        --version VERSION, -V VERSION | 
 | 68 |                              Version to use within recipe (PV) | 
 | 69 |        --no-git, -g          If fetching source, do not set up source tree as a | 
 | 70 |                              git repository | 
 | 71 |        --srcrev SRCREV, -S SRCREV | 
 | 72 |                              Source revision to fetch if fetching from an SCM | 
 | 73 |                              such as git (default latest) | 
 | 74 |        --autorev, -a         When fetching from a git repository, set SRCREV in | 
 | 75 |                              the recipe to a floating revision instead of fixed | 
 | 76 |        --srcbranch SRCBRANCH, -B SRCBRANCH | 
 | 77 |                              Branch in source repository if fetching from an SCM | 
 | 78 |                              such as git (default master) | 
 | 79 |        --binary, -b          Treat the source tree as something that should be | 
 | 80 |                              installed verbatim (no compilation, same directory | 
 | 81 |                              structure). Useful with binary packages e.g. RPMs. | 
 | 82 |        --also-native         Also add native variant (i.e. support building | 
 | 83 |                              recipe for the build host as well as the target | 
 | 84 |                              machine) | 
 | 85 |        --src-subdir SUBDIR   Specify subdirectory within source tree to use | 
 | 86 |        --mirrors             Enable PREMIRRORS and MIRRORS for source tree | 
 | 87 |                              fetching (disable by default). | 
 | 88 |        --provides PROVIDES, -p PROVIDES | 
 | 89 |                              Specify an alias for the item provided by the | 
 | 90 |                              recipe. E.g. virtual/libgl | 
| Patrick Williams | c0f7c04 | 2017-02-23 20:41:17 -0600 | [diff] [blame] | 91 |             </literallayout> | 
 | 92 |         </para> | 
 | 93 |  | 
 | 94 |         <para> | 
 | 95 |                 As directed in the general help output, you can get more | 
 | 96 |                 syntax on a specific command by providing the command | 
 | 97 |                 name and using <filename>--help</filename>: | 
 | 98 |             <literallayout class='monospaced'> | 
 | 99 |      $ devtool add --help | 
 | 100 |      usage: devtool add [-h] [--same-dir | --no-same-dir] [--fetch URI] | 
 | 101 |                         [--version VERSION] [--no-git] [--autorev] [--binary] | 
 | 102 |                         [--also-native] [--src-subdir SUBDIR] | 
 | 103 |                         [recipename] [srctree] [fetchuri] | 
 | 104 |  | 
 | 105 |      Adds a new recipe to the workspace to build a specified source tree. Can | 
 | 106 |      optionally fetch a remote URI and unpack it to create the source tree. | 
 | 107 |  | 
 | 108 |      arguments: | 
 | 109 |        recipename            Name for new recipe to add (just name - no version, | 
 | 110 |                              path or extension). If not specified, will attempt to | 
 | 111 |                              auto-detect it. | 
 | 112 |        srctree               Path to external source tree. If not specified, a | 
 | 113 |                              subdirectory of | 
 | 114 |                              /home/scottrif/poky/build/workspace/sources will be | 
 | 115 |                              used. | 
 | 116 |        fetchuri              Fetch the specified URI and extract it to create the | 
 | 117 |                              source tree | 
 | 118 |  | 
 | 119 |      options: | 
 | 120 |        -h, --help            show this help message and exit | 
 | 121 |        --same-dir, -s        Build in same directory as source | 
 | 122 |        --no-same-dir         Force build in a separate build directory | 
 | 123 |        --fetch URI, -f URI   Fetch the specified URI and extract it to create the | 
 | 124 |                              source tree (deprecated - pass as positional argument | 
 | 125 |                              instead) | 
 | 126 |        --version VERSION, -V VERSION | 
 | 127 |                              Version to use within recipe (PV) | 
 | 128 |        --no-git, -g          If fetching source, do not set up source tree as a git | 
 | 129 |                              repository | 
 | 130 |        --autorev, -a         When fetching from a git repository, set SRCREV in the | 
 | 131 |                              recipe to a floating revision instead of fixed | 
 | 132 |        --binary, -b          Treat the source tree as something that should be | 
 | 133 |                              installed verbatim (no compilation, same directory | 
 | 134 |                              structure). Useful with binary packages e.g. RPMs. | 
 | 135 |        --also-native         Also add native variant (i.e. support building recipe | 
 | 136 |                              for the build host as well as the target machine) | 
 | 137 |        --src-subdir SUBDIR   Specify subdirectory within source tree to use | 
 | 138 |             </literallayout> | 
 | 139 |         </para> | 
 | 140 |     </section> | 
 | 141 |  | 
 | 142 |     <section id='devtool-the-workspace-layer-structure'> | 
 | 143 |         <title>The Workspace Layer Structure</title> | 
 | 144 |  | 
 | 145 |         <para> | 
 | 146 |             <filename>devtool</filename> uses a "Workspace" layer | 
 | 147 |             in which to accomplish builds. | 
 | 148 |             This layer is not specific to any single | 
 | 149 |             <filename>devtool</filename> command but is rather a common | 
 | 150 |             working area used across the tool. | 
 | 151 |         </para> | 
 | 152 |  | 
 | 153 |         <para> | 
 | 154 |             The following figure shows the workspace structure: | 
 | 155 |         </para> | 
 | 156 |  | 
 | 157 |         <para> | 
 | 158 |             <imagedata fileref="figures/build-workspace-directory.png" | 
 | 159 |                 width="6in" depth="5in" align="left" scale="70" /> | 
 | 160 |         </para> | 
 | 161 |  | 
 | 162 |         <para> | 
 | 163 |             <literallayout class='monospaced'> | 
 | 164 |      attic - A directory created if devtool believes it preserve | 
 | 165 |              anything when you run "devtool reset".  For example, if you | 
 | 166 |              run "devtool add", make changes to the recipe, and then | 
 | 167 |              run "devtool reset", devtool takes notice that the file has | 
 | 168 |              been changed and moves it into the attic should you still | 
 | 169 |              want the recipe. | 
 | 170 |  | 
 | 171 |      README - Provides information on what is in workspace layer and how to | 
 | 172 |               manage it. | 
 | 173 |  | 
 | 174 |      .devtool_md5 - A checksum file used by devtool. | 
 | 175 |  | 
 | 176 |      appends - A directory that contains *.bbappend files, which point to | 
 | 177 |                external source. | 
 | 178 |  | 
 | 179 |      conf - A configuration directory that contains the layer.conf file. | 
 | 180 |  | 
 | 181 |      recipes - A directory containing recipes.  This directory contains a | 
 | 182 |                folder for each directory added whose name matches that of the | 
 | 183 |                added recipe.  devtool places the <replaceable>recipe</replaceable>.bb file | 
 | 184 |                within that sub-directory. | 
 | 185 |  | 
 | 186 |      sources - A directory containing a working copy of the source files used | 
 | 187 |                when building the recipe.  This is the default directory used | 
 | 188 |                as the location of the source tree when you do not provide a | 
 | 189 |                source tree path.  This directory contains a folder for each | 
 | 190 |                set of source files matched to a corresponding recipe. | 
 | 191 |             </literallayout> | 
 | 192 |         </para> | 
 | 193 |     </section> | 
 | 194 |  | 
 | 195 |     <section id='devtool-adding-a-new-recipe-to-the-workspace'> | 
 | 196 |         <title>Adding a New Recipe to the Workspace Layer</title> | 
 | 197 |  | 
 | 198 |         <para> | 
 | 199 |             Use the <filename>devtool add</filename> command to add a new recipe | 
 | 200 |             to the workspace layer. | 
 | 201 |             The recipe you add should not exist - | 
 | 202 |             <filename>devtool</filename> creates it for you. | 
 | 203 |             The source files the recipe uses should exist in an external | 
 | 204 |             area. | 
 | 205 |         </para> | 
 | 206 |  | 
 | 207 |         <para> | 
 | 208 |             The following example creates and adds a new recipe named | 
 | 209 |             <filename>jackson</filename> to a workspace layer the tool creates. | 
 | 210 |             The source code built by the recipes resides in | 
| Brad Bishop | d7bf8c1 | 2018-02-25 22:55:05 -0500 | [diff] [blame] | 211 |             <filename>/home/<replaceable>user</replaceable>/sources/jackson</filename>: | 
| Patrick Williams | c0f7c04 | 2017-02-23 20:41:17 -0600 | [diff] [blame] | 212 |             <literallayout class='monospaced'> | 
| Brad Bishop | d7bf8c1 | 2018-02-25 22:55:05 -0500 | [diff] [blame] | 213 |      $ devtool add jackson /home/<replaceable>user</replaceable>/sources/jackson | 
| Patrick Williams | c0f7c04 | 2017-02-23 20:41:17 -0600 | [diff] [blame] | 214 |             </literallayout> | 
 | 215 |         </para> | 
 | 216 |  | 
 | 217 |         <para> | 
 | 218 |             If you add a recipe and the workspace layer does not exist, | 
 | 219 |             the command creates the layer and populates it as | 
 | 220 |             described in | 
 | 221 |             "<link linkend='devtool-the-workspace-layer-structure'>The Workspace Layer Structure</link>" | 
 | 222 |             section. | 
 | 223 |         </para> | 
 | 224 |  | 
 | 225 |         <para> | 
 | 226 |             Running <filename>devtool add</filename> when the | 
 | 227 |             workspace layer exists causes the tool to add the recipe, | 
 | 228 |             append files, and source files into the existing workspace layer. | 
 | 229 |             The <filename>.bbappend</filename> file is created to point | 
 | 230 |             to the external source tree. | 
| Brad Bishop | d7bf8c1 | 2018-02-25 22:55:05 -0500 | [diff] [blame] | 231 |             <note> | 
 | 232 |                 If your recipe has runtime dependencies defined, you must be sure | 
 | 233 |                 that these packages exist on the target hardware before attempting | 
 | 234 |                 to run your application. | 
 | 235 |                 If dependent packages (e.g. libraries) do not exist on the target, | 
 | 236 |                 your application, when run, will fail to find those functions. | 
 | 237 |                 For more information, see the | 
 | 238 |                 "<link linkend='devtool-deploying-your-software-on-the-target-machine'>Deploying Your Software on the Target Machine</link>" | 
 | 239 |                 section. | 
 | 240 |             </note> | 
| Patrick Williams | c0f7c04 | 2017-02-23 20:41:17 -0600 | [diff] [blame] | 241 |         </para> | 
| Brad Bishop | 6e60e8b | 2018-02-01 10:27:11 -0500 | [diff] [blame] | 242 |  | 
| Brad Bishop | d7bf8c1 | 2018-02-25 22:55:05 -0500 | [diff] [blame] | 243 |         <para> | 
 | 244 |             By default, <filename>devtool add</filename> uses the latest | 
 | 245 |             revision (i.e. master) when unpacking files from a remote URI. | 
 | 246 |             In some cases, you might want to specify a source revision by | 
 | 247 |             branch, tag, or commit hash. You can specify these options when | 
 | 248 |             using the <filename>devtool add</filename> command: | 
 | 249 |             <itemizedlist> | 
 | 250 |                 <listitem><para> | 
 | 251 |                     To specify a source branch, use the | 
 | 252 |                     <filename>--srcbranch</filename> option: | 
 | 253 |                     <literallayout class='monospaced'> | 
 | 254 |      $ devtool add --srcbranch &DISTRO_NAME_NO_CAP; jackson /home/<replaceable>user</replaceable>/sources/jackson | 
 | 255 |                     </literallayout> | 
 | 256 |                     In the previous example, you are checking out the | 
 | 257 |                     &DISTRO_NAME_NO_CAP; branch. | 
 | 258 |                     </para></listitem> | 
 | 259 |                 <listitem><para> | 
 | 260 |                     To specify a specific tag or commit hash, use the | 
 | 261 |                     <filename>--srcrev</filename> option: | 
 | 262 |                     <literallayout class='monospaced'> | 
 | 263 |      $ devtool add --srcrev &DISTRO_REL_TAG; jackson /home/<replaceable>user</replaceable>/sources/jackson | 
 | 264 |      $ devtool add --srcrev <replaceable>some_commit_hash</replaceable> /home/<replaceable>user</replaceable>/sources/jackson | 
 | 265 |                     </literallayout> | 
 | 266 |                     The previous examples check out the &DISTRO_REL_TAG; tag | 
 | 267 |                     and the commit associated with the | 
 | 268 |                     <replaceable>some_commit_hash</replaceable> hash. | 
 | 269 |                     </para></listitem> | 
 | 270 |             </itemizedlist> | 
 | 271 |             <note> | 
 | 272 |                 If you prefer to use the latest revision every time the recipe is | 
 | 273 |                 built, use the options <filename>--autorev</filename> | 
 | 274 |                 or <filename>-a</filename>. | 
 | 275 |             </note> | 
 | 276 |         </para> | 
| Patrick Williams | c0f7c04 | 2017-02-23 20:41:17 -0600 | [diff] [blame] | 277 |     </section> | 
 | 278 |  | 
 | 279 |     <section id='devtool-extracting-the-source-for-an-existing-recipe'> | 
 | 280 |         <title>Extracting the Source for an Existing Recipe</title> | 
 | 281 |  | 
 | 282 |         <para> | 
 | 283 |             Use the <filename>devtool extract</filename> command to | 
 | 284 |             extract the source for an existing recipe. | 
 | 285 |             When you use this command, you must supply the root name | 
 | 286 |             of the recipe (i.e. no version, paths, or extensions), and | 
 | 287 |             you must supply the directory to which you want the source | 
 | 288 |             extracted. | 
 | 289 |         </para> | 
 | 290 |  | 
 | 291 |         <para> | 
 | 292 |             Additional command options let you control the name of a | 
 | 293 |             development branch into which you can checkout the source | 
 | 294 |             and whether or not to keep a temporary directory, which is | 
 | 295 |             useful for debugging. | 
 | 296 |         </para> | 
 | 297 |     </section> | 
 | 298 |  | 
 | 299 |     <section id='devtool-synchronizing-a-recipes-extracted-source-tree'> | 
 | 300 |         <title>Synchronizing a Recipe's Extracted Source Tree</title> | 
 | 301 |  | 
 | 302 |         <para> | 
 | 303 |             Use the <filename>devtool sync</filename> command to | 
 | 304 |             synchronize a previously extracted source tree for an | 
 | 305 |             existing recipe. | 
 | 306 |             When you use this command, you must supply the root name | 
 | 307 |             of the recipe (i.e. no version, paths, or extensions), and | 
 | 308 |             you must supply the directory to which you want the source | 
 | 309 |             extracted. | 
 | 310 |         </para> | 
 | 311 |  | 
 | 312 |         <para> | 
 | 313 |             Additional command options let you control the name of a | 
 | 314 |             development branch into which you can checkout the source | 
 | 315 |             and whether or not to keep a temporary directory, which is | 
 | 316 |             useful for debugging. | 
 | 317 |         </para> | 
 | 318 |     </section> | 
 | 319 |  | 
 | 320 |     <section id='devtool-modifying-a-recipe'> | 
 | 321 |         <title>Modifying an Existing Recipe</title> | 
 | 322 |  | 
 | 323 |         <para> | 
 | 324 |             Use the <filename>devtool modify</filename> command to begin | 
 | 325 |             modifying the source of an existing recipe. | 
 | 326 |             This command is very similar to the | 
| Brad Bishop | d7bf8c1 | 2018-02-25 22:55:05 -0500 | [diff] [blame] | 327 |             <link linkend='devtool-adding-a-new-recipe-to-the-workspace'><filename>add</filename></link> | 
| Patrick Williams | c0f7c04 | 2017-02-23 20:41:17 -0600 | [diff] [blame] | 328 |             command except that it does not physically create the | 
 | 329 |             recipe in the workspace layer because the recipe already | 
 | 330 |             exists in an another layer. | 
 | 331 |         </para> | 
 | 332 |  | 
 | 333 |         <para> | 
 | 334 |             The <filename>devtool modify</filename> command extracts the | 
 | 335 |             source for a recipe, sets it up as a Git repository if the | 
 | 336 |             source had not already been fetched from Git, checks out a | 
 | 337 |             branch for development, and applies any patches from the recipe | 
 | 338 |             as commits on top. | 
 | 339 |             You can use the following command to checkout the source | 
 | 340 |             files: | 
 | 341 |             <literallayout class='monospaced'> | 
 | 342 |      $ devtool modify <replaceable>recipe</replaceable> | 
 | 343 |             </literallayout> | 
 | 344 |             Using the above command form, <filename>devtool</filename> uses | 
 | 345 |             the existing recipe's | 
 | 346 |             <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link> | 
 | 347 |             statement to locate the upstream source, extracts the source | 
 | 348 |             into the default sources location in the workspace. | 
 | 349 |             The default development branch used is "devtool". | 
 | 350 |         </para> | 
 | 351 |     </section> | 
 | 352 |  | 
 | 353 |     <section id='devtool-edit-an-existing-recipe'> | 
 | 354 |         <title>Edit an Existing Recipe</title> | 
 | 355 |  | 
 | 356 |         <para> | 
 | 357 |             Use the <filename>devtool edit-recipe</filename> command | 
 | 358 |             to run the default editor, which is identified using the | 
 | 359 |             <filename>EDITOR</filename> variable, on the specified recipe. | 
 | 360 |         </para> | 
 | 361 |  | 
 | 362 |         <para> | 
 | 363 |             When you use the <filename>devtool edit-recipe</filename> | 
 | 364 |             command, you must supply the root name of the recipe | 
 | 365 |             (i.e. no version, paths, or extensions). | 
 | 366 |             Also, the recipe file itself must reside in the workspace | 
 | 367 |             as a result of the <filename>devtool add</filename> or | 
 | 368 |             <filename>devtool upgrade</filename> commands. | 
 | 369 |             However, you can override that requirement by using the | 
 | 370 |             "-a" or "--any-recipe" option. | 
 | 371 |             Using either of these options allows you to edit any recipe | 
 | 372 |             regardless of its location. | 
 | 373 |         </para> | 
 | 374 |     </section> | 
 | 375 |  | 
 | 376 |     <section id='devtool-updating-a-recipe'> | 
 | 377 |         <title>Updating a Recipe</title> | 
 | 378 |  | 
 | 379 |         <para> | 
 | 380 |             Use the <filename>devtool update-recipe</filename> command to | 
 | 381 |             update your recipe with patches that reflect changes you make | 
 | 382 |             to the source files. | 
 | 383 |             For example, if you know you are going to work on some | 
 | 384 |             code, you could first use the | 
| Brad Bishop | d7bf8c1 | 2018-02-25 22:55:05 -0500 | [diff] [blame] | 385 |             <link linkend='devtool-modifying-a-recipe'><filename>devtool modify</filename></link> | 
| Patrick Williams | c0f7c04 | 2017-02-23 20:41:17 -0600 | [diff] [blame] | 386 |             command to extract the code and set up the workspace. | 
 | 387 |             After which, you could modify, compile, and test the code. | 
 | 388 |         </para> | 
 | 389 |  | 
 | 390 |         <para> | 
 | 391 |             When you are satisfied with the results and you have committed | 
 | 392 |             your changes to the Git repository, you can then | 
 | 393 |             run the <filename>devtool update-recipe</filename> to create the | 
 | 394 |             patches and update the recipe: | 
 | 395 |             <literallayout class='monospaced'> | 
 | 396 |      $ devtool update-recipe <replaceable>recipe</replaceable> | 
 | 397 |             </literallayout> | 
 | 398 |             If you run the <filename>devtool update-recipe</filename> | 
 | 399 |             without committing your changes, the command ignores the | 
 | 400 |             changes. | 
 | 401 |         </para> | 
 | 402 |  | 
 | 403 |         <para> | 
 | 404 |             Often, you might want to apply customizations made to your | 
 | 405 |             software in your own layer rather than apply them to the | 
 | 406 |             original recipe. | 
 | 407 |             If so, you can use the | 
 | 408 |             <filename>-a</filename> or <filename>--append</filename> | 
 | 409 |             option with the <filename>devtool update-recipe</filename> | 
 | 410 |             command. | 
 | 411 |             These options allow you to specify the layer into which to | 
 | 412 |             write an append file: | 
 | 413 |             <literallayout class='monospaced'> | 
 | 414 |      $ devtool update-recipe <replaceable>recipe</replaceable> -a <replaceable>base-layer-directory</replaceable> | 
 | 415 |             </literallayout> | 
 | 416 |             The <filename>*.bbappend</filename> file is created at the | 
 | 417 |             appropriate path within the specified layer directory, which | 
 | 418 |             may or may not be in your <filename>bblayers.conf</filename> | 
 | 419 |             file. | 
 | 420 |             If an append file already exists, the command updates it | 
 | 421 |             appropriately. | 
 | 422 |         </para> | 
 | 423 |     </section> | 
 | 424 |  | 
 | 425 |     <section id='devtool-upgrading-a-recipe'> | 
 | 426 |         <title>Upgrading a Recipe</title> | 
 | 427 |  | 
 | 428 |         <para> | 
 | 429 |             Use the <filename>devtool upgrade</filename> command | 
 | 430 |             to upgrade an existing recipe to a new upstream version. | 
 | 431 |             The command puts the upgraded recipe file into the | 
 | 432 |             workspace along with any associated files, and extracts | 
 | 433 |             the source tree to a specified location should patches | 
 | 434 |             need rebased or added to as a result of the upgrade. | 
 | 435 |         </para> | 
 | 436 |  | 
 | 437 |         <para> | 
 | 438 |             When you use the <filename>devtool upgrade</filename> command, | 
 | 439 |             you must supply the root name of the recipe (i.e. no version, | 
 | 440 |             paths, or extensions), and you must supply the directory | 
 | 441 |             to which you want the source extracted. | 
 | 442 |             Additional command options let you control things such as | 
 | 443 |             the version number to which you want to upgrade (i.e. the | 
 | 444 |             <link linkend='var-PV'><filename>PV</filename></link>), | 
 | 445 |             the source revision to which you want to upgrade (i.e. the | 
 | 446 |             <link linkend='var-SRCREV'><filename>SRCREV</filename></link>, | 
 | 447 |             whether or not to apply patches, and so forth. | 
 | 448 |         </para> | 
 | 449 |     </section> | 
 | 450 |  | 
 | 451 |     <section id='devtool-resetting-a-recipe'> | 
 | 452 |         <title>Resetting a Recipe</title> | 
 | 453 |  | 
 | 454 |         <para> | 
 | 455 |             Use the <filename>devtool reset</filename> command to remove a | 
 | 456 |             recipe and its configuration (e.g. the corresponding | 
 | 457 |             <filename>.bbappend</filename> file) from the workspace layer. | 
 | 458 |             Realize that this command deletes the recipe and the | 
 | 459 |             append file. | 
 | 460 |             The command does not physically move them for you. | 
 | 461 |             Consequently, you must be sure to physically relocate your | 
 | 462 |             updated recipe and the append file outside of the workspace | 
 | 463 |             layer before running the <filename>devtool reset</filename> | 
 | 464 |             command. | 
 | 465 |         </para> | 
 | 466 |  | 
 | 467 |         <para> | 
 | 468 |             If the <filename>devtool reset</filename> command detects that | 
 | 469 |             the recipe or the append files have been modified, the | 
 | 470 |             command preserves the modified files in a separate "attic" | 
 | 471 |             subdirectory under the workspace layer. | 
 | 472 |         </para> | 
 | 473 |  | 
 | 474 |         <para> | 
 | 475 |             Here is an example that resets the workspace directory that | 
 | 476 |             contains the <filename>mtr</filename> recipe: | 
 | 477 |             <literallayout class='monospaced'> | 
 | 478 |      $ devtool reset mtr | 
 | 479 |      NOTE: Cleaning sysroot for recipe mtr... | 
 | 480 |      NOTE: Leaving source tree /home/scottrif/poky/build/workspace/sources/mtr as-is; if you no | 
 | 481 |         longer need it then please delete it manually | 
 | 482 |      $ | 
 | 483 |             </literallayout> | 
 | 484 |         </para> | 
 | 485 |     </section> | 
 | 486 |  | 
 | 487 |     <section id='devtool-building-your-recipe'> | 
 | 488 |         <title>Building Your Recipe</title> | 
 | 489 |  | 
 | 490 |         <para> | 
 | 491 |             Use the <filename>devtool build</filename> command to cause the | 
 | 492 |             OpenEmbedded build system to build your recipe. | 
 | 493 |             The <filename>devtool build</filename> command is equivalent to | 
 | 494 |             <filename>bitbake -c populate_sysroot</filename>. | 
 | 495 |         </para> | 
 | 496 |  | 
 | 497 |         <para> | 
 | 498 |             When you use the <filename>devtool build</filename> command, | 
 | 499 |             you must supply the root name of the recipe (i.e. no version, | 
 | 500 |             paths, or extensions). | 
 | 501 |             You can use either the "-s" or the "--disable-parallel-make" | 
 | 502 |             option to disable parallel makes during the build. | 
 | 503 |             Here is an example: | 
 | 504 |             <literallayout class='monospaced'> | 
 | 505 |      $ devtool build <replaceable>recipe</replaceable> | 
 | 506 |             </literallayout> | 
 | 507 |         </para> | 
 | 508 |     </section> | 
 | 509 |  | 
 | 510 |     <section id='devtool-building-your-image'> | 
 | 511 |         <title>Building Your Image</title> | 
 | 512 |  | 
 | 513 |         <para> | 
 | 514 |             Use the <filename>devtool build-image</filename> command | 
 | 515 |             to build an image, extending it to include packages from | 
 | 516 |             recipes in the workspace. | 
 | 517 |             Using this command is useful when you want an image that | 
 | 518 |             ready for immediate deployment onto a device for testing. | 
 | 519 |             For proper integration into a final image, you need to | 
 | 520 |             edit your custom image recipe appropriately. | 
 | 521 |         </para> | 
 | 522 |  | 
 | 523 |         <para> | 
 | 524 |             When you use the <filename>devtool build-image</filename> | 
 | 525 |             command, you must supply the name of the image. | 
 | 526 |             This command has no command line options: | 
 | 527 |             <literallayout class='monospaced'> | 
 | 528 |      $ devtool build-image <replaceable>image</replaceable> | 
 | 529 |             </literallayout> | 
 | 530 |         </para> | 
 | 531 |     </section> | 
 | 532 |  | 
 | 533 |     <section id='devtool-deploying-your-software-on-the-target-machine'> | 
 | 534 |         <title>Deploying Your Software on the Target Machine</title> | 
 | 535 |  | 
 | 536 |         <para> | 
 | 537 |             Use the <filename>devtool deploy-target</filename> command to | 
 | 538 |             deploy the recipe's build output to the live target machine: | 
 | 539 |             <literallayout class='monospaced'> | 
 | 540 |      $ devtool deploy-target <replaceable>recipe</replaceable> <replaceable>target</replaceable> | 
 | 541 |             </literallayout> | 
 | 542 |             The <replaceable>target</replaceable> is the address of the | 
 | 543 |             target machine, which must be running an SSH server (i.e. | 
 | 544 |             <filename>user@hostname[:destdir]</filename>). | 
 | 545 |         </para> | 
 | 546 |  | 
 | 547 |         <para> | 
 | 548 |             This command deploys all files installed during the | 
 | 549 |             <link linkend='ref-tasks-install'><filename>do_install</filename></link> | 
 | 550 |             task. | 
 | 551 |             Furthermore, you do not need to have package management enabled | 
 | 552 |             within the target machine. | 
 | 553 |             If you do, the package manager is bypassed. | 
 | 554 |             <note><title>Notes</title> | 
 | 555 |                 <para> | 
 | 556 |                     The <filename>deploy-target</filename> | 
 | 557 |                     functionality is for development only. | 
 | 558 |                     You should never use it to update an image that will be | 
 | 559 |                     used in production. | 
 | 560 |                 </para> | 
 | 561 |             </note> | 
 | 562 |         </para> | 
| Brad Bishop | 6e60e8b | 2018-02-01 10:27:11 -0500 | [diff] [blame] | 563 |  | 
 | 564 |         <para> | 
 | 565 |             Some conditions exist that could prevent a deployed application | 
 | 566 |             from behaving as expected. | 
 | 567 |             When both of the following conditions exist, your application has | 
 | 568 |             the potential to not behave correctly when run on the target: | 
 | 569 |             <itemizedlist> | 
 | 570 |                 <listitem><para> | 
 | 571 |                     You are deploying a new application to the target and | 
 | 572 |                     the recipe you used to build the application had | 
 | 573 |                     correctly defined runtime dependencies. | 
 | 574 |                     </para></listitem> | 
 | 575 |                 <listitem><para> | 
 | 576 |                     The target does not physically have the packages on which | 
 | 577 |                     the application depends installed. | 
 | 578 |                     </para></listitem> | 
 | 579 |             </itemizedlist> | 
 | 580 |             If both of these conditions exist, your application will not | 
 | 581 |             behave as expected. | 
 | 582 |             The reason for this misbehavior is because the | 
 | 583 |             <filename>devtool deploy-target</filename> command does not deploy | 
 | 584 |             the packages (e.g. libraries) on which your new application | 
 | 585 |             depends. | 
 | 586 |             The assumption is that the packages are already on the target. | 
 | 587 |             Consequently, when a runtime call is made in the application | 
 | 588 |             for a dependent function (e.g. a library call), the function | 
 | 589 |             cannot be found. | 
 | 590 |         </para> | 
 | 591 |  | 
 | 592 |         <para> | 
 | 593 |             To be sure you have all the dependencies local to the target, you | 
 | 594 |             need to be sure that the packages are pre-deployed (installed) | 
 | 595 |             on the target before attempting to run your application. | 
 | 596 |         </para> | 
| Patrick Williams | c0f7c04 | 2017-02-23 20:41:17 -0600 | [diff] [blame] | 597 |     </section> | 
 | 598 |  | 
 | 599 |     <section id='devtool-removing-your-software-from-the-target-machine'> | 
 | 600 |         <title>Removing Your Software from the Target Machine</title> | 
 | 601 |  | 
 | 602 |         <para> | 
 | 603 |             Use the <filename>devtool undeploy-target</filename> command to | 
 | 604 |             remove deployed build output from the target machine. | 
 | 605 |             For the <filename>devtool undeploy-target</filename> command to | 
 | 606 |             work, you must have previously used the | 
| Brad Bishop | d7bf8c1 | 2018-02-25 22:55:05 -0500 | [diff] [blame] | 607 |             <link linkend='devtool-deploying-your-software-on-the-target-machine'><filename>devtool deploy-target</filename></link> | 
| Patrick Williams | c0f7c04 | 2017-02-23 20:41:17 -0600 | [diff] [blame] | 608 |             command. | 
 | 609 |             <literallayout class='monospaced'> | 
 | 610 |      $ devtool undeploy-target <replaceable>recipe</replaceable> <replaceable>target</replaceable> | 
 | 611 |             </literallayout> | 
 | 612 |             The <replaceable>target</replaceable> is the address of the | 
 | 613 |             target machine, which must be running an SSH server (i.e. | 
 | 614 |             <filename>user@hostname</filename>). | 
 | 615 |         </para> | 
 | 616 |     </section> | 
 | 617 |  | 
 | 618 |     <section id='devtool-creating-the-workspace'> | 
 | 619 |         <title>Creating the Workspace Layer in an Alternative Location</title> | 
 | 620 |  | 
 | 621 |         <para> | 
 | 622 |             Use the <filename>devtool create-workspace</filename> command to | 
 | 623 |             create a new workspace layer in your | 
| Brad Bishop | d7bf8c1 | 2018-02-25 22:55:05 -0500 | [diff] [blame] | 624 |             <link linkend='build-directory'>Build Directory</link>. | 
| Patrick Williams | c0f7c04 | 2017-02-23 20:41:17 -0600 | [diff] [blame] | 625 |             When you create a new workspace layer, it is populated with the | 
 | 626 |             <filename>README</filename> file and the | 
 | 627 |             <filename>conf</filename> directory only. | 
 | 628 |         </para> | 
 | 629 |  | 
 | 630 |         <para> | 
 | 631 |             The following example creates a new workspace layer in your | 
 | 632 |             current working and by default names the workspace layer | 
 | 633 |             "workspace": | 
 | 634 |             <literallayout class='monospaced'> | 
 | 635 |      $ devtool create-workspace | 
 | 636 |             </literallayout> | 
 | 637 |         </para> | 
 | 638 |  | 
 | 639 |         <para> | 
 | 640 |             You can create a workspace layer anywhere by supplying | 
 | 641 |             a pathname with the command. | 
 | 642 |             The following command creates a new workspace layer named | 
 | 643 |             "new-workspace": | 
 | 644 |             <literallayout class='monospaced'> | 
 | 645 |      $ devtool create-workspace /home/scottrif/new-workspace | 
 | 646 |             </literallayout> | 
 | 647 |         </para> | 
 | 648 |     </section> | 
 | 649 |  | 
 | 650 |     <section id='devtool-get-the-status-of-the-recipes-in-your-workspace'> | 
 | 651 |         <title>Get the Status of the Recipes in Your Workspace</title> | 
 | 652 |  | 
 | 653 |         <para> | 
 | 654 |             Use the <filename>devtool status</filename> command to | 
 | 655 |             list the recipes currently in your workspace. | 
 | 656 |             Information includes the paths to their respective | 
 | 657 |             external source trees. | 
 | 658 |         </para> | 
 | 659 |  | 
 | 660 |         <para> | 
 | 661 |             The <filename>devtool status</filename> command has no | 
 | 662 |             command-line options: | 
 | 663 |             <literallayout class='monospaced'> | 
 | 664 |      $ devtool status | 
 | 665 |             </literallayout> | 
 | 666 |             Following is sample output after using | 
| Brad Bishop | d7bf8c1 | 2018-02-25 22:55:05 -0500 | [diff] [blame] | 667 |             <link linkend='devtool-adding-a-new-recipe-to-the-workspace'><filename>devtool add</filename></link> | 
| Patrick Williams | c0f7c04 | 2017-02-23 20:41:17 -0600 | [diff] [blame] | 668 |             to create and add the <filename>mtr_0.86.bb</filename> recipe | 
 | 669 |             to the <filename>workspace</filename> directory: | 
 | 670 |             <literallayout class='monospaced'> | 
 | 671 |      $ devtool status | 
 | 672 |      mtr: /home/scottrif/poky/build/workspace/sources/mtr (/home/scottrif/poky/build/workspace/recipes/mtr/mtr_0.86.bb) | 
 | 673 |      $ | 
 | 674 |             </literallayout> | 
 | 675 |         </para> | 
 | 676 |     </section> | 
 | 677 |  | 
 | 678 |     <section id='devtool-search-for-available-target-recipes'> | 
 | 679 |         <title>Search for Available Target Recipes</title> | 
 | 680 |  | 
 | 681 |         <para> | 
 | 682 |             Use the <filename>devtool search</filename> command to | 
 | 683 |             search for available target recipes. | 
 | 684 |             The command matches the recipe name, package name, | 
 | 685 |             description, and installed files. | 
 | 686 |             The command displays the recipe name as a result of a | 
 | 687 |             match. | 
 | 688 |         </para> | 
 | 689 |  | 
 | 690 |         <para> | 
 | 691 |             When you use the <filename>devtool search</filename> command, | 
 | 692 |             you must supply a <replaceable>keyword</replaceable>. | 
 | 693 |             The command uses the <replaceable>keyword</replaceable> when | 
 | 694 |             searching for a match. | 
 | 695 |         </para> | 
 | 696 |     </section> | 
 | 697 | </chapter> | 
 | 698 | <!-- | 
 | 699 | vim: expandtab tw=80 ts=4 | 
 | 700 | --> |