我在使用依赖i2c工具的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目录中, header 和libi2c存在,如以下查找命令所确定:
/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的新手,所以请放轻松。

最佳答案

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

关于c++ - Yocto bitbake与SDK sysroot冲突,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58897751/

10-15 05:23