Bitbake

Bitbake介绍

从根本上说,BitBake是一个通用的任务执行引擎,BitBake允许shell和Python任务在复杂的任务间依赖关系的约束条件下有效地并行运行。 BitBake的主要用户之一是OpenEmbedded,OpenEmbedded使用Bitbake以及面向任务的方法构建嵌入式Linux软件堆栈。

从概念上来说,BitBake在某些方面与GNU Make类似,但是也有明显的区别:
  1.BitBake根据构建任务时提供的元数据来执行任务。元数据存储在配方文件(.bb)以及与配方相关的“append”(.bbappend)文件,配置文件(.conf),底层include(.inc)文件,类(.bbclass)文件中。元数据为BitBake提供有关运行哪些任务以及这些任务之间的依赖关系的指示。
  2. BitBake包含用于从诸如本地文件,源控制系统或网站等各种地方获取源代码的源代码获取库。
  3.用于构建的每个单元(例如,一段软件)的指示被称为“配方(recipe)”文件,配方文件包含关于该单元的所有信息(依赖性,源文件位置,校验和,描述等)。
  4.BitBake包括客户端/服务器的抽象,可以从命令行使用或用作XML-RPC上的服务,并具有多个不同的用户界面。

配方(Recipe)

文件扩展名为.bb的BitBake配方文件是最基本的元数据文件。这些配方文件为BitBake提供以下内容:
  (1)关于软件包的描述性信息(作者,主页,许可证等)
  (2)配方的版本
  (3)现有的依赖(构建和运行时依赖)
  (4)源代码位置以及如何获取它
  (5)源代码是否需要任何补丁,在哪里找到补丁以及如何应用补丁
  (6)如何配置和编译源代码
  (7)如何目标机器上安装一个或多个软件包
在BitBake或任何使用BitBake作为其构建系统的项目中,具有.bb扩展名的文件称为配方。

配置文件(Configuration Files)

配置文件(由.conf扩展名表示)定义了各种管理项目构建过程的配置变量。 这些文件分为几个部分,包括机器配置选项,分发配置选项,编译器调整选项,通用公共配置选项和用户配置选项。 主配置文件是bitbake.conf文件,它位于BitBake源码树conf目录中。

类(Classes)

类文件(由.bbclass扩展名指示)包含可以在元数据文件之间共享的有用信息。 BitBake源代码树目前带有一个名为base.bbclass的类元数据文件。您可以在classes目录中找到此文件。 base.bbclass类文件的特殊之处在于它总是自动包含在所有配方和类中。 类文件包含标准的基本任务的定义,例如获取源代码,解包,配置(默认为空),编译(运行存在的任何Makefile),安装(默认为空)和打包(默认为空)。 这些任务通常被项目开发过程中添加的其他类文件覆盖或扩展。
BitBake允许通过include文件(.inc)和类文件(.bbclass)共享元数据。例如,假设您有一个常用功能,比如要在多个recipe之间共享的任务。在这种情况下,创建包含公共功能的.bbclass文件,然后在配方中使用inherit指令继承类是共享任务的常用方法。
BitBake提供的相应的机制,允许您在配方之间共享功能。 具体来说,机制包括include,inherit,INHERIT和require指令。

include文件(.inc)

Include文件也是用于在元数据文件之间共享元数据。

附加文件(Append Files)

附加文件是具有.bbappend文件扩展名的文件,用于扩展或覆盖现有配方文件中的信息。
BitBake期望每个附加文件具有相应的配方文件。此外,附加文件和相应的配方文件必须使用相同的根文件名,只能在使用的文件类型后缀方面有所不同(例如formfactor_0.0.bb和formfactor_0.0.bbappend)。
附加文件中的信息将会扩展或覆盖匹配的的配方文件中的信息。
在命名附加文件时,可以使用通配符(%)来匹配配方文件名称。例如,假设您有一个如下的追加文件:
  busybox_1.21.%.bbappend
该附加文件将匹配任何busybox_1.21.x.bb版本的配方文件。因此,附加文件将匹配以下配方名称:
  busybox_1.21.1.bb
  busybox_1.21.2.bb
  busybox_1.21.3.bb
如果busybox的配方更新为busybox_1.3.0.bb,则附加文件名称将不匹配。但是,如果你命名了附加文件为busybox_1.%.bbappend,那么你将会依然匹配busybox_1.3.0.bb文件。
在通常情况下,您可以将附加文件命名为busybox _%.bbappend。这样简单,完全独立于版本。

Bitbake 文件介绍。

下面以bluez5.inc文件为例来说明

1.SUMMARY

用于打包系统(例如opkg,rpm或dpkg)的二进制包的(72个字符或更少)摘要。 默认情况下,如果在配方中未设置DESCRIPTION,则使用SUMMARY的值定义DESCRIPTION变量。

2.DESCRIPTION

提供给包管理器的包描述信息。如果未设置,DESCRIPTION将使用SUMMARY变量的值。

3.HOMEPAGE

一般为配方的正在构建的软件的主页,从中可以获取更多的软件信息。

4.SECTION

用于对软件包进行分类,此变量用于软件包管理程序。

5.LICENSE

配方的源文件LICENSE列表。LICENSE需遵循以下规则:
  (1)不要在单个LICENSE名称中使用空格。
  (2)当LICENSE可选择多个时,使用 | 分隔LICENSE。
  (3)当存在涵盖源文件的不同部分的多个LICENSE时,使用 & 分隔LICENSE。
  (4)您可以在LICENSE名称之间使用空格。
  (5)对于标准LICENSE,请使用meta / files / common-licenses /中的LICENSE,或者在meta / conf / licenses.conf中定义的具有SPDXLICENSEMAP标志的LICENSE。
下面是一些例子:

 LICENSE =“LGPLv2.1 | GPLv3”
 LICENSE =“MPL-1&LGPLv2.1”
 LICENSE =“GPLv2 +”
 
 
  • 1
  • 2
  • 3

第一个示例来自Qt的配方,源文件可以选择LGPLv2.1或GPLv3许可。第二个示例来自Cairo,其中两个 LICENSE涵盖源代码的不同部分。最后一个示例来自sysstat,它提供了一个单一的 LICENSE。
您还可以针对每个包指定 LICENSE以处理输出组件具有不同的LICENSE情况。例如,如果某个软件的代码根据GPLv2许可,但是文档却根据GNU 1.2自由文档许可,其LICENSE可以被规定如下:

LICENSE =“GFDL-1.2GPLv2LICENSE _ $ {
  
  PN} =“GPLv2LICENSE _ $ {
  
  PN} -doc =“GFDL-1.2
 
 
  • 1
  • 2
  • 3

6.LIC_FILES_CHKSUM

配方文件构建的软件源代码中的LICENSE文本的校验和。
此变量跟踪软件源代码文件的LICENSE文本的更改。如果LICENSE文本被更改,它将触发构建失败,这使开发人员有机会审查任何LICENSE更改。
所有配方文件必须定义此变量(除非LICENSE设置为“CLOSED”)。

7.DEPENDS

列出配方的构建时的依赖项(即其他配方文件)。在执行配方的配置任务之前,系统确保列出的所有依赖项都已构建,并且所有依赖项的内容已经保存在相应的sysroot中。
考虑这个简单的例子,两个名为“a”和“b”的配方生成类似命名的包。 在本示例中,DEPENDS语句出现在“a”配方中:

DEPENDS =“b”  
 
 
  • 1

这里,DEPENDS 使得配方“a”的do_configure任务取决于配方“b”的do_populate_sysroot任务。 这意味着当配方“a”正在配置自身时,配方“b”放入sysroot的任何内容都必须可用。

8.PROVIDES

用于提供配方的别名。 默认情况下,配方自己的PN已经包含在PROVIDES列表中。如果配方使用PROVIDES,则别名是配方的PN的同义词,并可被用于其他配方的DEPENDS中。
以配方文件libav_0.8.11.bb为例,libav_0.8.11.bb中的PROVIDES语句如下:

PROVIDES + =“libpostproc”
 
 
  • 1

该PROVIDES语句使得“libav”配方也被称为“libpostproc”。

9.RPROVIDES

用于提供包名的别名列表。 这些别名用于满足其他包在在构建期间和指定目标时(在RDEPENDS所指定的)的运行时依赖。
注意
程序包自身的名称(PN)已隐含在其RPROVIDES列表中。
与所有程序包控制变量一样,您必须始终将该变量与包名结合使用。例如:

RPROVIDES _ $ {PN} =“widget-abi-2”
 
 
  • 1

10.RCONFLICTS

用于指定与当前软件包冲突的软件包列表。请注意,如果没有先删除冲突的包,则不会安装当前软件包。
与所有包控制变量一样,您必须始终将其与包名结合使用。例如:

RCONFLICTS _ $ {PN} =“another_conflicting_package_name”
 
 
  • 1

OpenEmbedded构建系统使用的BitBake支持指定冲突的软件包版本。虽然语法因软件打包格式而异,但BitBake会隐藏这些差异。 下面是使用RCONFLICTS变量指定冲突的软件包的一般语法:

RCONFLICTS _ $ {PN} =“package(operator version)”
 
 
  • 1

对于operator,您可以指定以下内容:

 =
 <
 >
 <=
 >=
 
 
  • 1
  • 2
  • 3
  • 4
  • 5

例如,以下内容说明了当前软件包与软件包foo的1.2或更高版本冲突:

RCONFLICTS _ $ {PN} =“foo(> = 1.2)”
 
 
  • 1

11. PACKAGECONFIG

该变量提供了在配方上启用或禁用配方的feature的方法。您可以在配方中指定feature以及feature的参数来创建PACKAGECONFIG块。以下是基本的块结构:

PACKAGECONFIG ?? =“f1 f2 f3 ...”
PACKAGECONFIG [f1] =“--with-f1, - without-f1,build-deps-f1,rt-deps-f1”
PACKAGECONFIG [f2] =“--with-f2, - without-f2,build-deps-f2,rt-deps-f2”
PACKAGECONFIG [f3] =“--with-f3, - without-f3,build-deps-f3,rt-deps-f3”
 
 
  • 1
  • 2
  • 3
  • 4

PACKAGECONFIG首先指定了一个空格分隔的要启用的feature列表。在feature列表下面,您可以通过提供最多四个按顺序排列的参数来确定每个feature的行为,这些参数之间用逗号分隔。您可以省略任何您喜欢的参数,但必须保留逗号分隔符。您必须按照以下顺序指定feature的参数:
  1.如果启用了该功能,则应将额外的参数添加到配置脚本参数列表 (EXTRA_OECONF)。
  2.如果禁用了该功能,应该将额外的参数添加到EXTRA_OECONF。
  3.如果启用了该功能,则应添加附加的构建时依赖关系(DEPENDS)。
  4.如果启用了该功能,应该添加附加的运行时依赖关系(RDEPENDS)。
以librsvg中的PACKAGECONFIG块为例。在这个例子中,feature是croco,它通过三个参数来确定其行为。

PACKAGECONFIG ?? =“croco”
PACKAGECONFIG [croco] =“ - with-croco,- without-croco,libcroco”
 
 
  • 1
  • 2

–with-croco和libcroco参数仅在启用此feature时适用。在这种情况下,–with-croco将被添加到配置脚本的参数列表中,而libcroco将被添加到DEPENDS中。另一方面,如果您通过另一层中的.bbappend文件禁用该功能,则第二个参数–without-croco将会被添加到配置脚本中,而不是–with-croco。基本的PACKAGECONFIG结构适用于创建块或者更改块。如果要更改现有的PACKAGECONFIG块,可以采用以下两种方法之一:
  1.附加文件:在您的层(layer)中创建一个名为recipename.bbappend的附加文件,并覆盖PACKAGECONFIG的值。您可以完全覆盖变量的值:

PACKAGECONFIG =“f4 f5”
 
 
  • 1

  或者,您可以只添加变量的值:

PACKAGECONFIG_append =“f4”
 
 
  • 1

  2.配置文件:如果您没有修改local.conf或mydistro.conf文件,此方法与通过附加文件更改块相同。与之前描述的附加文件一样,您可以完全覆盖变量的值:

PACKAGECONFIG_pn-recipename =“f4 f5”
 
 
  • 1

  或者,您可以只修改变量的值:

PACKAGECONFIG_append_pn-recipename =“f4”
 
 
  • 1

12.SRC_URI

用于指定源文件列表(本地或远程)。这个变量告诉OpenEmbedded构建系统哪些位要进入构建以及如何获取它们。例如,如果配方或附加文件只需要从Internet中提取压缩后的源文件,则配方或附加文件只需使用单个SRC_URI条目即可。另一方面,如果配方或附加文件需要同时获取压缩后的源文件,应用两个补丁以及自定义文件,则配方或附加文件中的SRC_URI变量将包括四个条目。
以下列出了可用的URI协议:
  file://-从本地获取文件,这些文件通常是元数据附带的文件。其路径相对于FILESPATH变量。因此,构建系统按顺序从配方文件(.bb)或附加文件(.bbappend)所在的目录的子目录中搜索:

$ {
  
  BPN} - 没有任何特殊后缀或版本号的配方名称。
$ {
  
  BP} - $ {
  
  BPN} - $ {
  
  PV}。配方的名称和版本,但没有任何特殊的包名称后缀。
 
 
  • 1
  • 2

files - files目录中的文件,一般配方或附加文件旁边。
  注意:
  如果希望构建系统从append文件中选取通过SRC_URI语句指定的文件,则可以通过在append文件中使用FILESEXTRAPATHS变量来扩展FILESPATH变量。
  bzr:// - 从Bazaar版本控制存储库获取文件。
  git:// - 从Git版本控制存储库获取文件。
  osc:// - 从OSC(OpenSUSE Build服务)版本控制存储库获取文件。
  repo:// - 从repo(Git)存储库获取文件。
  ccrc:// - 从ClearCase存储库获取文件。
  http:// - 使用http从Internet获取文件。
  https:// - 使用https从Internet获取文件。
  ftp:// - 使用ftp从Internet获取文件。
  cvs:// - 从CVS版本控制存储库获取文件。
  hg:// - 从Mercurial(hg)版本控制存储库获取文件。
  p4:// - 从Perforce(p4)版本控制存储库获取文件。
  ssh:// - 从安全shell获取文件。
  svn:// - 从Subversion(svn)版本控制存储库获取文件。
针对SRC_URI的每个条目还有一些标准和特定的配方选项。以下是标准选项:
  apply - 是否应用补丁。默认操作是应用补丁。
  striplevel - 应用补丁时使用的级别。默认级别为1。
  patchdir - 指定补丁的目录。默认值为$ {S}。
以下是版本控制系统针对配方构建代码的选项:
  mindate - 只有在SRCDATE等于或大于mindat时才应用补丁
  maxdate - 仅当SRCDATE不晚于mindate时才应用补丁。
  minrev - 仅当SRCREV等于或大于minrev时才应用补丁。
  maxrev - 仅当SRCREV不晚于maxrev时才应用补丁。
  rev - 仅当SRCREV等于rev时才应用补丁。
  notrev - 仅当SRCREV不等于rev时才应用补丁。
这里还有一些值得一提的额外选项:
  unpack - 控制是否解压缩文件(如果是归档文件)。默认操作是解压缩文件。
  subdir - 将文件(或提取其内容)放置到WORKDIR的指定子目录中。此选项对于异常tarball或其他那些解压后文件不放置在子目录的归档文件非常有用。
  name - 当SRC_URI中有多个文件时,指定与SRC_URI校验相关的名称。
  downloadfilename - 指定存储下载文件时使用的文件名。

13.inherit

用于指定在解析过程中应继承的类。 该变量仅在配置文件中有效。

14.EXTRA_OECONF

指定用于configure 的参数。

15.S

配方文件中源文件解压缩后在build目录中的位置。 此位置在工作目录(WORKDIR)中,且不是静态的。 解压缩后的源文件位置取决于配方名称(PN)和配方版本(PV),如下所示:

$ {
  
  WORKDIR} / $ {
  
  PN} - $ {
  
  PV}
 
 
  • 1

例如,假设一个名为poky的源目录顶级文件夹和一个poky / build的默认构建目录。 在这种情况下,构建系统用于保留db配方源文件解压缩后的目录如下:
poky / build / tmp / work / qemux86-poky-linux / db / 5.1.19-r3 / db-5.1.19

16.D

目标目录。do_install任务在build目录中安装组件的位置。 此位置默认为:

$ {
  
  WORKDIR} / image
 
 
  • 1

17.WORKDIR

OpenEmbedded构建系统构建配方的工作目录的路径名。此目录位于TMPDIR目录结构中,并且特定于正在构建的配方和正在构建的系统。
WORKDIR目录定义如下:

$ {
  
  TMPDIR} / work / $ {
  
  MULTIMACH_TARGET_SYS} / $ {
  
  PN} / $ {
  
  EXTENDPE} $ {
  
  PV} - $ {
  
  PR}
 
 
  • 1

实际目录取决于几个事情:
  TMPDIR:最上层构建输出目录
  MULTIMACH_TARGET_SYS:目标系统
  PN:配方名称
  EXTENDPE:时间戳? - (如果PE未指定,这通常是大多数配方的情况,则EXTENDPE为空)
  PV:配方版本
  PR:配方修订版
例如,假设源目录最上层文件夹名称为poky,默认构建目录为poky/build,目标系统为qemux86-poky-linux。此外,假设您的配方名为foo_1.3.0-r0.bb。在这种情况下,构建系统用于构建包的工作目录(WORKDIR)将如下所示:
poky / build / tmp / work / qemux86-poky-linux / foo / 1.3.0-r0

18.ALLOW_EMPTY

如果输出包为空,仍然应该生成包。 默认情况下,BitBake不产生空包。当存在RDEPENDS或某些其他硬件运行时的需要时,此默认行为可能会导致问题。
与所有程序包控制变量一样,您必须始终将其与包名(PN)结合使用,如:

ALLOW_EMPTY _ $ {
  
  PN} =“1ALLOW_EMPTY _ $ {
  
  PN} -dev =“1ALLOW_EMPTY _ $ {
  
  PN} -staticdev =“1
 
 
  • 1
  • 2
  • 3

19.PACKAGES

配方创建的包的列表。 默认值如下:

$ {
  
  PN} -dbg $ {
  
  PN} -staticdev $ {
  
  PN} -dev $ {
  
  PN} -doc $ {
  
  PN} -locale $ {
  
  PACKAGE_BEFORE_PN} $ {
  
  PN}
 
 
  • 1

20.FILES

指定需要放入包中的目录或文件的列表。
使用FILES变量时,必须与生成包的包名结合使用。然后提供一个空格分隔的文件或路径列表,用于标识要包含在生成包中的文件。例如:

FILES _ $ {
  
  PN} + =“$ {bindir} / mydir1 / $ {bindir} / mydir2 / myfile”
 
 
  • 1

注意:
当为FILES变量指定文件或路径时,最好使用相对路径。例如,使用sysconfdir/etcsysconfdir而不是/etc,或 {bindir}而不是/ usr / bin。您可以在源目录中的meta / conf / bitbake.conf文件的顶部找到这些变量的列表。
如果您提供的FILES变量中的一些文件是可编辑的,并且您知道它们不应该在软件包管理系统(PMS)的软件包更新过程中被覆盖,您可以让PMS识别这些文件,以便PMS不会覆盖它们。有关如何使PMS的识别这些文件,请参考CONFFILES变量。

21.SYSTEMD_SERVICE

如果配方继承了systemd类,那么此变量为配方生成包的指定了systemd的服务名称。当您在配方中使用此文件时,请指定包名,以保证变量值应用到目标包上。下面是一个来自connman配方中的例子:

SYSTEMD_SERVICE _ $ {PN} =“connman.service”
 
 
  • 1

22.RDEPENDS

列出包的运行时依赖关系(即其他程序包),依赖包必须先安装才能使当前构建的程序包正常运行。如果在构建过程中找不到此列表中的依赖包,构建将会失败。
当在配方中使用RDEPENDS变量时,说明当前配方的do_build任务取决于特定包。下面以两个名为“a”和“b”的配方为例,它们生成类似命名的IPK包。在此示例中,RDEPENDS语句显示在“a”配方中:

RDEPENDS _ $ {PN} =“b”
 
 
  • 1

这里,RDEPENDS使得配方“a”的do_build任务取决于配方“b”的do_package_write_ipk任务。这意味着当构建配方“a”时,“b”的包文件必须可用。更重要的是,以包管理器理解的方式,包“a”将被标记为依赖于包“b。
在RDEPENDS中列出的包的名称必须是其他包的名称 - 它们不能是配方名称。虽然软件包名称和配方名称通常匹配,但重要的是,您必须在RDEPENDS变量中提供软件包名称。有关如何从配方创建软件包的示例,请参考PACKAGES变量。
因为RDEPENDS变量适用于正在构建的包,所以您应该始终使用带有附加的包名称的形式的变量名。例如,假设您正在构建一个依赖于perl包的开发包。在这种情况下,您将使用以下RDEPENDS语句:

RDEPENDS _ $ {PN} -dev + =“perl”
 
 
  • 1

在该示例中,RDEPENDS变量具有$ {PN} -dev包名称作为变量名的一部分。
附加到RDEPENDS变量的程序包,在通过类(如debian)重命名之前,其包名必需同PACKAGES命名空间中的名称一致。
在许多情况下,您不需要使用RDEPENDS显式添加运行时的依赖包,因为配方会自动运行某些处理:
shlibdeps:如果运行时的程序包包含共享库(.so),构建过程中将处理库以及与其动态链接的其他库,并在创建运行时的包时将这些库添加到RDEPENDS。
pcdeps:如果程序包含有pkg-config文件,则构建过程中将使用此文件将条目添加到RDEPENDS变量以创建运行时的程序包。
OpenEmbedded构建系统使用的BitBake支持依赖指定版本的特性。虽然语法因软件包打包格式而异,但BitBake会隐藏这些差异。以下是使用RDEPENDS变量指定依赖软件包版本的一般语法:

RDEPENDS _ $ {PN} =“package(operator version)”
 
 
  • 1

对于operator,您可以指定以下内容:

  =
  <
  >
  <=
  >=
 
 
  • 1
  • 2
  • 3
  • 4
  • 5

例如,以下内容说明配方运行时依赖软件包foo的1.2或更高版本:

RDEPENDS _ $ {PN} =“foo(> = 1.2)”
 
 
  • 1

有关构建时依赖的内容,请参考DEPENDS变量。

23.INITSCRIPT_PACKAGES

包含初始化的软件包列表。 如果有多个包,则应该使用带有附加的包名称的形式的变量名。
只有配方继承update-rc.d.bbclass,此变量才可使用。该变量是可选的且默认为值为PN。

24.INITSCRIPT_NAME

安装到$ {sysconfdir} /init.d的初始化脚本名。
只有配方继承update-rc.d.bbclass,此变量才可使用。 此变量是必需的。

25.EXCLUDE_FROM_WORLD

将当前配方从BitBake world 中排除。 在执行BitBake world期间,BitBake会定位,解析和构建在bblayers.conf配置文件中公开的每一层的配方。
如果需要BitBake world不构建当前配方,请在配方中将EXCLUDE_FROM_WORLD变量设置为“1”。
注意:
如果有其他配方依赖于设置EXCLUDE_FROM_WORLD的值为1的配方,则此配方仍然可能被BitBake world构建。 将EXCLUDE_FROM_WORLD设置为1,仅确保配方未显式添加到BitBake world的构建目标列表中。

Bitbake工作流:

Bitbake工作流

自定义配方

关于如何新建配方,可以查看:http://www.yoctoproject.org/docs/2.2/dev-manual/dev-manual.html#new-recipe-writing-a-new-recipe

原文链接:https://blog.csdn.net/archer1991/article/details/62423014

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VR(Virtual Reality)即虚拟现实,是一种可以创建和体验虚拟世界的计算机技术。它利用计算机生成一种模拟环境,是一种多源信息融合的、交互式的三维动态视景和实体行为的系统仿真,使用户沉浸到该环境中。VR技术通过模拟人的视觉、听觉、触觉等感觉器官功能,使人能够沉浸在计算机生成的虚拟境界中,并能够通过语言、手势等自然的方式与之进行实时交互,创建了一种适人化的多维信息空间。 VR技术具有以下主要特点: 沉浸感:用户感到作为主角存在于模拟环境中的真实程度。理想的模拟环境应该使用户难以分辨真假,使用户全身心地投入到计算机创建的三维虚拟环境中,该环境中的一切看上去是真的,听上去是真的,动起来是真的,甚至闻起来、尝起来等一切感觉都是真的,如同在现实世界中的感觉一样。 交互性:用户对模拟环境内物体的可操作程度和从环境得到反馈的自然程度(包括实时性)。例如,用户可以用手去直接抓取模拟环境中虚拟的物体,这时手有握着东西的感觉,并可以感觉物体的重量,视野中被抓的物体也能立刻随着手的移动而移动。 构想性:也称想象性,指用户沉浸在多维信息空间中,依靠自己的感知和认知能力获取知识,发挥主观能动性,寻求解答,形成新的概念。此概念不仅是指观念上或语言上的创意,而且可以是指对某些客观存在事物的创造性设想和安排。 VR技术可以应用于各个领域,如游戏、娱乐、教育、医疗、军事、房地产、工业仿真等。随着VR技术的不断发展,它正在改变人们的生活和工作方式,为人们带来全新的体验。
VR(Virtual Reality)即虚拟现实,是一种可以创建和体验虚拟世界的计算机技术。它利用计算机生成一种模拟环境,是一种多源信息融合的、交互式的三维动态视景和实体行为的系统仿真,使用户沉浸到该环境中。VR技术通过模拟人的视觉、听觉、触觉等感觉器官功能,使人能够沉浸在计算机生成的虚拟境界中,并能够通过语言、手势等自然的方式与之进行实时交互,创建了一种适人化的多维信息空间。 VR技术具有以下主要特点: 沉浸感:用户感到作为主角存在于模拟环境中的真实程度。理想的模拟环境应该使用户难以分辨真假,使用户全身心地投入到计算机创建的三维虚拟环境中,该环境中的一切看上去是真的,听上去是真的,动起来是真的,甚至闻起来、尝起来等一切感觉都是真的,如同在现实世界中的感觉一样。 交互性:用户对模拟环境内物体的可操作程度和从环境得到反馈的自然程度(包括实时性)。例如,用户可以用手去直接抓取模拟环境中虚拟的物体,这时手有握着东西的感觉,并可以感觉物体的重量,视野中被抓的物体也能立刻随着手的移动而移动。 构想性:也称想象性,指用户沉浸在多维信息空间中,依靠自己的感知和认知能力获取知识,发挥主观能动性,寻求解答,形成新的概念。此概念不仅是指观念上或语言上的创意,而且可以是指对某些客观存在事物的创造性设想和安排。 VR技术可以应用于各个领域,如游戏、娱乐、教育、医疗、军事、房地产、工业仿真等。随着VR技术的不断发展,它正在改变人们的生活和工作方式,为人们带来全新的体验。
基于GPT-SoVITS的视频剪辑快捷配音工具 GPT, 通常指的是“Generative Pre-trained Transformer”(生成式预训练转换器),是一个在自然语言处理(NLP)领域非常流行的深度学习模型架构。GPT模型由OpenAI公司开发,并在多个NLP任务上取得了显著的性能提升。 GPT模型的核心是一个多层Transformer解码器结构,它通过在海量的文本数据上进行预训练来学习语言的规律。这种预训练方式使得GPT模型能够捕捉到丰富的上下文信息,并生成流畅、自然的文本。 GPT模型的训练过程可以分为两个阶段: 预训练阶段:在这个阶段,模型会接触到大量的文本数据,并通过无监督学习的方式学习语言的结构和规律。具体来说,模型会尝试预测文本序列中的下一个词或短语,从而学习到语言的语法、语义和上下文信息。 微调阶段(也称为下游任务训练):在预训练完成后,模型会被应用到具体的NLP任务中,如文本分类、机器翻译、问答系统等。在这个阶段,模型会使用有标签的数据进行微调,以适应特定任务的需求。通过微调,模型能够学习到与任务相关的特定知识,并进一步提高在该任务上的性能。 GPT模型的优势在于其强大的生成能力和对上下文信息的捕捉能力。这使得GPT模型在自然语言生成、文本摘要、对话系统等领域具有广泛的应用前景。同时,GPT模型也面临一些挑战,如计算资源消耗大、训练时间长等问题。为了解决这些问题,研究人员不断提出新的优化方法和扩展模型架构,如GPT-2、GPT-3等,以进一步提高模型的性能和效率。
bitbake是OpenEmbedded构建系统的引擎,用于构建嵌入式Linux系统。它通过解析一系列配置文件(主要为recipes,即.bb和.bbappend文件)来创建任务列表,并根据依赖关系依次执行。下面是bitbake的执行流程: 1. 源码获取及处理阶段:bitbake首先会根据配置文件中指定的源码仓库地址,从远程仓库或本地仓库中获取源码。然后,它会根据配置文件中的指令对源码进行处理,例如解压、打补丁等。 2. 配置阶段:在这个阶段,bitbake会根据配置文件中的指令对源码进行配置。它会根据不同的目标平台和编译选项生成相应的配置文件。 3. 编译阶段:在这个阶段,bitbake会根据任务列表逐个执行编译任务。每个任务对应一个recipe文件,其中包含了编译的具体指令和依赖关系。bitbake会根据依赖关系自动解析任务的执行顺序,并执行相应的编译指令。 4. 打包阶段:在编译完成后,bitbake会根据配置文件中的指令对编译结果进行打包。它会将编译生成的二进制文件、库文件、配置文件等打包成一个完整的映像文件或软件包。 5. 清理阶段:在需要清理编译结果时,可以使用bitbake的清理指令。例如,使用"bitbake -c clean -v u-boot"可以清理u-boot的编译结果;使用"bitbake -c cleanall xx-image"可以清理整个映像的编译中间结果;使用"bitbake -c cleansstate xx-image"可以清理映像的编译状态。 总结起来,bitbake的执行流程包括源码获取及处理、配置、编译、打包和清理等阶段,通过解析配置文件和依赖关系来自动化构建嵌入式Linux系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值