2012-08-29 26 views
3

我正在使用linux開發嵌入式應用程序。我有一個HOST Linux發行版(Fedora)和一個TARGET Linux發行版(不知道它是什麼,但它沒有關係)。創建供其他Linux實例使用的符號鏈接

TARGET文件系統是HOST文件系統中的文件夾。例如,TARGET通過nfs從HOST文件系統上的/ home/paul/target/rootfs啓動,其中通常是linux文件結構。

我正在向目標添加一個守護程序。我在HOST上交叉編譯它,並使用make target(make install)將文件複製到TARGET文件系統中,並設置守護進程運行。我複製

  • 守護程序二進制
  • 一些庫&一個啓動腳本
  • 一些符號鏈接(符號鏈接),方便守護

的汽車發動正是這些後來的那給我的問題。爲了在啓動時自動啓動,我需要在/etc/rc.d/rc0.d到rc6.d中的TARGET fs中創建符號鏈接,它指向我的啓動腳本/etc/rc.d/init/d/MDNS。

問題是我需要在HOST機器上創建這些符號鏈接,但是可以使用TARGET。所以他們不能指向HOST機器看到的完整路徑,他們需要指向目標運行時看到的路徑。

因此,例如

我需要創建/home/paul/target/rootfs/etc/rc0.d一個符號,但符號連接需要調用K16mdns並指向/etc/init.d/中mdns not /home/paul/target/rootfs/etc/init.d/mdns

如何使用ln命令來執行此操作?我需要爲ln指定3件事(除-s標誌外): - 鏈接文件名,鏈接目標和創建鏈接的目錄。我在ln手冊頁中沒有看到這個組合。

它似乎總是在主機上掛載/etc/rc.d目錄,或者在目標fs中使用僅與HOST相關的路徑創建符號鏈接,這些路徑明顯失敗(目標沒有路徑/ home /paul/target/rootfs/etc/init.d/mdns)。

當我在TARGET命令行上手動創建符號鏈接時,它一切都很好,但顯然這不是一個實際的解決方案。

預先感謝您。

回答

6

符號鏈接時應使用相對路徑,例如

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

作爲一個必然結果,相對符號鏈接使您能夠在主機和目標上使用它們。如果你願意,你可以使用絕對鏈接,但是在主機上解引用它們不會做「正確的事情」,所以你必須相應地調整你的過程,也許通過使用'chroot'來做某些事情。 – twalberg

+1

要擴展@ twalberg的評論,您可以在主機上使用'ln -s /etc/init.d/mdns/home/paul/target/rootfs/etc/rc0.d/K16mdns'創建一個絕對符號鏈接會指向主機文件系統上可能不存在的東西,但是當目標文件系統以root身份掛載時,它將指向正確的位置。 – caf

+0

非常好的答案謝謝你們,正是我需要的。我注意到我的目標fs中有一些其他的相關符號鏈接。 –