如何使用更新的模块在Yocto中重建图像

时间:2019-06-23 17:39:33

标签: linux yocto bitbake

首先,我知道这个问题已经问世,因为每个Yocto Beginner迟早都会遇到这个问题,但是提供的解决方案对我不起作用。

我正在使用Yocto构建mlinux映像,并且添加了三个软件包。 其中两个是由multitech提供的,另一个(lora-gateway-bridge)是来自git的。 由于配方未复制配置文件,因此我更改了.init部分并尝试重建项目。

但是映像安装的初始化文件没有更改。

我尝试重建配方(bitbake lora-gateway-bridge),然后再重建映像(bitbake mlinux-base-image)。 然后我在这里阅读另一个问题并尝试:

bitbake lora-gateway-bridge -c clean -f
and
bitbake lora-gateway-bridge -c cleanstate -f
and afterwards
bitbake mlinux-base-image

这是映像食谱的一部分,其中安装了软件包:

IMAGE_INSTALL += "lora-gateway"
IMAGE_INSTALL += "lora-packet-forwarder"
IMAGE_INSTALL += "lora-gateway-bridge"

食谱本身的来源是:https://github.com/brocaar/lora-gateway-os/tree/master/layers/loraserver/meta-loraserver/recipes-loraserver/lora-gateway-bridge

该包装的已编辑食谱为:

DESCRIPTION = "LoRa Gateway Bridge"
HOMEPAGE = "https://www.loraserver.io/"
PRIORITY = "optional"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=5301050fd7cd58850085239d559297be"
SRC_URI = "https://artifacts.loraserver.io/downloads/lora-gateway-bridge/lora-gateway-bridge_${PV}_linux_armv5.tar.gz \
           file://lora-gateway-bridge.toml \
           file://lora-gateway-bridge.init \
"
SRC_URI[md5sum] = "e7700cd481eb1c6545ae5b4bf51379cd"
SRC_URI[sha256sum] = "4ebe707b634087951f6f99a6e1a3ffe65ff1f8bcd43ebf66e83776d3c6f5248d"
PR = "r1"

LORA_GATEWAY_BRIDGE_DIR = "/opt/lora-gateway-bridge"

S = "${WORKDIR}"

do_install() {
    install -d ${D}${LORA_GATEWAY_BRIDGE_DIR}
    install -m 755 lora-gateway-bridge ${D}${LORA_GATEWAY_BRIDGE_DIR}/

    #install -d ${D}/var/config/lora-gateway-bridge
    #install -m 0640 ${WORKDIR}/lora-gateway-bridge.toml ${D}/var/config/lora-gateway-bridge/lora-gateway-bridge.toml

    install -m 755 ${WORKDIR}/lora-gateway-bridge.toml ${D}${LORA_GATEWAY_BRIDGE_DIR}/

    install -d ${D}${sysconfdir}/init.d
    install -m 0755 ${WORKDIR}/lora-gateway-bridge.init ${D}${sysconfdir}/init.d/lora-gateway-bridge
}

FILES_${PN} += "${LORA_GATEWAY_BRIDGE_DIR}"
FILES_${PN}-dbg += "${LORA_GATEWAY_BRIDGE_DIR}/.debug"


CONFFILES_${PN} += "/var/config/lora-gateway-bridge/lora-gateway-bridge.toml"
#CONFFILES_${PN} += "/etc/lora/lora-gateway-bridge.toml"

所以我只更改了.toml文件的文件夹。 我真正更改过的部分是 .init脚本

#!/usr/bin/env bash

DESC="LoRa Gateway Bridge"
NAME=lora-gateway-bridge
DAEMON=/opt/$NAME/$NAME
PID_FILE=/var/run/$NAME.pid
OPT_CONF_DIR=/opt/$Name
CONFIG_DIR=/var/config/$NAME
CONFIG_FILE=/var/config/$NAME/$NAME.toml


function do_start {
    OPT_CONF_FILE=$OPT_CONF_DIR/lora-gateway-bridge.toml
    if ! [ -f $CONFIG_FILE ]; then
        echo "No Config-Files found, Copying ..."
        mkdir -p $CONFIG_DIR
        cp $OPT_CONF_FILE $CONFIG_FILE
    fi
    start-stop-daemon \
        --start \
        --background \
        --make-pidfile --pidfile "$PID_FILE" \
        --exec $DAEMON -- --config $CONFIG_FILE
}

function do_stop {
    start-stop-daemon \
        --stop \
        --retry=TERM/30/KILL/5 \
        --pidfile "$PID_FILE" \
        --exec "$DAEMON"
    retval="$?"
    sleep 1
    return "$retval"
}

case "$1" in
    start)
        echo "Starting $DESC"
        do_start
        ;;
    stop)
        echo "Stopping $DESC"
        do_stop
        ;;
    restart)
        echo "Restarting $DESC"
        do_stop
        case "$?" in
            0|1)
                do_start
                ;;
        esac
        ;;
    *)
        echo "Usage: $NAME {start|stop|restart}" >&2
        exit 3
        ;;
esac

可悲的是,在网关上的init.d / lora-gateway-bridge文件中,脚本始终是源代码中的旧文件(未经编辑)。

我确实更改了它,因为从未安装.toml文件(我认为是因为/ var / vonfig受保护),所以我首先将其安装在opt bin中,然后在第一次启动时将其复制。

我想既然我已经建立了该配方,yocto认为它已经完成了它的事,即使该模块发生了更改也不会重建linux-image。

我该如何解决?

我们非常感谢所有帮助!

0 个答案:

没有答案