NXP官方yocto学习(五)recipes菜谱

        菜谱被设计成构建软件包,菜谱文件名遵循惯例<packagename>_<version>-<revision>.bb,其中packagename是菜谱构建的软件包的名字。下划线(_)把版本字符串和包名分隔开来,连字符(-)把版本字符串和修订分隔开来。不要在菜谱的任何其他地方使用下划线,例如用于分隔包名的部分。连字符是被允许用于包名以及包版本的,但是对于后者,是应该被避免的。包修订一定不能包含连字符。菜谱名字的例子是:

        avahi_0.6.31.bb

        linux-yocto_3.14.bb

        wpa-supplicant_2.2.bb

        菜谱文件名的字段packagename、version和revision分别被BitBake赋值到变量PN、PV和PR。

        上面的包一般是下载对应版本的压缩包,但对于需要下载源码包且需要切换到对应的分支时,这时包是从软件配置管理(Software Configuration Management,SCM)系统的分支中获取的并且版本没有与标签关联时,有关菜谱名字的特定问题出现。

        菜谱应该被命名成<packagename>_<scm>.bb,其中scm是版本系统的名字,例如git、svn或者cvs。然后,菜谱应该显式地设置PV为PV="<version>+git${SRCREV}",其中version是最当前的发布或者标签点,并且SRCREV指向要从软件配置管理中获取的修订。

        以python-cryptoplus_git.bb为例:

require python-cryptoplus.inc

inherit setuptools

        继承指令和包含 

        当用include指令实现可选包含时,BitBake尝试定位包含文件,但是即使不能找到文件,它也会悄无声息地继续操作。相反,用required指令实现的必须包含使得BitBake以错误信息退出。

        类是带有.bbclass文件名后缀的、被放置进元数据层的classes子目录中的元数据文件。指令inherit仅仅使用类名,它是不带后缀的类文件名的基名称。它仅仅可以用在菜谱、追加文件和其他类文件中。

        python-cryptoplus.inc

DESCRIPTION = "PyCryptoPlus is an extension to the Python Crypto module"
HOMEPAGE = "https://github.com/doegox/python-cryptoplus"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=51c9a5b8457c0adeb11e1946915de2f2"

SRC_URI = "git://github.com/doegox/python-cryptoplus;protocol=http"
SRCREV = "a5a1f8aecce4ddf476b2d80b586822d9e91eeb7d"
S = "${WORKDIR}/git"


do_compile[noexec] = "1"

BBCLASSEXTEND = "native nativesdk"

        描述性元数据(Descriptive Metadata)提供关于菜谱和它构建的软件包的信息。
        ·SUMMARY(摘要):一行(最多80个字符长度),包的简短描述。
        ·DESCRIPTION(描述):扩展的(可能多行长度),包和其所提供的东西的细节描述。
        ·AUTHOR(作者):以AUTHOR="Santa Claus<[email protected]>"形式的软件包(不是菜谱)的作者的名字和邮箱地址。这可以是多个作者的列表。
        ·HOMEPAGE(主页):以http://开头的URL,软件包被托管在这里。
        ·BUGTRACKER(缺陷追踪):以http://开头的URL,指向项目的缺陷追踪系统。

        包管理器元数据

        包数据库(package database)维护的额外信息。然而,不是所有的包管理系统都支持这些设置。

        许可元数据

        这部分的元数据允许构建系统自动追踪开源许可需求。这个信息对所有包都是强制性的。

        ·LICENSE(许可):用于这个软件包的许可(或者多个许可)的名字。在大部分情况下,仅有一个许可适用,但是一些开源软件包使用多个许可。这些可以是允许包的用户从数个许可中选择一个的双许可或者是在软件包的部分授权不同的多许可。双许可是通过以管道符号(|)连接许可名字来指定的。多许可是通过以&连接许可名字来指定的。构建系统也支持复杂的逻辑许可算术,例如GLv2&(LGPLv2.1|MPL-1.1|BSD)。
        ·LIC_FILES_CHECKSUM:这个变量允许追踪对许可文件本身的变更。变量包含、许可文件以及它们各自校验和的空格分隔列表。在获取并解压了软件包的源文件后,构建系统通过对许可文件或者许可文件的部分计算校验和,以及将其与所提供校验和进行比较来验证许可。

        构建元数据

        ·PROVIDES(提供):通常用于抽象配置的一个或者多个额外包名的空格分隔列表。
        ·DEPENDS(依赖):在这个包可以被构建前必须被构建的包名的空格分隔列表。

        ·PN:包名。这个变量的值是由BitBake从菜谱文件的基名称获取的。对大部分包来说,这是正确且足够的。一些包可能需要调整这个值。例如,交叉工具链应用——例如gcc-cross,在它们的名字上被追加了目标架构。
        ·PV:包版本,它是由BitBake从菜谱文件的基名称获取的。对于除了直接从源仓库构建的包来说,这个值是正确且足够的。对于那些从软件配置管理中构建的包来说,8.1.1小节解释了如何正确设置PV。
        ·PR:包修订。默认修订是r0。在过去,BitBake要求你在每次菜谱自己已经改变了的时候增加修订以触发重新构建。然而现在,新的签名处理器计算包含函数的菜谱元数据的签名。现在,构建系统完全依赖于签名来重新构建。
        为了正确的包命名,增加PR的值可能仍然是必需的,因为其使得包管理器可以正确地为包升级维护数据库。以前,维护是通过使用PRINC变量来完成的。然而,这个方法已经证明是易于出错的,所以PRINC已经被弃用并且被PR service所替代。PR service是基于签名来计算PR的修订服务器。

        ·SRC_URI:用于从其下载源代码、补丁和其他文件的URI空格分隔列表。
        ·SRCREV:用于从源代码控制管理系统下载所用的源修订。
        ·SRCDATE:源代码日期。这个变量仅仅当源是从软件配置管理中获取而来时才适用。
        ·S:在构建环境中的、构建系统把未解压的源代码放在其中的目录位置。默认位置依赖于菜谱名和版本:${WORKDIR}/${PN}-${PV}。默认位置对于几乎所有从文件包中构建的包来说都是合适的。对于直接从软件配置管理中构建的包来说,你需要显式地设置这个变量,例如用于GIT仓库的${WORKDIR}/git。
        ·B:在构建环境中的、构建系统把在构建中创建的对象放入其中的目录位置。默认是与S相同的:${WORKDIR}/${PN}-${PV}。很多软件包是在树(in tree)中或者在位置(in location)中被构建的,把对象放在源树中。用GNU Autotools来构建包的菜谱、Linux内核和交叉工具链应用分离源和构建目录。

        ·LDFLAGS:传到链接器的选项。默认设置依赖于构建系统在构建什么:当为目标构建时,它是TARGET_LDFLAGS;当为构建主机构建时,它是BUILD_LDFLAGS;当为主机构建SDK时,它是BUILDSDK_LDFLAGS。你通常不完全覆盖这个变量而是向其增加选项。

        以android-tools-avbtool.bb为例:

inherit deploy

DESCRIPTION = "Android Verify Boot sign tool from Android external/avb"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
SRC_URI = " \
        git://android.googlesource.com/platform/external/avb;protocol=https \
        file://0001-security-boot-add-avbtool-support-hsm.patch \
        file://tmp.patch \
"
SRCREV = "c68f082d910b674f9e5ecf05ebe77432dbbfe0b6"

SRC_URI[sha256sum] = "833893127582352d05d925e36a2ba82d7837105ec8915cd82c7ba9abdddcf680"
SRC_URI[md5sum] = "1935b6e637d9413cc48115e7602dec4f"
S = "${WORKDIR}/git"

do_compile () {
}

do_install () {
}

do_deploy () {
    install -d ${DEPLOYDIR}
    install -m 755 ${S}/avbtool -t ${DEPLOYDIR}
}

addtask deploy before do_build after do_compile
[wangyb@wangyb-VirtualBox:android-tools]$ ls android-tools-avbtool
0001-security-boot-add-avbtool-support-hsm.patch  tmp.patch

        编译时源码下载位置:downloads/git2/android.googlesource.com.platform.external.avb

[wangyb@wangyb-VirtualBox:android.googlesource.com.platform.external.avb]$ ls -a
.   Android.bp  avbtool.py    .clang-format  examples  .gitignore  libavb_ab   libavb_user  METADATA                MODULE_LICENSE_BSD  OWNERS         pylintrc   test          tools
..  avbtool     boot_control  docs           .git      libavb      libavb_atx  LICENSE      MODULE_LICENSE_APACHE2  MODULE_LICENSE_MIT  PREUPLOAD.cfg  README.md  TEST_MAPPING

        使用时切换分支到:c68f082d910b674f9e5ecf05ebe77432dbbfe0b6

commit c68f082d910b674f9e5ecf05ebe77432dbbfe0b6
Author: David Zeuthen <[email protected]>
Date:   Fri Mar 31 17:22:35 2017 -0400

    avbtool: Drop dependency on Crypto.PublicKey.RSA.
    
    Apparently this is not supported by the Android builders. Instead use
    'openssl rsa' to extract the modulus, exponent, and key size. It's not
    very pretty but it works.
    
    Bug: 36809096
    Test: All unit tests pass.
    Test: Manually tested on UEFI-based bootloader.
    Change-Id: If3f363d356968dda49856aed9308db48f9daf351

猜你喜欢

转载自blog.csdn.net/TSZ0000/article/details/124165431