Прежде всего, я знаю, что этот вопрос уже задавался, так как каждый начинающий 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, даже если этот модуль изменился.
Как я могу это исправить?
Каждая помощь очень ценится!