blob: be26bcffc7baa6873b3ddade609e5e11e8321602 [file] [log] [blame]
Andrew Geissler517393d2023-01-13 08:55:19 -06001.. SPDX-License-Identifier: CC-BY-SA-2.0-UK
2
3Using a Development Shell
4*************************
5
6When debugging certain commands or even when just editing packages,
7``devshell`` can be a useful tool. When you invoke ``devshell``, all
8tasks up to and including
9:ref:`ref-tasks-patch` are run for the
10specified target. Then, a new terminal is opened and you are placed in
11``${``\ :term:`S`\ ``}``, the source
12directory. In the new terminal, all the OpenEmbedded build-related
13environment variables are still defined so you can use commands such as
14``configure`` and ``make``. The commands execute just as if the
15OpenEmbedded build system were executing them. Consequently, working
16this way can be helpful when debugging a build or preparing software to
17be used with the OpenEmbedded build system.
18
Patrick Williams39653562024-03-01 08:54:02 -060019Here is an example that uses ``devshell`` on a target named
Andrew Geissler517393d2023-01-13 08:55:19 -060020``matchbox-desktop``::
21
22 $ bitbake matchbox-desktop -c devshell
23
24This command spawns a terminal with a shell prompt within the
25OpenEmbedded build environment. The
26:term:`OE_TERMINAL` variable
27controls what type of shell is opened.
28
29For spawned terminals, the following occurs:
30
31- The ``PATH`` variable includes the cross-toolchain.
32
33- The ``pkgconfig`` variables find the correct ``.pc`` files.
34
35- The ``configure`` command finds the Yocto Project site files as well
36 as any other necessary files.
37
38Within this environment, you can run configure or compile commands as if
39they were being run by the OpenEmbedded build system itself. As noted
40earlier, the working directory also automatically changes to the Source
41Directory (:term:`S`).
42
43To manually run a specific task using ``devshell``, run the
44corresponding ``run.*`` script in the
45``${``\ :term:`WORKDIR`\ ``}/temp``
46directory (e.g., ``run.do_configure.``\ `pid`). If a task's script does
47not exist, which would be the case if the task was skipped by way of the
48sstate cache, you can create the task by first running it outside of the
49``devshell``::
50
51 $ bitbake -c task
52
53.. note::
54
55 - Execution of a task's ``run.*`` script and BitBake's execution of
56 a task are identical. In other words, running the script re-runs
57 the task just as it would be run using the ``bitbake -c`` command.
58
59 - Any ``run.*`` file that does not have a ``.pid`` extension is a
60 symbolic link (symlink) to the most recent version of that file.
61
62Remember, that the ``devshell`` is a mechanism that allows you to get
63into the BitBake task execution environment. And as such, all commands
64must be called just as BitBake would call them. That means you need to
65provide the appropriate options for cross-compilation and so forth as
66applicable.
67
68When you are finished using ``devshell``, exit the shell or close the
69terminal window.
70
71.. note::
72
73 - It is worth remembering that when using ``devshell`` you need to
74 use the full compiler name such as ``arm-poky-linux-gnueabi-gcc``
75 instead of just using ``gcc``. The same applies to other
76 applications such as ``binutils``, ``libtool`` and so forth.
77 BitBake sets up environment variables such as :term:`CC` to assist
78 applications, such as ``make`` to find the correct tools.
79
80 - It is also worth noting that ``devshell`` still works over X11
81 forwarding and similar situations.
82