如何将 python3-flask 工程转成 yocto 镜像?

How to transfer python3-flask project into yocto image?

我是 yocto 的初学者。到目前为止,我已经了解了如何构建 yocto 图像并通过 layers.openembedded 添加食谱。但我无法弄清楚例如我在我的电脑上开发了一个 python3-flask 项目,然后我想 copy/transfer 那个项目到我的 yocto os 中。我怎样才能做到这一点?我是否必须制作该项目的可执行文件,然后使用一些配方将其复制到我的 os 中?

我看过这个食谱,但我不明白 LIC_FILES_CHSUM 是什么意思以及从哪里得到它?我应该把这些文件放在哪里,例如setup.py?在与我的 .bb 文件相同的目录中? 以及在 yocto os?

中复制我的项目的地方
DESCRIPTION = "Simple Python setuptools hello world application"
SECTION = "examples"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"

SRC_URI = "file://setup.py \
           file://python-helloworld.py \
           file://helloworld/__init__.py \
           file://helloworld/main.py"

S = "${WORKDIR}"

inherit setuptools

do_install_append () {
    install -d ${D}${bindir}
    install -m 0755 python-helloworld.py ${D}${bindir}
}

LICENSE 字段显然应该与您为软件选择的许可证相对应。 LIC_FILES_CHKSUM 需要一个文件,该文件包含 LICENSE 中定义的实际许可证及其 md5sum 作为“参数”传递。这只是一种监控许可证是否发生变化的方法。然后它的 md5sum 发生变化,然后配方无法构建,因为许可证可能已更改并需要维护者的注意。

THISDIR 是包含食谱的目录(不完全是,但对于示例来说已经足够),SRC_URI 中的文件将在 FILESPATH 中搜索(第一个 ${THISDIR}/<recipe_name>-<recipe_version> 然后 ${THISDIR}/<recipe-name> 然后 ${THISDIR}/files)。因此,您需要将 SRC_URI 中声明的文件(以 file:// 开头的文件)放入其中一个目录中。

实际上最好将您的软件放在某个 git 仓库中。这更好地遵循了将 SW 源代码与您的构建系统分开的理念(如果您决定以后要使用不同的构建系统怎么办?)。

当您想知道某些变量或任务在做什么时,我强烈建议您在 mega 手册中查找它们:https://www.yoctoproject.org/docs/latest/mega-manual/mega-manual.html。这作为“字典”非常有效。文档很棒,虽然又密又长,但作为初学者很少找不到您想要的东西。

更新

LIC_FILES_CHKSUM 可以在源目录的 yocto meta/files/common-licenses 中找到。您也可以获取自己的许可证并使用 md5sum 文件名检查校验和并将其复制到 bb 文件。如果要分发您的软件,强烈建议在源代码中的某处提及许可证。因此,最好使用 LIC_FILES_CHKSUM 中的那部分代码,而不是使用 ${COMMON_LICENSE_DIR} 中的代码,这样人们就会知道您的项目是否以及何时发生许可证更改。

下面的配方工作正常,你可以在 /usr/bin 目录中找到你的应用程序。

DESCRIPTION = "Simple Python setuptools  application"
SECTION = "examples"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"

SRC_URI = "file://setup.py \
        file://packagetest.py \
        file://example/__init__.py \
        file://example/file1.py \
        file://example/file2.py \
        file://example/file3.py"

S = "${WORKDIR}"

inherit pypi setuptools3

do_install_append () {
    install -d ${D}${bindir}
    install -m 0755 packagetest.py ${D}${bindir}
}