By: fu linux
E-mail: fulinux@sina.com
Blog: https://blog.csdn.net/fulinus
喜欢的盆友欢迎点赞和订阅!
你的喜欢就是我写作的动力!
BitBake全过程
继续上篇
do_patch任务
完成了源文件下载和拆包(或解压展开)后,bitbake后面要做的就是看看有没有patch文件,有的话就开始合上补丁文件到源码中(变量S指定的路径),对应的任务就是do_patch。参考下图:
在SRC_URI变量句子格式中,被处理的补丁文件后缀名有两种:
*.patch
- 1
或者
*.diff
- 1
FILESPATH变量
构建系统搜索补丁和文件时使用的默认目录集合。
在构建过程中,当在recipe的SRC_URI语句中查找由每个file:// URI指定的文件和补丁时,BitBake会按照指定的顺序在FILESPATH中搜索每个目录。
FILESPATH变量的默认值是在base.bbclass中定义的, 可以在meta/classes目录下找到相关的定义,例如:
FILESPATH = "${@base_set_filespath(["${FILE_DIRNAME}/${BP}", \
"${FILE_DIRNAME}/${BPN}", "${FILE_DIRNAME}/files"], d)}"
- 1
- 2
例如有个iputils项目:
build]$ devtool edit-recipe iputils
- 1
bb文件中就有引用的patches,如下:
SRC_URI = "git://github.com/iputils/iputils \
file://0001-ninfod-change-variable-name-to-avoid-colliding-with-.patch \
file://0001-ninfod-fix-systemd-Documentation-url-error.patch \
file://0001-rarpd-rdisc-Drop-PrivateUsers.patch \
file://0001-iputils-Initialize-libgcrypt.patch \
- 1
- 2
- 3
- 4
- 5
对应的补丁目录集如下:
build]$ bitbake -e iputils | grep ^FILESPATH
FILESPATH="/home/peeta/poky/meta/recipes-extended/iputils/iputils-s20190709/poky:/home/peeta/poky/meta/recipes-extended/iputils/iputils/poky:/home/peeta/poky/meta/recipes-extended/iputils/files/poky:/home/peeta/poky/meta/recipes-extended/iputils/iputils-s20190709/qemux86-64:/home/peeta/poky/meta/recipes-extended/iputils/iputils/qemux86-64:/home/peeta/poky/meta/recipes-extended/iputils/files/qemux86-64:/home/peeta/poky/meta/recipes-extended/iputils/iputils-s20190709/qemuall:/home/peeta/poky/meta/recipes-extended/iputils/iputils/qemuall:/home/peeta/poky/meta/recipes-extended/iputils/files/qemuall:/home/peeta/poky/meta/recipes-extended/iputils/iputils-s20190709/x86-64:/home/peeta/poky/meta/recipes-extended/iputils/iputils/x86-64:/home/peeta/poky/meta/recipes-extended/iputils/files/x86-64:/home/peeta/poky/meta/recipes-extended/iputils/iputils-s20190709/:/home/peeta/poky/meta/recipes-extended/iputils/iputils/:/home/peeta/poky/meta/recipes-extended/iputils/files/"
- 1
- 2
它搜索补丁的的目录集就有很多,补丁实际如下:
build]$ ls ../meta/recipes-extended/iputils/iputils
iputils/ iputils_s20190709.bb
build]$ ls ../meta/recipes-extended/iputils/iputils/
0001-iputils-Initialize-libgcrypt.patch
0001-ninfod-change-variable-name-to-avoid-colliding-with-.patch
0001-ninfod-fix-systemd-Documentation-url-error.patch
0001-rarpd-rdisc-Drop-PrivateUsers.patch
- 1
- 2
- 3
- 4
- 5
- 6
- 7
我们的learnyocto项目没有用到补丁,但是不影响其没有补丁目录集,如下:
build]$ bitbake -e learnyocto | grep ^FILESPATH
FILESPATH="/home/peeta/poky/meta-mylayer/recipes-learnyocto/learnyocto/learnyocto-1.0+gitAUTOINC+cac0e57e2f/poky:/home/peeta/poky/meta-mylayer/recipes-learnyocto/learnyocto/learnyocto/poky:/home/peeta/poky/meta-mylayer/recipes-learnyocto/learnyocto/files/poky:/home/peeta/poky/meta-mylayer/recipes-learnyocto/learnyocto/learnyocto-1.0+gitAUTOINC+cac0e57e2f/qemux86-64:/home/peeta/poky/meta-mylayer/recipes-learnyocto/learnyocto/learnyocto/qemux86-64:/home/peeta/poky/meta-mylayer/recipes-learnyocto/learnyocto/files/qemux86-64:/home/peeta/poky/meta-mylayer/recipes-learnyocto/learnyocto/learnyocto-1.0+gitAUTOINC+cac0e57e2f/qemuall:/home/peeta/poky/meta-mylayer/recipes-learnyocto/learnyocto/learnyocto/qemuall:/home/peeta/poky/meta-mylayer/recipes-learnyocto/learnyocto/files/qemuall:/home/peeta/poky/meta-mylayer/recipes-learnyocto/learnyocto/learnyocto-1.0+gitAUTOINC+cac0e57e2f/x86-64:/home/peeta/poky/meta-mylayer/recipes-learnyocto/learnyocto/learnyocto/x86-64:/home/peeta/poky/meta-mylayer/recipes-learnyocto/learnyocto/files/x86-64:/home/peeta/poky/meta-mylayer/recipes-learnyocto/learnyocto/learnyocto-1.0+gitAUTOINC+cac0e57e2f/:/home/peeta/poky/meta-mylayer/recipes-learnyocto/learnyocto/learnyocto/:/home/peeta/poky/meta-mylayer/recipes-learnyocto/learnyocto/files/"
- 1
- 2
因此如果想给自己的项目添加补丁文件,可以在上面的目录集中的一个目录中添加补丁文件。
感兴趣的盆友可以结合前面的devtool工具修改项目。
不过我们前面在演示修改alsa-utils项目时有用到补丁文件。因此这里不再赘述。