下午好,
我正在运行一个简单的循环来检查 SD 卡是否已插入或移除,但它似乎并没有一直正常工作。
问题是,当程序以插入的 SD 卡启动时,if(f.good())语句为True。
当取出 SD 卡时,此语句为False。
但是,当重新插入 SD 卡时,该语句仍然为False。
C++ 中是否有更可靠的方法来检测 SD 卡的存在?我正在运行基于 OpenEmbedded 的 Linux Yocto。我宁愿避免使用任何外部库,并尽可能使用文件 IO 或系统调用。
谢谢。
我的循环如下所示,
while (running)
{
ifstream f("/dev/mmcblk1");
if (f.good()) {
f.close();
if (!mounted)
{
system("mount /dev/mmcblk1p1 /mnt/Storage");
mounted = true;
}
sdPresent = true;
}
else {
f.close();
sdPresent = false;
mounted = false;
}
std::this_thread::sleep_for(std::chrono::milliseconds(500));
}
Run Code Online (Sandbox Code Playgroud) 我正在开发一个使用 CMake 配置和生成的现有项目。目标是一个 ARM 设备,所以我用 Yocto/OpenEmbedded 构建了所有系统。
我设法构建了一个配方来构建 cmake 项目。它看起来像这样:
DESCRIPTION = "FANN LIB"
LICENSE = "CLOSED"
inherit cmake
SRCREV = "${AUTOREV}"
PV = "1.0"
SRC_URI = "git://github.com/libfann/fann.git;branch=master;protocol=git"
S = "${WORKDIR}/git"
BBCLASSEXTEND = "native"
FILES_${PN} += "/usr/lib/cmake/"
Run Code Online (Sandbox Code Playgroud)
在代码中有我想激活的“#ifdef DEBUG”。所以我想将 DEBUG 添加到 C/C++ Flags 中。
我发现我可以使用
EXTRA_OECMAKE += "CXXFLAGS='-DDEBUG'"
EXTRA_OECMAKE = "set(CMAKE_CXX_FLAGS "-DDEBUG")"
Run Code Online (Sandbox Code Playgroud)
但是,booth 替换了所有的 CFlags,这不是我想要的(而且它破坏了编译!)
我只想在调用编译器时添加 -DDEBUG !:-)
如何在 Yocto 配方的基于 CMake 的项目中添加预处理器定义?
我正在尝试为 mongo-cxx-driver ( https://github.com/mongodb/mongo-cxx-driver )构建一个配方。我有 libbson 和 mongo-c-driver 的工作配方,这是要求,但是当我尝试构建 mongo-cxx-driver 时,它在尝试克隆 git repo 时失败。
$ bitbake mongo-cxx-driver
| CMake Error at
/home/hme/projects/platform/yocto/poky/build/tmp/work/core2-64-poky-linux/mongo-cxx-driver/3.1.3-r0/recipe-sysroot-native/usr/share/cmake-3.8/Modules/ExternalProject.cmake:1805 (message):
| error: could not find git for clone of EP_mnmlstc_core
| Call Stack (most recent call first):
| /home/hme/projects/platform/yocto/poky/build/tmp/work/core2-64-poky-linux/mongo-cxx-driver/3.1.3-r0/recipe-sysroot-native/usr/share/cmake-3.8/Modules/ExternalProject.cmake:2560 (_ep_add_download_command)
| src/bsoncxx/third_party/CMakeLists.txt:19 (ExternalProject_Add)
|
|
| -- Configuring incomplete, errors occurred!
Run Code Online (Sandbox Code Playgroud)
食谱:
DESCRIPTION = "MongoDB C++ driver"
SECTION = "libs"
HOMEPAGE = "https://github.com/mongodb/mongo-cxx-driver"
LICENSE = "Apache-2.0"
DEPENDS = "libbson mongo-c-driver git-native"
inherit cmake pkgconfig
SRC_URI = "https://github.com/mongodb/mongo-cxx-driver/archive/r${PV}.tar.gz" …Run Code Online (Sandbox Code Playgroud) 在“嵌入式 Linux 系统与 Yocto 项目”一书中,第 4 章包含一个名为“HelloWorld - BitBake 风格”的示例。我在尝试让旧示例与“Sumo”2.5 版配合使用时遇到了很多问题。
如果您像我一样,按照本书的说明遇到的第一个错误是您复制bitbake.conf并得到:
ERROR: ParseError at /tmp/bbhello/conf/bitbake.conf:749: Could not include required file conf/abi_version.conf
Run Code Online (Sandbox Code Playgroud)
而且复制过来之后abi_version.conf,你一直发现需要移动的交叉连接的文件越来越多,然后出现了一些相对路径错误......有没有更好的方法?
我为用于安装英特尔 MKL 的定制配方进行了 bitbake。
下载 MKL 的链接: https://software.intel.com/content/www/us/en/develop/tools/mpi-library/choose-download.html
做了之后
bitbake foo
Run Code Online (Sandbox Code Playgroud)
表明:
ERROR: lmkl-1.0-r0 do_package: lmkl: Multiple shlib providers for libiomp5.so: lmkl, lmkl (used by files: /home/rsa/foo/build/tmp/work/corei7-64-poky-linux/lmkl/1.0-r0/packages-split/lmkl/opt/intel/compilers_and_libraries_2020.0.166/linux/mkl/benchmarks/hpcg/bin/xhpcg_skx)
ERROR: lmkl-1.0-r0 do_package: lmkl: Multiple shlib providers for libtbbmalloc.so.2: lmkl, lmkl (used by files: /home/rsa/foo/build/tmp/work/corei7-64-poky-linux/lmkl/1.0-r0/packages-split/lmkl/opt/intel/compilers_and_libraries_2020.0.166/linux/tbb/lib/intel64_lin/gcc4.8/libtbbmalloc_proxy.so.2)
ERROR: lmkl-1.0-r0 do_package: lmkl: Multiple shlib providers for libiomp5.so: lmkl, lmkl (used by files: /home/rsa/foo/build/tmp/work/corei7-64-poky-linux/lmkl/1.0-r0/packages-split/lmkl/opt/intel/compilers_and_libraries_2020.0.166/linux/mkl/benchmarks/hpcg/bin/xhpcg_avx)
ERROR: lmkl-1.0-r0 do_package: lmkl: Multiple shlib providers for libiomp5.so: lmkl, lmkl (used by files: /home/rsa/foo/build/tmp/work/corei7-64-poky-linux/lmkl/1.0-r0/packages-split/lmkl/opt/intel/compilers_and_libraries_2020.0.166/linux/mkl/benchmarks/hpcg/bin/xhpcg_knl)
ERROR: lmkl-1.0-r0 do_package: lmkl: Multiple shlib providers for …Run Code Online (Sandbox Code Playgroud) 我设置了yocto开发环境,在其中我可以在目标中进行 bitbake 并运行一个简单的 C++ 应用程序。现在我想尝试使用简单的 Qt 应用程序。当我执行bitbake-layers show-layers时,它在列表中显示 meta-qt5...
meta-qt5
/home/prc1cob/repo/out/salt/kawa/../../..//os/external/meta-qt5 7 元-oe
/home/prc1cob/repo/out/salt/kawa/ ../../../build/yocto/meta-openembedded/meta-oe 6
有了这个,我假设 qt5 已经存在于我的 yocto 构建中。如何编写 .bb 文件来构建一个简单的 HelloWorld qt 应用程序,如下所示...
#include <QCoreApplication>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
qDebug() << "Hello World";
return a.exec();
}Run Code Online (Sandbox Code Playgroud)
谢谢你!!
我正在使用OpenEmbedded用户手册中的“ Hello World”示例以及Yocto Project工具的Dora版本。bitbake构建工作正常,但是未在映像中安装可执行文件。基本上,我用两个配方创建了自己的meta层。一种是Autotools版本的“ Hello World”,它将自身构建并安装到映像中。第二个是“ Hello World”的Makefile版本。这就是我遇到的麻烦。
来源是您所期望的:
#include <stdio.h>
int main(int argc, char** argv)
{
printf("Hello world 2!\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
还有一个README.txt文件:
Readme file for Hello World 2.
Run Code Online (Sandbox Code Playgroud)
配方如下:
DESCRIPTION = "Hello World 2 Program"
PR = "r0"
LICENSE = "CLOSED"
RM_WORK_EXCLUDE += "hello2"
SRC_URI = "file://hello2.c \
file://README.txt"
do_compile() {
${CC} ${CFLAGS} ${LDFLAGS} ${WORKDIR}/hello2.c -o hello2
}
do_install() {
install -m 0755 -d ${D}${bindir} ${D}${docdir}/hello2
install -m 0644 ${S}/hello2 ${D}${bindir}
install -m 0644 ${WORKDIR}/README.txt ${D}${docdir}/hello2 …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个简单的bitbake配方,它将一些脚本安装到目标根文件系统中.我必须遗漏一些东西,因为我觉得我设置正确,但我不断收到错误消息:
ERROR: Function failed: do_install (see /home/mike/ULF/ulf/build-ulf/out/work/armv7ahf-vfp-neon-linux-gnueabihf/ttt/1.0-r0/temp/log.do_install.493 for further information)
ERROR: Logfile of failure stored in: /home/mike/ULF/ulf/build-ulf/out/work/armv7ahf-vfp-neon-linux-gnueabihf/ttt/1.0-r0/temp/log.do_install.493
Log data follows:
| DEBUG: Executing shell function do_install
| install: cannot stat `uim2svc.sh': No such file or directory
| ERROR: Function failed: do_install (see /home/mike/ULF/ulf/build-ulf/out/work/armv7ahf-vfp-neon-linux-gnueabihf/ttt/1.0-r0/temp/log.do_install.493 for further information)
ERROR: Task 2 (/home/mike/ULF/ulf/oe-ghmi/recipes/images/ttt.bb, do_install) failed with exit code '1'
Run Code Online (Sandbox Code Playgroud)
现在我已经阅读了local-file-fetcher上的bitbake文档,它说:
此子模块处理以file://开头的URL.您在URL中指定的文件名可以是文件的绝对路径或相对路径.如果文件名是相对的,则使用PATESPATH变量的内容的方式与使用PATH查找可执行文件的方式相同.
所以我在我的文件名,SRC_URI本地files目录中的脚本,我已经检查了构建的输出和路径指向我的脚本目录... 所以为什么我仍然得到这个错误?任何人都有关于我可能做错的想法?
这是我的完整bitbake食谱(ttt.bb):
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;md5=3f40d7994397109285ec7b81fdeb3b58"
SRC_URI = "file://uim2svc.sh"
do_install() …Run Code Online (Sandbox Code Playgroud) 我对克隆私有git仓库的内容感兴趣,因此可以通过自定义BitBake配方使用它们.我尝试从Yocto Project邮件列表中调整这种技术,并产生以下内容:
SRC_URI = "git://www.example.com/path/to/repo;protocol=https;branch=master;name=commit;user=<username>:<password>
SRCREV_commit = "9f8309bbdf0632191bec21fada2cb61a30bcf53e"
Run Code Online (Sandbox Code Playgroud)
我正在使用的密码包含左括号.我收到此错误:
/bin/sh: -c: line 0: syntax error near unexpected token `)'
Run Code Online (Sandbox Code Playgroud)
我可以以某种方式逃避这个特殊角色,或者使用其他方式克隆回购?
我正在尝试创建一个使用自动工具的相当简单的BitBake食谱,您可以在这里看到它:
SUMMARY = "an example autotools recipe"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
inherit autotools
SRC_URI = "file://${TOPDIR}/piu/geo_utilities"
S = "${TOPDIR}/piu/geo_utilities"
Run Code Online (Sandbox Code Playgroud)
使用此配方的默认程序包启动BitBake构建后, do_configure失败并显示以下内容:
configure: line 12851: syntax error near unexpected token `GLIB,'
configure: line 12851: `PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.12.3)'
Run Code Online (Sandbox Code Playgroud)
当我跑步时ldd --version,得到以下信息:ldd (GNU libc) 2.17。
我已经找到了几个类似Google Groups帖子和GitHub问题的站点,这些站点表明可以通过更新pkg-config来解决该问题。我正在运行Red Hat,所以我已经运行了sudo yum install pkgconfig它返回了pkgconfig-0.27.1-4.el7.x86_64 already installed and latest version。
(这个问题跟在后面这个问题是由回答者解决)