Python Yocto:在图像配方中创建符号链接
我有一个自定义的Yocto‘image’配方,它使用Python Yocto:在图像配方中创建符号链接,python,yocto,pdb,bitbake,rootfs,Python,Yocto,Pdb,Bitbake,Rootfs,我有一个自定义的Yocto‘image’配方,它使用image\u INSTALL+=“…”来构造映像,它也包含Python 3.5。不幸的是,经常使用的/usr/bin/pdb符号链接没有创建,我的用户希望能够从命令行运行pdb。因此,我想在图像中为此创建一个符号链接。如果在目标上运行,则将是以下命令的结果: ln-s/usr/lib/python3.5/pdb.py/usr/bin/pdb 我知道我可以用这种构造在图像配方中创建自定义任务: addtask create_pdb_symlin
image\u 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
不存在
在定制linux
目录中有一些目录,其中一个名为rootfs
,看起来非常有用,但我不确定我的任务是否应该在我的图像
目录下四处搜索
因此,我的问题是:
- 这是正确的方法吗
- 还是我应该创建一个全新的配方来构建这个符号链接
- 或者我应该创建一个
来完成这个任务吗python3 core.bbappend
- 或者这不是由python配方本身创建的原因
# 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"
您还可以创建symlink作为创建整个rootfs的阶段,但在这种情况下,我不推荐使用它。但是,如果在填充整个rootfs时需要做一些事情,请考虑使用。例如,把这个放在你的图像配方中:
my_image_postprocess_function() {
ln -sf /usr/lib/python3.5/pdb.py ${IMAGE_ROOTFS}/usr/bin/pdb
}
ROOTFS_POSTPROCESS_COMMAND += "my_image_postprocess_function; "
Erik Botös可能是最好的方法,但是我想记录下我自己的发现,以防它帮助其他人尝试做类似的事情(在图像配方中创建一个符号链接,尽管可能不使用这个特定的符号链接)
在我的图像配方中(我在自定义层中将其称为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\u ROOTFS
(我通过搜索bitbake-e
的输出找到了它),以及任务的顺序:符号链接创建必须在do\u ROOTFS
之后进行,否则${IMAGE\u ROOTFS}
中没有任何内容,但显然,在创建任何图像之前,都需要将其包括在内
但是在这种情况下,我同意在python3配方上添加bbappend更合适。请注意,创建绝对路径链接时会收到警告。配方文件名使用
%
,因此将捕获所有版本的python3配方,但是,符号链接创建命令中有一个3.5
——是否有方法提取%
匹配的前两部分并在命令中使用?我会做一些研究,但是我怀疑在某个地方会有一个包含%
匹配项的变量…看起来像原始Python配方定义了Python\u MAJMIN
,所以我现在就使用它。虽然PV
似乎很有希望,但不确定一般情况。