我有一个.bbappend配方,我需要在我的系统中创建一个符号链接。
这就是现在的样子:
bernardo@bernardo-ThinkCentre-Edge72:~/yocto/genericx86-64-rocko-18.0.0/meta-datavision/recipes-devtools/oracle-java$ cat oracle-jse-jdk_1.7.0.bbappend
FILES_${PN} += "/lib64/ld-linux-x86-64.so.2"
do_install_append() {
install -d ${D}/lib64
ln -s ${D}/lib/ld-2.26.so ${D}/lib64/ld-linux-x86-64.so.2
}
但是,只在sysroot中创建目录/ lib64。未生成符号链接/lib64/ld-linux-x86-64.so.2。
为了正确创建这个符号链接,我应该在配方中进行哪些更改?
答案 0 :(得分:5)
最干净的解决方案是使用“ -r”标志:
do_install_append() { install -d ${D}/lib64 ln -s -r ${D}/lib/ld-2.26.so ${D}/lib64/ld-linux-x86-64.so.2 }
在gnu ln手册页中:
-r, --relative create symbolic links relative to link location
答案 1 :(得分:3)
尽量避免使用绝对路径:
do_install_append() {
install -d ${D}/lib64
cd ${D}/lib64
ln -s ../lib/ld-2.26.so ld-linux-x86-64.so.2
}
答案 2 :(得分:1)
我看了其他食谱如何在rootfs中创建链接,并且大多数似乎是这样:
ln -sf /data/etc/bluetooth/main.conf ${D}/${sysconfdir}/bluetooth/main.conf
配方中的此命令将在设备上创建以下链接:
/# ls -al /etc/bluetooth/main.conf
lrwxrwxrwx 1 root root 29 Sep 11 15:34 /etc/bluetooth/main.conf -> /data/etc/bluetooth/main.conf
在创建链接时,您使用Yocto生成的完整路径,但将其指向rootfs中的“最终”位置。
这样,您可以使用“绝对”路径,而不必更改配方中的工作目录。
答案 3 :(得分:1)
从Yocto 2.3开始,建议使用lnr
。
例如
do_install_append() {
install -d ${D}/lib64
lnr ${D}/lib/ld-2.26.so ${D}/lib64/ld-linux-x86-64.so.2
}
或者,您也可以使用inherit relative_symlinks
将所有绝对符号链接转换为相对符号链接,但这比lnr
少用。
Cf。 https://www.yoctoproject.org/docs/latest/ref-manual/ref-manual.html#migration-2.3-absolute-symlinks
答案 4 :(得分:0)
您可以这样做:
ln -s ../lib/ld-2.26.so ${D}/lib64/ld-linux-x86-64.so.2
或者如果在目标系统启动后才需要符号链接(即,它与您正在构建的其他软件包无关),您也可以 执行以下操作:
ln -s /lib/ld-2.26.so ${D}/lib64/ld-linux-x86-64.so.2
ln
并不关心您的目标是否有效或在创建符号链接时是否存在。引导目标系统(或以某种方式将此文件系统挂载到/)后,该文件将变为有效。但是确实,建议使用相对链接。
答案 5 :(得分:0)
do_install_append () {
install -d 0755 ${D}/dir
install -d 0755 ${D}/dir/subdir
cd ${D}/dir/subdir
ln -sf /source_so_the_symbilic_link <name_of_the_symbolic_link>
} FILES_${PN} += "/dir"