我目前使用rauc
(0.1.1)更新由yocto制作的自定义发行版上的某些捆绑软件。该捆绑包来自USB设备。因此,我添加了udev规则,以便在将密钥插入设备后立即获得捆绑包。
我的钩子包含(版本A):
echo ${PATH} #/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin
echo `fw_printenv slot` #slot=A
rauc_output=`rauc install ${bundle}`
echo ${PATH} #/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin
但是在此版本中,如果通过udev启动,它将失败并显示starting fw_setenv failed: Failed to execute child process "fw_setenv" (No such file or directory)
(如果我手动启动脚本,它将起作用)。
如果我使用此版本:
echo ${PATH} #/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin
echo `fw_printenv slot` #slot=A
rauc_output=`PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin rauc install ${bundle}`
echo ${PATH} #/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin
它可以工作(手动和udev均可)
我真的不知道这里到底发生了什么。在安装之前和之后PATH都可以,但是...通过udev调用rauc时不行。此外,如果我恰好在fw_setenv
之前调用rauc
,就可以正确找到它。
在rauc中调用fw_setenv
的代码是(4b6453e8678a48aa793c41871e3bfcfdbafce881):
sub = g_subprocess_new(G_SUBPROCESS_FLAGS_NONE, &error, UBOOT_FWSETENV_NAME,
key, value, NULL);
if (!sub) {
g_warning("starting fw_setenv failed: %s", error->message);
g_clear_error(&error);
goto out;
}
g_subprocess_new
在PATH
中搜索。所以应该没关系。
有任何线索吗?