12 使用开发 Shell

调试某些命令,甚至只是编辑软件包时,devshell 都很有用。调用 devshell 时,会为指定目标运行截至 do_patch (含该任务)的 所有任务,随后打开新终端,并进入源码目录 ${S}。 新终端保留了所有与 OpenEmbedded 构建相关的环境变量,因此可以使用 configure、make 等命令。这些命令的执行效果与 OpenEmbedded 构建 系统执行时相同。因此,这种工作方式有助于调试构建,或准备将要使用 OpenEmbedded 构建系统构建的软件。

以下示例为名为 matchbox-desktop 的目标启动 devshell:

$ bitbake matchbox-desktop -c devshell

此命令在 OpenEmbedded 构建环境中启动带有 Shell 提示符的终端。 OE_TERMINAL 变量控制打开的 Shell 类型。

新终端具有以下配置:

  • PATH 变量包含交叉工具链。

  • pkgconfig 变量能够找到正确的 .pc 文件。

  • configure 命令能够找到 Yocto Project 站点文件及其他必要文件。

在此环境中,可以运行配置或编译命令,效果与 OpenEmbedded 构建系统本身运行 它们相同。如前所述,工作目录也会自动切换为源码目录( S )。

要在 devshell 中手动运行特定任务,请运行 ${WORKDIR}/temp 目录中对应的 run.* 脚本,例如 run.do_configure.pid。如果任务因命中共享状态缓存而跳过,可能没有 对应脚本。此时可先在 devshell 外部运行任务,以生成脚本:

$ bitbake -c task

备注

  • 执行任务的 run.* 脚本与 BitBake 执行该任务完全相同。换言之,运行 脚本就是重新执行任务,效果等同于使用 bitbake -c 命令。

  • 不带 .pid 扩展名的 run.* 文件,都是指向该文件最新版本的符号链接。

请记住,devshell 用于进入 BitBake 的任务执行环境。因此,调用所有命令时 都必须采用 BitBake 的调用方式。这意味着需要根据实际情况传入适当的交叉编译 选项等参数。

使用完 devshell 后,退出 Shell 或关闭终端窗口即可。

备注

  • 使用 devshell 时,应使用完整编译器名称,例如 arm-poky-linux-gnueabi-gcc,而不能只写 gcc。binutils、 libtool 等其他应用程序也一样。BitBake 会设置 CC 等环境 变量,帮助 make 等应用程序找到正确的工具。

  • devshell 也可以在 X11 转发等场景下使用。