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 转发等场景下使用。