1

我在使用依赖于 i2c-tools 的 bitbake 构建配方时遇到问题。这似乎是由于我的食谱的 sysroot 中缺少文件。在我的一个 .cpp 文件中,我有

extern "C" {
    #include <sys/ioctl.h>
    #include <linux/i2c-dev.h>
    #include <i2c/smbus.h>
    #include <unistd.h>
    #include <fcntl.h>
    #include <string.h>
}

我已经在 /opt/fslc-x11/2.6.2 构建并安装了 Yocto 映像 SDK。我可以使用以下命令成功交叉编译我的 CMake 应用程序:

mkdir build && cd build
source /opt/fslc-x11/2.6.2/environment-setup-armv7at2hf-neon-fslc-linux-gnueabi
export QT_SELECT=qt5.11.3
cmake .. -DCMAKE_TOOLCHAIN_FILE=/opt/fslc-x11/2.6.2/sysroots/x86_64-fslcsdk-linux/usr/share/cmake/OEToolchainConfig.cmake -DOE_QMAKE_PATH_EXTERNAL_HOST_BINS=${QT_BIN_PATH}
make -j4

但是,当尝试在我的 bitbake 配方中构建相同的代码时,构建失败,说明

fatal error: i2c/smbus.h: No such file or directory

我开发这个软件已经有一段时间了,在我添加 i2c 的东西之前,bitbake 配方运行良好。

在 SDK 目录中,头文件和 libi2c 存在,由以下 find 命令确定:

/opt/fslc-x11/2.6.2$ sudo find . -name smbus.h
./sysroots/armv7at2hf-neon-fslc-linux-gnueabi/usr/src/debug/i2c-tools/4.1-r0/i2c-tools-4.1/include/i2c/smbus.h
./sysroots/armv7at2hf-neon-fslc-linux-gnueabi/usr/include/i2c/smbus.h

/opt/fslc-x11/2.6.2$ sudo find . -name libi2c*
./sysroots/armv7at2hf-neon-fslc-linux-gnueabi/usr/lib/.debug/libi2c.so.0.1.1
./sysroots/armv7at2hf-neon-fslc-linux-gnueabi/usr/lib/libi2c.so.0
./sysroots/armv7at2hf-neon-fslc-linux-gnueabi/usr/lib/libi2c.so.0.1.1
./sysroots/armv7at2hf-neon-fslc-linux-gnueabi/usr/lib/libi2c.so

但是,在配方 sysroot 中,缺少这些文件:

~/var-fslc-yocto/build_x11/tmp/work/armv7at2hf-neon-fslc-linux-gnueabi/magi/1.0-r0$ sudo find . -name libi2c*
~/var-fslc-yocto/build_x11/tmp/work/armv7at2hf-neon-fslc-linux-gnueabi/magi/1.0-r0$ sudo find . -name smbus.h

我是否需要在我的食谱的 .conf 或 .bb 文件中添加一些内容才能在我的食谱的 sysroot 中拥有这些文件?我是 Yocto/OE 的新手,所以请放轻松。

4

1 回答 1

0

我相信我已经解决了这个问题。我创建了一个最小的 .cpp 文件来实现www.kernel.org上的代码。之后,将 DEPENDS = "i2c-tools" 添加到我的配方的 .bb 文件似乎已将所有必需的依赖项添加到配方的 sysroot 中。

于 2019-11-17T17:01:46.243 回答