When debugging certain commands or even when just editing packages,
devshell
can be a useful tool.
When you invoke devshell
, all tasks up to and
including
do_patch
are run for the specified target.
Then, a new terminal is opened and you are placed in
${
S
}
,
the source directory.
In the new terminal, all the OpenEmbedded build-related environment variables are
still defined so you can use commands such as configure
and
make
.
The commands execute just as if the OpenEmbedded build system were executing them.
Consequently, working this way can be helpful when debugging a build or preparing
software to be used with the OpenEmbedded build system.
Following is an example that uses devshell
on a target named
matchbox-desktop
:
$ bitbake matchbox-desktop -c devshell
This command spawns a terminal with a shell prompt within the OpenEmbedded build environment.
The OE_TERMINAL
variable controls what type of shell is opened.
For spawned terminals, the following occurs:
The PATH
variable includes the
cross-toolchain.
The pkgconfig
variables find the correct
.pc
files.
The configure
command finds the
Yocto Project site files as well as any other necessary files.
Within this environment, you can run configure or compile
commands as if they were being run by
the OpenEmbedded build system itself.
As noted earlier, the working directory also automatically changes to the
Source Directory (S
).
To manually run a specific task using devshell
,
run the corresponding run.*
script in
the
${
WORKDIR
}/temp
directory (e.g.,
run.do_configure.
pid
).
If a task's script does not exist, which would be the case if the task was
skipped by way of the sstate cache, you can create the task by first running
it outside of the devshell
:
$ bitbake -c task
Execution of a task's run.*
script and BitBake's execution of a task are identical.
In other words, running the script re-runs the task
just as it would be run using the
bitbake -c
command.
Any run.*
file that does not
have a .pid
extension is a
symbolic link (symlink) to the most recent version of that
file.
Remember, that the devshell
is a mechanism that allows
you to get into the BitBake task execution environment.
And as such, all commands must be called just as BitBake would call them.
That means you need to provide the appropriate options for
cross-compilation and so forth as applicable.
When you are finished using devshell
, exit the shell
or close the terminal window.
It is worth remembering that when using devshell
you need to use the full compiler name such as arm-poky-linux-gnueabi-gcc
instead of just using gcc
.
The same applies to other applications such as binutils
,
libtool
and so forth.
BitBake sets up environment variables such as CC
to assist applications, such as make
to find the correct tools.
It is also worth noting that devshell
still works over
X11 forwarding and similar situations.