标签: openembedded

如何在 Linux 中的 C++ 中检测 SD 卡的存在

下午好,

我正在运行一个简单的循环来检查 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)

linux c++11 openembedded yocto

2
推荐指数
1
解决办法
5061
查看次数

如何在 Yocto 的 CMAKE projet 构建中添加预处理器定义

我正在开发一个使用 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 的项目中添加预处理器定义?

c++ recipe cmake openembedded yocto

2
推荐指数
1
解决办法
6926
查看次数

使用 cmake 的 Yocto 食谱找不到 git

我正在尝试为 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)

recipe cmake mongodb openembedded yocto

2
推荐指数
1
解决办法
1981
查看次数

如何让“HelloWorld - BitBake Style”在新版本的 Yocto 上工作?

在“嵌入式​​ 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,你一直发现需要移动的交叉连接的文件越来越多,然后出现了一些相对路径错误......有没有更好的方法?

openembedded bitbake yocto

2
推荐指数
1
解决办法
4052
查看次数

libiomp5.so 的多个 shlib 提供程序

我为用于安装英特尔 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)

openembedded yocto lib

2
推荐指数
1
解决办法
2628
查看次数

如何使用 yocto 构建简单的 qt 应用程序?

我设置了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)

谢谢你!!

qt openembedded bitbake yocto

2
推荐指数
1
解决办法
3871
查看次数

未在映像中安装Hello World Bitbake食谱

我正在使用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)

openembedded bitbake

1
推荐指数
1
解决办法
4416
查看次数

为什么不能bitbake找到并安装我的脚本?

我正在尝试编写一个简单的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)

linux recipe environment-variables openembedded bitbake

1
推荐指数
1
解决办法
5830
查看次数

如何从BitBake配方中克隆私人git仓库?

我对克隆私有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)

我可以以某种方式逃避这个特殊角色,或者使用其他方式克隆回购?

git git-clone openembedded bitbake yocto

1
推荐指数
1
解决办法
7890
查看次数

在PKG_CHECK_MODULES(GLIB,glib-2.0&gt; = 2.12.3)上配置失败

我正在尝试创建一个使用自动工具的相当简单的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

(这个问题跟在后面这个问题是由回答者解决)

glib configure openembedded bitbake yocto

1
推荐指数
1
解决办法
2219
查看次数