首先,我知道这个问题已经问世,因为每个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"
该包装的已编辑食谱为:
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。
我该如何解决?
我们非常感谢所有帮助!