在 Bitbake 配方中创建符号链接

问题描述 投票:0回答:7

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

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

symlink yocto bitbake
7个回答
21
投票

最干净的解决方案是使用“-r”标志:

do_install_append() {
    安装-d ${D}/lib64
    ln -s -r ${D}/lib/ld-2.26.so ${D}/lib64/ld-linux-x86-64.so.2 
}

来自 gnu ln 手册页:

 -r, --relative 创建相对于链接位置的符号链接

9
投票

对于 Yocto 2.3 至 3.4:

do_install_append() {
    install -d ${D}/lib64
    lnr ${D}/lib/ld-2.26.so ${D}/lib64/ld-linux-x86-64.so.2 
}

对于 Yocto 4.0+(或者如果您的主机系统具有 coreutils 8.16+):

do_install:append() {
    install -d ${D}/lib64
    ln --relative --symbolic ${D}/lib/ld-2.26.so ${D}/lib64/ld-linux-x86-64.so.2 
}

或者,您也可以

inherit relative_symlinks
它将任何绝对符号链接转换为相对符号链接,但这比
lnr
不太常用。

比照:


8
投票

尽量避免使用绝对路径:

do_install_append() {
    install -d ${D}/lib64
    cd ${D}/lib64
    ln -s ../lib/ld-2.26.so ld-linux-x86-64.so.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 中的“最终”位置。

这样您就可以使用“绝对”路径,而不必更改配方中的工作目录。


1
投票

截至 2022 年 1 月 19 日,这似乎是让它工作的唯一方法(适应所需的文件名):

do_install() {
    install -d ${D}${libdir}
    install -m 0644 ${S}/libmine.so.0 ${D}${libdir}/
    lnr ${D}${libdir}/libmine.so.0 ${D}${libdir}/libmine.so
}

FILES_${PN} += " \
    ${libdir}/libmine.so.0 \
    ${libdir}/libmine.so \
"

FILES_SOLIBSDEV = ""
INSANE_SKIP_${PN} += "dev-so"

请注意我写的示例是完全虚构的并且在任何意义上都是绝对异端安装的方式。如果您正在构建基于 Makefile 的库,请使用 -Wl,-soname,libmine.so.1,然后在 Recipe

中使用
do_install() {
  install -d ${D}${libdir}
  oe_libinstall -so libmine ${D}${libdir}
  ...

这会自动创建:

libmine.so.1 -> libmine.so.1.0.0
libmine.so.1.0.0

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

不关心创建符号链接时您的目标是否有效或是否存在。在您启动目标系统(或以某种方式将此文件系统挂载到 /)后,它将变得有效。但确实,建议使用相对链接。

    


0
投票
	
© www.soinside.com 2019 - 2024. All rights reserved.