yocto的文件下载支持介绍

bitbake的下载模块是一个独立的下载库。

主要是从各种源地址下载源码。

当前的主要版本你是fetch2.也就是第二个版本。以下所说的fetch都是指的这个版本的。


bitbake通过几步来获取源代码或者文件。主要按顺序处理两个不同的步骤。

1主要是先从某个地方(缓存或者其他地方)获取源码,2然后将源码解压到特定的位置或者指定的位置。

通常解压完毕后是打补丁。本部分不涉及到打补丁。

处理第1部分的代码类似如下

src_uri = (d.getVar('SRC_URI', True) or "").split()
fetcher = bb.fetch2.Fetch(src_uri, d)
fetcher.download()
从BB文件的SRC_URI变量获取具体的下载地址

使用SRC_URI变量 产生一个 下载器,调用fetcher实现下载

处理第2部分的代码类似如下

 rootdir = l.getVar('WORKDIR', True)
 fetcher.unpack(rootdir)
通常下载好的文件会指定解压到WORKDIR目录中取。


SRCURI和WORKDIR变量不是硬编码到fetcher里面的。因为fetcher的方式可能是多种多样的。

比如OE的共享状态代码(sstate 主要是指已经编译过的)使用fetch模块获取sstate文件

当download()方法调用的时候。bitbake尝试使用下面的搜索顺序来解决URL

1 pre-mirror sites 首先使用预镜像地址来取得源码。这些位置定义在PREMIRRORS变量中

类似于

PREMIRRORS ??= "\
bzr://.*/.*   http://downloads.yoctoproject.org/mirror/sources/ \n \
cvs://.*/.*   http://downloads.yoctoproject.org/mirror/sources/ \n \
git://.*/.*   http://downloads.yoctoproject.org/mirror/sources/ \n \
gitsm://.*/.* http://downloads.yoctoproject.org/mirror/sources/ \n \
hg://.*/.*    http://downloads.yoctoproject.org/mirror/sources/ \n \
osc://.*/.*   http://downloads.yoctoproject.org/mirror/sources/ \n \
p4://.*/.*    http://downloads.yoctoproject.org/mirror/sources/ \n \
svn://.*/.*   http://downloads.yoctoproject.org/mirror/sources/ \n"


2 如果pre-mirror sites下载失败

那么再使用 SRC_URI地址来下载


3如果下载还是失败。尝试使用镜像来下载。

MIRRORS =+ "\
ftp://.*/.*      http://downloads.yoctoproject.org/mirror/sources/ \n \
http://.*/.*     http://downloads.yoctoproject.org/mirror/sources/ \n \
https://.*/.*    http://downloads.yoctoproject.org/mirror/sources/ \n"


对于不同的URL,fetcher调用不同的子模块来处理。可能会遇到下列的问题。

比如

http://git.yoctoproject.org/git/poky;protocol=git
git://git.yoctoproject.org/git/poky;protocol=http
前一种情况下。http打头的会被传递给wget fetcher,但是wget不懂得proto=git怎么使用

因此。后一种才是正确的方式。后一种会被传递给git fetcher,git知道如何使用http协议


下列显示了一个通用的镜像地址的定义,比如

  PREMIRRORS ?= "\
         bzr://.*/.*   http://somemirror.org/sources/ \n \
         cvs://.*/.*   http://somemirror.org/sources/ \n \
         git://.*/.*   http://somemirror.org/sources/ \n \
         hg://.*/.*    http://somemirror.org/sources/ \n \
         osc://.*/.*   http://somemirror.org/sources/ \n \
         p4://.*/.*    http://somemirror.org/sources/ \n \
         svn://.*/.*   http://somemirror.org/sources/ \n"

     MIRRORS =+ "\
         ftp://.*/.*      http://somemirror.org/sources/ \n \
         http://.*/.*     http://somemirror.org/sources/ \n \
         https://.*/.*    http://somemirror.org/sources/ \n"

bitbake是支持cross-url的。可以镜像一个git仓库到一个http服务器上作为一个压缩包。

bitbake维护了一系列从网络下载的文件的缓存,所有非本地的文件都被放置在了download directory。这个目录通过DL_DIR指定

同时文件的完整性是很有必要的。对于非本地的文档下载fetcher代码可以通过验证sha-256和MD5checksum来确定文档被准确下载了。

可以通过SRC_URI变量来指定合适的值。

比如

SRC_URI[md5sum] = "value"
SRC_URI[sha256sum] = "value"
 
也可以在SRC_URL的尾部指定校验值
SRC_URI = "http://example.com/foobar.tar.bz2;md5sum=4a8e0f237e961fd7785d19d07fdb994d"
如果存在多个下载URL,可以通过上面直接在末尾指定md5sum的方式,也可以命名这个url,然后指定名字的md5。如下
     SRC_URI = "http://example.com/foobar.tar.bz2;name=foo"

SRC_URI[foo.md5sum] = 4a8e0f237e961fd7785d19d07fdb994d

一旦下载校验完毕。bitbake就会使用这个.done标记放在DL_DIR里面。bitbake用这个标记来识别,避免后续重新下载或者计算checksum

如果BB_STRICT_CHECKSUM标识设置了。任何没有checksum的下载都会触发一个错误。BB_NO_NETWORK变量能够使得任何访问网络的行为造成错误,在检查镜像以及其他东西的完整性方面是很有帮助的。

可以在local.conf中指定

 BB_NO_NETWORK = "1" 

4.2

解压部分。对于非GIT的url。bitbake使用通用的解压方式。

可以在URL中指定大量的参数来管理解压步骤的行为。

unpack标记 。控制这个URL组件是否被解压。默认设置为1 如果设置为1这个组件被解压。如果设置为0,这个组件不解压,如果你想拷贝这个文档而且不解压的时候是比较有用的。

dos标记 应用到.zip和.jar文件上指定是否在文本文件上使用DOS形式的结尾,(应该是换行的时候使用\r\n或者\n这样的)

basepath标记 在解压的时候指定排除掉某个目录(是否准确?有待验证研究)

subdir 指定解压这个包到root目录下的子目录

解压过程会自动调用解压后缀名为.Z.z.gz.xz.zip.jar.ipk.rpm等等已知的压缩包

gitfetcher有自己的优化解压方式来处理git tree。基本上是通过克隆这个树到最终的目录。这个方式使用引用的方式,因此只有一个源码树的拷贝。

4.3 fetchers

前面提到了源码包的URL前缀决定了使用哪个fetcher模块。每个模块可以支持不同的URL参数类型。

4.3.1 本地文件获取器(file://)

本模块处理以file://开头的URLs.文件名指定的URL可以是一个相对或者绝对路径。如果文件名是相对的。那么FILESPATH变量和系统PATH变量都会用来查找这个文件。

如果FILESPATH和PATH没有找到,那么FILESDIR被用来查找这个合适的相对文件,由于FILESDIR将被遗弃了,所以不要使用)

如果这个文件不能找到。那么假定在变量DL_DIR指定的目录中。

如果你指定的是一个目录。那么整个目录都将被被解压缩。

以下是两个例子

SRC_URI = "file://relativefile.patch"
SRC_URI = "file:///Users/ich/very_important_software"




  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Yocto 构建系统是一个用于嵌入式 Linux 系统的开源项目。它能够帮助开发人员快速构建定制化的 Linux 发行版,以满足各种嵌入式设备的需求。 Yocto 构建系统的核心是 BitBake,它是一个基于 Python 的构建工具。BitBake 可以根据用户创建的配置文件,自动化地构建整个 Linux 系统。通过使用 BitBake 可以方便地管理软件包的依赖关系、选择所需的组件和功能,自动生成适合目标设备的 Linux 镜像。 Yocto 能够让开发人员更加灵活地定制和优化 Linux 系统。它提供了一个强大的层次结构,允许用户创建、管理和共享不同级别的自定义层。用户可以在不同的层中添加、删除或修改软件包、配置、脚本和图像。这样,无论是开发嵌入式 Linux 系统还是定制特定设备的 Linux 发行版,都能够很方便地实现。 除了 BitBake,Yocto 还包含了 Poky Build System,它是一个基于 OpenEmbedded 构建框架的参考实现。Poky 提供了一组标准的开发工具和环境,方便开发人员进行软件包管理、构建、调试和测试等工作。 通过使用 Yocto 构建系统,开发人员可以更加专注于自定义和优化嵌入式系统,而无需关注底层的构建细节。同时,Yocto 还提供了广泛的文档和社区支持,使得开发人员可以快速上手并解决问题。 总之,Yocto 构建系统是一个强大的工具,能够帮助开发人员快速构建自定义、高度灵活和可优化的嵌入式 Linux 系统。无论是个人开发者还是企业开发团队,都可以利用 Yocto 构建系统来实现高效的嵌入式 Linux 系统开发。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值