我在使用依赖于 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 的新手,所以请放轻松。