我有一个自定义 Yocto“图像”配方,它使用 IMAGE_INSTALL += "... "
来构建图像,其中还包含 Python 3.5。不幸的是,经常使用的 /usr/bin/pdb
符号链接(symbolic link)没有创建,我的用户希望能够从命令行运行 pdb
。所以我想在图像中为此创建一个符号链接(symbolic link)。如果它在目标上运行,它将是以下命令的结果:
ln -s/usr/lib/python3.5/pdb.py/usr/bin/pdb
我知道我可以使用这种构造在图像配方中创建自定义任务:
addtask create_pdb_symlink before do_image
do_create_pdb_symlink () {
ln -s /usr/lib/python3.5/pdb.py ${D}/usr/bin/pdb
}
但是这不起作用,因为我猜测使用 ${D}
,并且我认为文件系统此时尚未上演。它会生成此错误:
DEBUG: Executing shell function do_create_pdb_symlink
ln: failed to create symbolic link
'/home/user/project/build/tmp/work/custom-linux/my-image/1.0-r0/image/usr/bin/pdb': No such file or directory
WARNING: exit code 1 from a shell command.
检查文件系统确认 /home/user/project/build/tmp/work/custom-linux/
存在,但 /home/user/project/build/tmp/work/custom-linux/my-image
没有。
该 custom-linux
目录中有一些目录,其中一个名为 rootfs
,看起来非常有用,但我不确定我的任务是否应该是在 my-image
目录下浏览。
所以我的问题是:
- 这是正确的方法吗?
- 或者我应该创建一个全新的配方来构建这个单一的符号链接(symbolic link)?
- 或者我应该创建一个
python3-core.bbappend
来完成此任务? - 或者有什么原因导致它不是由 python 配方本身创建的吗?
最佳答案
由于此符号链接(symbolic link)显然与 python3 相关,因此我建议您使用该配方的 bbappend 创建它。配方名称为 python3_(version).bb,因此要捕获所有版本,请命名 bbappend python3_%.bbappend。
这应该有效:
# Create symlink at the end of do_install
do_install_append() {
ln -sf /usr/lib/python3.5/pdb.py ${D}/usr/bin/pdb
}
# Include the symlink in the python3-debugger package
FILES_${PN}-debugger += "/usr/bin/pdb"
您还可以创建符号链接(symbolic link)作为创建整个 rootfs 的阶段,但在这种情况下我不推荐它。但是,如果您在填充整个 rootfs 时需要做一些事情,请考虑使用 ROOTFS_POSTPROCESS_COMMAND 。例如。把这个放在你的图像食谱中:
my_image_postprocess_function() {
ln -sf /usr/lib/python3.5/pdb.py ${IMAGE_ROOTFS}/usr/bin/pdb
}
ROOTFS_POSTPROCESS_COMMAND += "my_image_postprocess_function; "
关于python - Yocto:在图像配方中创建符号链接(symbolic link),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49525426/