如何在yocto里面创建自己的recipe

Posted 不知道起个啥名“”

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在yocto里面创建自己的recipe相关的知识,希望对你有一定的参考价值。

文章目录


前言

本文介绍如何在已经存在的meta里面添加一个自己的recipe,并且在recipe里面添加源文件编译helloworld


提示:以下是本篇文章正文内容,下面案例可供参考

一、手动添加recipe

以下内容都是基于imx工程
进入到如下路径:

sources/meta-imx/meta-bsp

使用如下命令创建一个目录:

mkdir recipes-hello

这个目录就是用来存放recipe里面的.bb或者源文件、补丁什么的,也就说所谓的recipe了

二、添加源文件

这里的源文件是指.c文件Makefile
c文件主要是打印个helloworld或者其他内容
Makefile就是编译规则

进入到前面创建的 recipes-hello目录

cd recipes-hello/

创建一个hello文件夹,(一定要创建,不然会找不到后面的recipe,这是因为conf/layer.conf规定的,如下:)

在这个目录下就是可以创建.bb文件还有用来存放源文件的文件夹,比如hello文件就是用来存放源文件,如下:

进入创建的hello文件夹里面,编写c文件,Makefile文件,COPYING.MIT这个文件可以去别的工程下拷贝过来
具体源码如下:
hello.c

#include "stdio.h"
#include "stdlib.h"

int main()

        while(1)
        
                printf("我是你爹\\n");
                sleep(1);
        
        return 0;


Makefile文件

hello:hello.o
        $(CC) -o hello hello.o

hello.o: hello.c
        $(CC) -c hello.c

.PHONY : clean
clearn:
        -rm -rf *.o

hello.bb文件

DESCRIPTION = "Hello World Test"
SECTION = "examples"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
INSANE_SKIP_$PN = "ldflags"
INSANE_SKIP_$PN-dev = "ldflags"
PV = "1"
PR = "r0"

SRC_URI = "file://Makefile \\
           file://COPYING.MIT \\
           file://hello.c \\
        "

S = "$WORKDIR"

do_compile () 
    make


do_install() 
        install -d $D$bindir/
        install -m 0755 $S/hello $D$bindir/


FILES_$PN = "$bindir/hello"

其中LIC_FILES_CHKSUM = "file://COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
这个变量中的COPYING.MIT可以是其他文件,不过得使用md5sum xxx文件来生成md5=3da9cfbcb788c80a0384361b4de20420的数字替换

里面还有其他变量,大家可以自己查看官网https://docs.yoctoproject.org/2.1/ref-manual/ref-manual.html#var-DL_DIR

可以在conf/layer.conf里面添加如下IMAGE_INSTALL_append += "hello",不然会找不到生成文件

三、编译

bitbake hello

如果没有问题的话就可以编译成功,大家可以把编译好的镜像烧录到镜像,直接执行hello就可以看到执行效果,或者可以在build/tmp/work/imx6ull14x14evk-poky-linux-gnueabi/imx-image-core/1.0-r0/imx-image-core-1.0下找到

总结

本文主要讲解如何创建自己的recipe,并且执行效果
喜欢就收藏 + 关注

Yocto tips (10): Yocto hellworld 加入一个软件包

Yocto中一个软件包是放在bb文件里的,然后非常多的bb文件集成一个recipe(配方),然后很多的recipe又组成一个meta layer。因此,要加入一个包事实上就是在recipe以下加入一个bb(bitbake配置文件)。以下使用helloworld作为一个样例。

clone bb文件

首先是进入到一个recipe文件夹下,比如以下就是到了recipes-graphics:

$ pwd
/media/work/iMX6/Yocto/sources/meta-fsl-arm/recipes-graphics

然后clone Package配置与source文件夹的repo:

git clone https://github.com/tonyho/helloYocto.git

查看软件包是否已经在Yocto中

09:25 hexiongjun:imx6qsabresd_build $ bitbake -s | grep hello
hello                                                   :3-r0

确认在了以后,就能够运行编译等task了,假设有须要也能够deploy到rootfs中。这些操作能够參考我曾经的一些博客。

一个软件包的结构

使用tree能够看到,其有一个bb文件,然后当中另一个文件夹放着Makefile与source code:

技术分享


当中的bb文件内容例如以下:

DESCRIPTION = "Hello World and Zlib test"
DEPENDS = "zlib"
SECTION = "libs"
LICENSE = "MIT"
PV = "3"
PR = "r0"


SRC_URI = "           file://helloYocto.c           file://zlibtest.c           file://makefile           "


LIC_FILES_CHKSUM = "file://helloYocto.c;md5=2dac018fa193620dc085aa1402e0b346"
S = "${WORKDIR}"
do_compile () {
    make
}


do_install () {
	install -d ${D}${bindir}/
	install -m 0755 ${S}/helloYocto ${D}${bindir}/
	install -m 0755 ${S}/zlibtest ${D}${bindir}/
}


FILES_${PN} = "${bindir}/helloYocto                ${bindir}/zlibtest "


能够看到。bb文件里指定了以下几个变量的值:

  1. SRC_URI
  2. LIC_FILES_CHKSUM:这个是checksum,假设是基于版本号管理的source,那么不须要,比如git与svn
  3. FILES_$(PN):PN是Package number,指代软件版本号使用的PV与PR结合表示,即前面bitbake -s中看到的3-r0

还有两个方法,这2个方法重载了bitbake中默认方法:

  1. do_compile
  2. do_install

这两个方法。相应了Package中的compile与install task。












以上是关于如何在yocto里面创建自己的recipe的主要内容,如果未能解决你的问题,请参考以下文章

如何在 yocto 中设置系统日志?

如何在自己的 Yocto 包中访问 protoc 编译器并引用 gRPC 库

构建Yocto项目

如何管理yocto项目的meta层并在git中构建配置

如何在虚拟机中运行 YOCTO LINUX 操作系统

yocto / qemu 中的 efi 变量