在bitbake配方中创建符号链接

时间:2018-01-09 11:50:23

标签: symlink yocto bitbake

我有一个.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。

为了正确创建这个符号链接,我应该在配方中进行哪些更改?

6 个答案:

答案 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"