Как восстановить изображение в Yocto с обновленным модулем - PullRequest
0 голосов
/ 23 июня 2019

Прежде всего, я знаю, что этот вопрос уже задавался, так как каждый начинающий Yocto рано или поздно сталкивается с ним, но предложенные решения не сработали для меня.

Я создаю образ mlinux с помощью Yocto, и я добавил три пакета. Два из них предоставлены 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 Script :

#!/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, даже если этот модуль изменился.

Как я могу это исправить?

Каждая помощь очень ценится!

...