yocto-第24篇-BitBake全过程(2)

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项目时有用到补丁文件。因此这里不再赘述。