在 bitbake 配方中创建符号 link
create symbolic link in bitbake recipe
我有一个 .bbappend 配方,我需要在我的系统中创建一个符号 link。
这是现在的样子:
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。未生成 symlink /lib64/ld-linux-x86-64.so.2。
为了正确创建此 symlink,我应该对我的食谱进行哪些更改?
尽量避免使用绝对路径:
do_install_append() {
install -d ${D}/lib64
cd ${D}/lib64
ln -s ../lib/ld-2.26.so ld-linux-x86-64.so.2
}
最干净的解决方案是使用“-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
我查看了其他方法是如何在 rootfs 中创建 links 的,大多数方法似乎都是这样做的:
ln -sf /data/etc/bluetooth/main.conf ${D}/${sysconfdir}/bluetooth/main.conf
配方中的此命令将在设备上创建以下 link:
/# ls -al /etc/bluetooth/main.conf
lrwxrwxrwx 1 root root 29 Sep 11 15:34 /etc/bluetooth/main.conf -> /data/etc/bluetooth/main.conf
您在创建 link 时使用 Yocto 生成的完整路径,但您使其指向 rootfs 中的 "final" 位置。
这样您就可以使用 "absolute" 路径,而不必更改配方中的工作目录。
你可以这样做:
ln -s ../lib/ld-2.26.so ${D}/lib64/ld-linux-x86-64.so.2
或者如果你不需要符号-link直到你的目标系统已经启动(即它不是你正在构建的其他包的依赖)你可以 也做:
ln -s /lib/ld-2.26.so ${D}/lib64/ld-linux-x86-64.so.2
ln
不关心您的目标是否有效或在创建符号 -link 时存在。它将在您启动目标系统(或以某种方式将此文件系统挂载到 /)后生效。但确实,相对 link 是推荐的。
自 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
更不常用。
比照。 https://www.yoctoproject.org/docs/latest/ref-manual/ref-manual.html#migration-2.3-absolute-symlinks
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"
自 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"
我有一个 .bbappend 配方,我需要在我的系统中创建一个符号 link。
这是现在的样子:
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。未生成 symlink /lib64/ld-linux-x86-64.so.2。
为了正确创建此 symlink,我应该对我的食谱进行哪些更改?
尽量避免使用绝对路径:
do_install_append() {
install -d ${D}/lib64
cd ${D}/lib64
ln -s ../lib/ld-2.26.so ld-linux-x86-64.so.2
}
最干净的解决方案是使用“-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
我查看了其他方法是如何在 rootfs 中创建 links 的,大多数方法似乎都是这样做的:
ln -sf /data/etc/bluetooth/main.conf ${D}/${sysconfdir}/bluetooth/main.conf
配方中的此命令将在设备上创建以下 link:
/# ls -al /etc/bluetooth/main.conf
lrwxrwxrwx 1 root root 29 Sep 11 15:34 /etc/bluetooth/main.conf -> /data/etc/bluetooth/main.conf
您在创建 link 时使用 Yocto 生成的完整路径,但您使其指向 rootfs 中的 "final" 位置。
这样您就可以使用 "absolute" 路径,而不必更改配方中的工作目录。
你可以这样做:
ln -s ../lib/ld-2.26.so ${D}/lib64/ld-linux-x86-64.so.2
或者如果你不需要符号-link直到你的目标系统已经启动(即它不是你正在构建的其他包的依赖)你可以 也做:
ln -s /lib/ld-2.26.so ${D}/lib64/ld-linux-x86-64.so.2
ln
不关心您的目标是否有效或在创建符号 -link 时存在。它将在您启动目标系统(或以某种方式将此文件系统挂载到 /)后生效。但确实,相对 link 是推荐的。
自 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
更不常用。
比照。 https://www.yoctoproject.org/docs/latest/ref-manual/ref-manual.html#migration-2.3-absolute-symlinks
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"
自 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"