如何使用bitbake为beagleboard交叉编译这个简单的程序?

Oct*_*pus 5 cross-compiling beagleboard bitbake

我想了解如何编译将在我的beagle板上运行的程序.我需要编译一些我目前在fedora中运行的复杂程序,但是理解如何使用Open Embedded和BitBake已经证明很麻烦.我认为最近对openembedded进行了一些重大更改,我的OE安装的目录结构甚至与我在网上其他地方找到的教程和操作方法都不一致.

我按照这里的指示设置了OE-Core,它给了我以下目录结构:

[user@localhost ~]$ ls oe-core -al
total 52
drwxr-xr-x   9 user user 4096 May 13 13:31 .
drwx------. 31 user user 4096 May 13 12:56 ..
drwxr-xr-x   9 user user 4096 May 10 11:52 bitbake
drwxrwxr-x   8 user user 4096 May 13 13:36 build
drwxr-xr-x   8 user user 4096 May 13 13:33 .git
-rw-r--r--   1 user user  165 May 10 11:51 .gitignore
-rw-r--r--   1 user user  545 May 10 11:51 LICENSE
drwxr-xr-x  21 user user 4096 May 10 11:51 meta
drwxr-xr-x   4 user user 4096 May 10 11:51 meta-hob
drwxr-xr-x   6 user user 4096 May 10 11:51 meta-skeleton
-rwxr-xr-x   1 user user 1592 May 10 11:51 oe-init-build-env
-rw-r--r--   1 user user  495 May 10 11:51 README
drwxr-xr-x   8 user user 4096 May 10 11:51 scripts
Run Code Online (Sandbox Code Playgroud)

我试图把它归结为一个极端简单的开始.如果我能弄清楚如何BitBake这个简单的程序,那么我将在目前所处的位置之前实现跨越式发展.

#include <stdio.h>

void main(int argc, char* argv[]) {
    printf("Hello World.\r\n");
}
Run Code Online (Sandbox Code Playgroud)

我发现OpenEmbedded网站太不成熟,无法使用.例如,我发现这个页面并没有告诉我哪些文件应该包含所显示的内容,并且在某些部分中只标记了"TODO".

因此,如果有人有使用BitBake的经验,关于如何交叉编译我的简单程序的一些指示将非常有用.我的食谱文件在哪里?如何使用bitbake调用它们?谢谢.

Gra*_*ral 5

我发现Yocto Project文档比OpenEmbedded文档更新.特别是,我建议:

我最近创建了一个简单的方法来测试一些东西,它可能对你有帮助.我把食谱放在我自己的元图层中.在您的示例中,新的元层将位于oe-core目录中(在meta,meta-skeleton等旁边).像其他人一样设置元图层.食谱的目录结构如下所示:

$ ls -al uinput-test/
drwxrwxr-x 2 me me 4096 Apr 24 09:45 files
-rwxr--r-- 1 me me  321 Apr 24 11:33 uinput-test_1.0.bb
Run Code Online (Sandbox Code Playgroud)

源代码(uinput.c)位于files目录中.配方看起来像这样:

DESCRIPTION = "uinput test"
PR = "r0"
LICENSE = "CLOSED"
RM_WORK_EXCLUDE += "uinput-test"

SRC_URI = "file://uinput.c \
          "
do_compile() {
    ${CC} ${CFLAGS} ${LDFLAGS} ${WORKDIR}/uinput.c -o uinput-test
}

do_install() {
    install -m 0755 -d ${D}${bindir}
    install -m 0755 ${S}/uinput-test ${D}${bindir}
}
Run Code Online (Sandbox Code Playgroud)


Foo*_*ooF 0

我认为查看围绕 Linux 基金会的Yocto 项目的活动可能会对此类事业有所帮助。Open Embedded 的维基百科页面是这样说的:

OpenEmbedded-Core 项目(简称 OE-Core)是 Yocto 项目与 OpenEmbedded 合并的结果。[7] 这是 OpenEmbedded 的最新版本,许多 OE-dev 配方都可以在 OE-Core 中找到。较新版本的软件包配方可能仅针对 OpenEmbedded-Core 进行移植。

看起来 OpenEmbedded(或者后来的 OpenEmbedded-core)经历了相当大的重组,这也许可以解释为什么事情与旧文档不太匹配。

Yocto 项目文档似乎更加全面和最新。Yocto 项目似乎也更加活跃。它有大公司的支持(包括Intel、TI等),质量控制似乎也有投资。对我来说,即使仍然想坚持使用 OpenEmbedded-core,这些似乎也是熟悉 Yocto 项目的充分理由。根据我多年前的记忆,OpenEmbedded 核心的范围似乎比以前受到了很大限制。

对于更复杂的应用程序开发,您可能会受益于了解和使用不同的 OE/Yocto 层。

无论如何,对于 Beagle Board 来说,Yocto 项目包含了板支持层;德州仪器 (TI) 是 Yocto 项目的成员(请参阅Yocto 项目成员列表)。如果您想为 Beagle Board 构建应用程序,我认为meta-beagle层和/或meta-ti层会很有用。您可以看到此处列出的重要公共 OE/Yocto 层: