Linux 我是否可以从Yocto配方为不';还不存在

Linux 我是否可以从Yocto配方为不';还不存在,linux,embedded,symlink,yocto,Linux,Embedded,Symlink,Yocto,我正在运行Yocto Pyro,我正在尝试创建一个配方,创建一个指向将在运行时装入的区域的符号链接。我们正在fstab中的/var/local上安装辅助存储。我想将网络设置存储在那里,因为当我们对设备进行固件升级时,rootFS会被清除 这是我正在研究的配方 DESCRIPTION = "Create links to the persistent storage area for the network files." PRIORITY = "optional" LICENSE = "CLOS

我正在运行Yocto Pyro,我正在尝试创建一个配方,创建一个指向将在运行时装入的区域的符号链接。我们正在fstab中的/var/local上安装辅助存储。我想将网络设置存储在那里,因为当我们对设备进行固件升级时,rootFS会被清除

这是我正在研究的配方

DESCRIPTION = "Create links to the persistent storage area for the network files."
PRIORITY = "optional"
LICENSE = "CLOSED"

FILES_${PN} += "/etc /etc/systemd/network"

S = "${WORKDIR}"

do_install() {
    ln -frs /var/local/network/hostname ${D}/hostname
    ln -frs /var/local/network/eth0.network ${D}/etc/systemd/network/eth0.network
#   ln -frs /var/local/network/sysctl.conf ${D}/etc/sysctl.conf
#   ln -frs /var/local/network/iptables-config ${D}/etc/sysconfig/iptables-config
}
我得到的错误是,它无法创建符号链接

| ln: failed to create symbolic link '/home/gen-ccm-root/workdir/tools/poky/build-dev/tmp/work/armv7ahf-neon-poky-linux-gnueabi/network-links/1.0-r0/image/etc/systemd/network/eth0.network': No such file or directory
| WARNING: exit code 1 from a shell command.
| ERROR: Function failed: do_install (log file is located at /home/gen-ccm-root/workdir/tools/poky/build-dev/tmp/work/armv7ahf-neon-poky-linux-gnueabi/network-links/1.0-r0/temp/log.do_install.118559)
ERROR: Task (/home/gen-ccm-root/workdir/tools/poky/meta-markem-imaje-private-bsp/recipes-core/network-links/network-links_1.0.bb:do_install) failed with exit code '1'
NOTE: Tasks Summary: Attempted 2805 tasks of which 2796 didn't need to be rerun and 1 failed.

Summary: 1 task failed:
  /home/gen-ccm-root/workdir/tools/poky/meta-markem-imaje-private-bsp/recipes-core/network-links/network-links_1.0.bb:do_install


有没有办法建立链接?或者我是否需要采取不同的方法在启动时读取文件并将其复制到或类似的东西中?我相信安全团队最终会希望使根文件系统成为只读的,因此在启动时最好使用链接来修改RootFS。

您可能希望通过bbappend扩展基本文件配方来实现这一点

base-files_uz%.bbappend

do_install_append() {

...

}

我们要做的是在图像文件夹中的.inc文件中创建postinstall函数

ROOTFS_POSTPROCESS_COMMAND += " symlinkfunction "

symlinkfunction() {
ln -s /path/on/target "${IMAGE_ROOTFS}/path/in/rootfs"
}

在创建目标的任何映像文件中使用.inc文件,它将使用新的符号链接更新目标根文件系统。

这并不能解决问题,我仍然会遇到相同的错误,因为在设备首次启动之前不会安装/var/local/area。我倾向于这一点是不可能的。我必须在运行时编写一个脚本,在这里使用
-r
参数不是一个好主意,因为
${D}
是yocto(配方工作文件夹中的/image文件夹)中的临时路径。
image/
文件夹到
/
的距离与目标系统上的
/
/var
的距离不匹配,因此目标系统上的链接会断开。出现显示的错误是因为您需要先创建
/etc/ystemd/network/
,然后才能在其中创建链接(使用
install-d
)。