如何在yocto中建立Hello World食谱

时间:2019-12-17 06:55:19

标签: c cross-compiling yocto bitbake openembedded

  1. C文件

    int main() {
    printf("Hello, World!\n");
    return 0;
    } 
  1. helloworld.bb
DESCRIPTION = "Recipe created by bitbake-layers"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"


SRC_URI = "file://${BSPDIR}/poky/build-microchip/my_layer/recipes-example/helloworld/helloworld/helloworld.c"

S = "/home/user/my_dir/poky/build-microchip/conf"

do_compile() {
        ${CC} helloworld.c  -o helloworld
}

do_install() {
        install -d ${D}${bindir}
        install -m 0755 helloworld ${D}${bindir}
} 
  1. 运行命令

bitbake helloworld

错误 找不到do_compile()块helloworld.c文件中的错误

  1. 文件树
    build-microchip/my_layer/recipes-examples/
    └── helloworld
        ├── helloworld
        │   └── helloworld.c
        └── helloworld.bb

2个目录,2个文件

2 个答案:

答案 0 :(得分:1)

SRC_URI中使用绝对路径是很不常见的。

对于位于helloworld_0.1.bb的名为build-microchip/my_layer/recipes-examples/helloworld/的食谱,默认情况下(并按顺序)在以下目录之一(SRC_URI [ 1])用于您的食谱:

  1. FILESPATH
  2. build-microchip/my_layer/recipes-examples/helloworld/helloworld-0.1
  3. build-microchip/my_layer/recipes-examples/helloworld/helloworld

因此,您实际上不需要传递任何目录名称,Yocto会自己找到它。您只需将与上述路径之一相对的路径 relative 传递到build-microchip/my_layer/recipes-examples/helloworld/files

如果要使用食谱当前目录之外的文件,通常必须继承SRC_URI类(这样做不是一个好主意)。除非是bbappends,否则您使用externalsrc向列表添加另一个路径,这会将FILESEXTRAPATHS_prepend := "${THISDIR}/<otherdir>"放在上面列表的第一位。

请注意,可以包含${THISDIR}/<otherdir> [2]的内容的另外一层“抽象”。如有疑问,请始终查看食谱FILESOVERRIDES中的log.do_fetch,它将为您提供查找文件时所遍历的所有路径以及遍历它们的顺序。

WORKDIR应该适合您。

我非常确定SRC_URI = "file://helloworld.c"的设置没有达到Yocto的期望。 S [3]是S任务之后Yocto的来源目录。这是Yocto设置的临时目录。它通常以do_unpack开头,这是给定配方的临时目录。仅在本地源的情况下,请设置${WORKDIR},因为取自S = "${WORKDIR}"的本地文件(以SRC_URI开头的本地文件)被放置在file://中。默认情况下,它设置为${WORKDIR}

${WORKDIR}/<recipename-recipeversion>任务在do_compile中运行,该任务默认情况下设置为B,在配方中设置错误。这就是为什么找不到您的文件的原因。[4]

TL; DR:

${S}

[1] https://www.yoctoproject.org/docs/current/mega-manual/mega-manual.html#var-FILESPATH

[2] https://www.yoctoproject.org/docs/current/mega-manual/mega-manual.html#var-FILESOVERRIDES

[3] https://www.yoctoproject.org/docs/current/mega-manual/mega-manual.html#var-S

[4] https://www.yoctoproject.org/docs/current/mega-manual/mega-manual.html#ref-tasks-compile

答案 1 :(得分:0)

您可以将.c文件放在食谱的子文件夹中,例如

sources/poky/build-microchip/my_layer/recipes-example
└── helloworld
    ├── files
    │   └── helloworld.c
    └── helloworld.bb

并修改配方

SRC_URI = "file://helloworld.c"

为配方调用时,Bitbake包含一个默认文件夹列表,用于在其中查找文件,例如files子目录。

通过这种方式,配方可移植,并且可以确保找到文件。