我有一个自定义Yocto'image'配方,使用IMAGE_INSTALL += "... "
构建图像,其中也包含Python 3.5。遗憾的是,未创建常用的/usr/bin/pdb
符号链接,我的用户希望能够从命令行运行pdb
。所以我想在图像中为此制作一个符号链接。如果它在目标上运行,则它将是此命令的结果:
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
并且看起来非常有用,但我不确定我的任务是否应该在{{1}下面戳}目录。
所以我的问题是:
my-image
来执行此任务吗?答案 0 :(得分:1)
由于这个符号链接与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"
您还可以创建符号链接作为创建整个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; "
答案 1 :(得分:0)
ErikBotö的answer可能是最好的方法,但是我想记录我发现自己的内容,以防其他人尝试做类似的事情(在图像配方中创建符号链接) ,虽然可能没有这个特定的符号链接)。
在我的图片配方(我在自定义图层中调用recipes-core/images/myimage.bb
)中,我添加了以下几行:
addtask create_pdb_symlink after do_rootfs before do_image
do_create_pdb_symlink () {
ln -s /usr/lib/python3.5/pdb.py ${IMAGE_ROOTFS}/usr/bin/pdb
}
我在这里要理解的两个关键事项是使用IMAGE_ROOTFS
(我通过搜索bitbake -e
的输出找到)和任务的顺序:符号链接创建必须在{ {1}}否则do_rootfs
中没有任何内容,但显然需要在创建任何图像之前进行包含。
但是在这种情况下,我同意在python3配方上进行bbappend更合适。