yocto依赖关系小结

首先说明,yocto中的依赖本质上是任务之间的依赖,即使是使用DEPENDS或者RDEPENDS定义的两个recipe之间的依赖关系,但实际上在yocto运行时依赖关系还是会体现在这两个recipe中的task之间,即在运行时,yocto会将recipe之间的依赖解析成task之间的依赖。

task之间的依赖关系可以分为两种:属于同一个recipe的task之间的依赖或者属于不同recipe的task之间的依赖。而属于不同recipe的task之间的依赖又可分为构建时依赖或者运行时依赖,其中构建时依赖是指在yocto构建时某个包会依赖另一个包提供的头文件、so文件或者可执行文件来完成自身的编译过程;而运行时依赖是指某个包编译生成的可执行文件在板子上运行时,需要依赖另一个包提供的so文件等。yocto对待构建时依赖和运行时依赖的区别不大,主要是将构建时依赖和运行时依赖解析成task之间的依赖时有些不同,且yocto会自动生成一些运行时依赖关系(参考前一篇博客),另外运行时依赖关系指的是两个包(PACKAGES变量中的)之间,而不是两个recipe之间。

  1. 属于同一个recipe的task之间的依赖可以用addtask来设置
  2. 属于不同recipe的task之间的依赖可以用多种方式来定义、如dependsrdependsdeptaskrdeptaskrecrdeptask等,下面详细介绍每种方式。
  3. depends用于定义不同recipe之间的task之间的构建时依赖,如do_patch[depends] = "quilt-native:do_populate_sysroot"表示本recipe的do_patch任务依赖于quilt-nativedo_populate_sysroot任务。
  4. rdepends用于定义不同recipe之间的task之间的运行时依赖,使用方式和depends类似,都只是用于告诉yocto框架让某个任务在另一个任务完成之后再运行
  5. deptask也是用于不同recipe之间的task之间的构建时依赖,不过和depends不同的是deptask可以用于批量定义依赖,如do_configure[deptask] = "do_populate_sysroot"表示本recipe的do_configure任务需要在所有包含于DEPENDS变量中的其它recipe的do_populate_sysroot任务运行之后才能运行
  6. rdeptask也是用于批量定义依赖关系,如do_package_qa[rdeptask] = "do_packagedata",deptask不同的是,它表示本recipe的do_package_qa任务需要在所有包含于RDEPENDS变量中的其它recipe的do_packagedata任务运行之后才能运行
  7. recrdeptask同时包含了deptaskrdeptask的功能,并且递归地寻找依赖recipe。也就是说如果A依赖了B,B依赖了C,C依赖了D,那么在A中设置do_a[recrdeptask] = do_b表示A的a任务会在B、C、D的b任务都运行完毕之后再运行。

你可能感兴趣的:(yocto依赖关系小结)