【问题标题】:Creating a symbolic link for use by another Linux instance创建符号链接以供另一个 Linux 实例使用
【发布时间】:2023-03-14 15:25:01
【问题描述】:

我正在使用 linux 开发嵌入式应用程序。我有一个 HOST linux 发行版(fedora)和一个 TARGET linux 发行版(不确定它是什么,但没关系)。

TARGET 文件系统是 HOST 文件系统中的一个文件夹。例如,TARGET 通过 nfs 从 HOST 文件系统上的 /home/paul/target/rootfs 引导,其中是通常的 linux 文件结构。

我正在向目标添加一个守护程序。我在 HOST 上交叉编译它并使用 make 目标(make install)将文件复制到 TARGET 文件系统并设置守护程序以运行。我复制

  • 守护进程二进制文件
  • 一些库和启动脚本
  • 一些符号链接(symlinks)有助于自动启动守护进程

正是后者给我带来了问题。为了在启动时自动启动,我需要在 /etc/rc.d/rc0.d 的 TARGET fs 中创建到 rc6.d 的符号链接,它指向我的启动脚本 /etc/rc.d/init/d /mdns。

问题是我需要在主机上创建这些符号链接,但供目标使用。所以它们不能指向 HOST 机器看到的完整路径,它们需要指向 TARGET 运行时看到的路径。

例如

我需要在 /home/paul/target/rootfs/etc/rc0.d 中创建一个符号链接,但符号链接需要称为 K16mdns 并指向 /etc/init.d/mdns 而不是 /home/paul/target /rootfs/etc/init.d/mdns

如何使用 ln 命令来执行此操作?我需要为 ln 指定 3 件事(除了 -s 标志):- 链接文件名、链接目标和创建链接的目录。我在 ln 手册页中没有看到这种组合。

它似乎总是最终要么弄乱主机上的 /etc/rc.d 目录,要么使用仅与主机相关的路径在目标 fs 中创建符号链接,这显然失败了(目标没有路径 /home/保罗/目标/rootfs/etc/init.d/mdns)。

当我在 TARGETs 命令行上手动创建符号链接时,一切都很好,但显然这不是一个实用的解决方案。

提前谢谢你。

【问题讨论】:

    标签: linux embedded symlink embedded-linux


    【解决方案1】:

    符号链接时应该使用相对路径,例如

    cd /home/paul/target/rootfs/etc/init.d
    ln -s mndns ../rc0.d/K16mdns
    

    【讨论】:

    • 由此推论,相对符号链接使您能够在主机和目标上使用它们。您可以根据需要使用绝对链接,但需要注意的是,在主机上取消引用它们不会做“正确的事情”,因此您必须相应地调整您的流程,也许通过使用 chroot 来处理某些事情。跨度>
    • 要扩展@twalberg 的评论,您可以使用ln -s /etc/init.d/mdns /home/paul/target/rootfs/etc/rc0.d/K16mdns 创建一个绝对符号链接 - 在主机上它会指向主机文件系统上可能不存在的东西,但是当目标文件系统作为根挂载,它将指向正确的位置。
    • 很好的答案谢谢大家,正是我所需要的。我注意到我的目标 fs 中有一些其他相关符号链接。
    猜你喜欢
    • 2019-03-31
    • 2021-12-19
    • 1970-01-01
    • 2023-03-14
    • 2011-06-09
    • 1970-01-01
    • 2019-03-26
    • 2019-04-18
    • 2013-07-29
    相关资源
    最近更新 更多