yocto的xxx.bb文件在什么时候会拷贝文件到build目录

在 Yocto 中,.bb 文件用于描述如何构建和安装一个软件包,而文件在构建过程中的拷贝操作通常会在某些特定的步骤中进行。具体来说,文件会在以下几个阶段被拷贝到 build 目录(或者更准确地说,拷贝到目标目录 ${D},这是 BitBake 过程中的一个工作目录,通常与 build 目录相对应):

1. 下载阶段(Fetch Phase)

在构建开始时,Yocto 会从源代码管理系统(例如 Git)或者 URL 下载源代码,或者将本地文件拷贝到构建目录。这个阶段发生在 do_fetch 步骤,具体步骤包括:

  • 如果你的 SRC_URI 是从 Git 仓库拉取代码,Yocto 会在 do_fetch 阶段拉取代码。
  • 如果你的 SRC_URI 是指向一个本地的压缩包或文件,Yocto 会将这个文件拷贝到 ${WORKDIR}

在这个阶段,文件并不会被拷贝到目标目录(即最终的安装路径),它们只是拷贝到 ${WORKDIR},即构建工作目录。${WORKDIR} 是 Yocto 中源代码和中间文件的存放位置。

2. 解压和准备阶段(Extract Phase)

在 do_fetch 后,Yocto 会解压文件(如果需要),并在 do_unpack 阶段准备源代码。这个步骤主要是对源代码进行解包,并将文件放置到 ${WORKDIR} 下的相应位置。

  • 如果源文件是一个压缩包(如 .tar.gz),Yocto 会在这个阶段解压缩并存放在 ${WORKDIR} 目录中。

3. 构建阶段(Build Phase)

在构建阶段(如 do_compile),Yocto 会根据配方文件中的构建系统(比如 CMake、Makefile 等)进行实际的构建操作。此时的目标文件仍然存放在 ${WORKDIR} 中。构建过程并不会将文件直接拷贝到最终的安装目录,而是生成中间构建产物(例如 .o.a.so 文件等)。

4. 安装阶段(Install Phase)

文件最终被拷贝到目标目录(如 /usr/bin/usr/lib/etc)是在 do_install 阶段。此时,源代码中生成的二进制文件、配置文件和资源文件将被拷贝到构建目录中的 ${D} 目录。

  • do_install() 是一个关键的阶段,在这个阶段你需要手动指定如何将构建产物安装到 ${D} 目录。${D} 是目标文件系统的根目录(通常是一个临时目录),它模拟了最终的文件系统结构。

    示例:

  • do_install() {install -d ${D}${bindir}install -m 0755 ${S}/myapp ${D}${bindir}/install -m 0644 ${S}/myapp.conf ${D}${sysconfdir}/
    }
    

在这个阶段,Yocto 会将你在 do_install() 中指定的文件拷贝到 ${D} 目录。

5. 打包阶段(Package Phase)

do_package 阶段是在安装后,Yocto 将文件打包成最终的二进制包(例如 .ipk.rpm 或 .deb),这些包将被部署到目标系统上。此时,Yocto 会将 ${D} 中的文件(即你在 do_install() 阶段拷贝的文件)打包成一个软件包。

6. 其他阶段(例如 do_rootfs)

在某些情况下,Yocto 会将最终的文件系统(根文件系统)打包并构建为镜像(例如 ext4tar 格式等)。这是通过 do_rootfs 阶段完成的。在这个阶段,Yocto 会将已经安装到 ${D} 目录中的所有文件合并并生成最终的文件系统镜像。

重要目录说明

  • ${WORKDIR}: 用于存放源代码和中间构建文件,通常在 do_fetch 和 do_unpack 阶段使用。
  • ${S}: 指定源代码所在的位置,通常是 ${WORKDIR} 下的源代码目录。
  • ${D}: 目标文件系统的安装目录,在 do_install() 阶段使用。最终文件将被安装到这个目录中,之后将被打包到 .ipk.rpm 或 .deb 包中。
  • ${bindir}${libdir}${sysconfdir}: 这些是标准的文件系统路径,用于指定二进制文件、库文件和配置文件的安装位置。例如:
    • ${bindir}:二进制可执行文件的安装目录(如 /usr/bin
    • ${libdir}:库文件的安装目录(如 /usr/lib
    • ${sysconfdir}:配置文件的安装目录(如 /etc

示例 .bb 文件的安装部分

下面是一个简单的 do_install() 示例,展示了如何将文件从构建目录拷贝到目标目录:

do_install() {# 安装二进制文件install -d ${D}${bindir}install -m 0755 ${S}/myapp ${D}${bindir}/# 安装配置文件install -d ${D}${sysconfdir}/myappinstall -m 0644 ${S}/myapp.conf ${D}${sysconfdir}/myapp/# 安装库文件install -d ${D}${libdir}install -m 0755 ${S}/libmylib.so ${D}${libdir}/
}

总结

  • 文件拷贝到 build 目录:主要发生在 do_install() 阶段,文件会被从构建目录(${WORKDIR})拷贝到目标目录(${D}),然后生成安装包。
  • 构建阶段和安装阶段的区别:构建阶段(如 do_compile)主要是生成中间文件,而安装阶段(如 do_install)是将这些生成的文件拷贝到模拟的目标文件系统目录(${D})中。

在 .bb 文件中,do_install 阶段是决定文件最终拷贝到哪里并打包的关键部分。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/62174.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

主打极致性价比,AMD RX 8600/8800显卡定了

*以下内容仅为网络爆料及传闻,一切以官方消息为准。 这谁能想到,率先掏出下一代桌面独立显卡的不是老大哥 NVIDIA,也不是 AMD,反而是三家中存在感最弱的 Intel! 就在 12 月 3 日,Intel 正式发布了自家第二…

数组哪些方法会触发Vue监听,哪些不会触发监听

发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【宝藏入口】。 在 Vue 中,数组的变化是通过 响应式 系统来监听的。Vue 使用 getter 和 setter 来追踪数组的变化,并在数…

npm, yarn, pnpm之间的区别

前言 在现代化的开发中,一个人可能同时开发多个项目,安装的项目越来越多,所随之安装的依赖包也越来越臃肿,而且有时候所安装的速度也很慢,甚至会安装失败。 因此我们就需要去了解一下,我们的包管理器&#…

工业检测基础-工业相机选型及应用场景

以下是一些常见的工业检测相机种类、检测原理、应用场景及选型依据: 2D相机 检测原理:基于二维图像捕获,通过分析图像的明暗、纹理、颜色等信息来检测物体的特征和缺陷.应用场景:广泛应用于平面工件的外观检测,如检测…

C语言连接数据库

文章目录 一、初始化数据库二、创建数据库连接三、执行增删改查语句1、增删改2、查 四、执行增删改查语句 接下来我简单的介绍一下怎么用C语言连接数据库。 初始化数据库创建数据库连接执行增删改查语句关闭数据库连接 一、初始化数据库 // 数据库初始化 MYSQL mysql; MYSQL* r…

优化LabVIEW数据运算效率的方法

在LabVIEW中进行大量数据运算时,提升计算效率并减少时间占用是开发过程中常遇到的挑战。为此,可以从多个角度着手优化,包括合理选择数据结构与算法、并行处理、多线程技术、硬件加速、内存管理和界面优化等。通过采用这些策略,可以…

开源模型应用落地-安全合规篇-用户输入价值观判断(四)

一、前言 在深度合规功能中,对用户输入内容的价值观判断具有重要意义。这一功能不仅仅是对信息合法性和合规性的简单审核,更是对信息背后隐含的伦理道德和社会责任的深刻洞察。通过对价值观的判断,系统能够识别可能引发不当影响或冲突的内容,从而为用户提供更安全、更和谐的…

计算机的错误计算(一百七十六)

摘要 利用某一大语言模型计算 的值,输出为 0 . 例1. 在某一大语言模型下,计算 的值。其中sin中值取弧度。结果保留16位有效数字。 直接贴图吧: 点评: (1)以上为一个大模型给的答案。从其回答可知&…

数据结构与算法——1204—递归分治法

1、斐波那契数列优化 使用滚动变量&#xff0c;保存当前计算结果和前两项值 (1)RAB (2)更新计算对象&#xff0c;AB&#xff0c;BR #include<iostream> using namespace std;int fun(int n) {if (n 0)return 0;if (n 1 || n 2)return 1;int num11;int num21;int su…

openstack内部rpc消息通信源码分析

我们知道openstack内部消息队列基于AMQP协议&#xff0c;默认使用的rabbitmq 消息队列。谈到rabbitmq&#xff0c;大家或许并不陌生&#xff0c;但或许会对oslo message有些陌生。openstack内部并不是直接使用rabbitmq&#xff0c;而是使用了oslo.message 。oslo.message 后端的…

Python 3 和 MongoDB 的集成使用

Python 3 和 MongoDB 的集成使用 MongoDB 是一个流行的 NoSQL 数据库&#xff0c;以其灵活的数据模型和强大的查询功能而闻名。Python 3 作为一种广泛使用的编程语言&#xff0c;与 MongoDB 的集成变得日益重要。本文将介绍如何在 Python 3 环境中集成和使用 MongoDB&#xff…

Postman自定义脚本Pre-request-script以及Test

这两个都是我们进行自定义script脚本的地方&#xff0c;分别是在请求执行的前后运行。 我们举两个可能经常运用到的场景。 (一)请求A先执行&#xff0c;请求B使用请求A响应结果作为参数。如果我们不用自定义脚本&#xff0c;可能得先执行请求A&#xff0c;然后手动复制响应结果…

构建高效OTA旅游平台的技术指南

1. 引言 在信息技术高速发展的今天&#xff0c;互联网深刻地改变了人们的旅行方式。传统的旅行社模式逐渐被在线旅游平台所取代&#xff0c;OTA&#xff08;Online Travel Agency&#xff0c;在线旅行社&#xff09;旅游平台应运而生&#xff0c;成为人们获取旅游信息、预订旅…

总结的一些MySql面试题

目录 一&#xff1a;基础篇 二&#xff1a;索引原理和SQL优化 三&#xff1a;事务原理 四&#xff1a;缓存策略 一&#xff1a;基础篇 1&#xff1a;定义&#xff1a;按照数据结构来组织、存储和管理数据的仓库&#xff1b;是一个长期存储在计算机内的、有组织的、可共享 的…

116. UE5 GAS RPG 实现击杀掉落战利品功能

这一篇&#xff0c;我们实现敌人被击败后&#xff0c;掉落战利品的功能。首先&#xff0c;我们将创建一个新的结构体&#xff0c;用于定义掉落体的内容&#xff0c;方便我们设置掉落物。然后&#xff0c;我们实现敌人死亡时的掉落函数&#xff0c;并在蓝图里实现对应的逻辑&…

Excel技巧:如何批量调整excel表格中的图片?

插入到excel表格中的图片大小不一&#xff0c;如何做到每张图片都完美的与单元格大小相同&#xff1f;并且能够根据单元格来改变大小&#xff1f;今天分享&#xff0c;excel表格里的图片如何批量调整大小。 方法如下&#xff1a; 点击表格中的一个图片&#xff0c;然后按住Ct…

智能合约

06-智能合约 0 啥是智能合约&#xff1f; 定义 智能合约&#xff0c;又称加密合约&#xff0c;在一定条件下可直接控制数字货币或资产在各方之间转移的一种计算机程序。 角色 区块链网络可视为一个分布式存储服务&#xff0c;因为它存储了所有交易和智能合约的状态 智能合约还…

智慧油客:从初识、再识OceanBase,到全栈上线

今天&#xff0c;我们邀请了智慧油客的研发总监黄普友&#xff0c;为我们讲述智慧油客与 OceanBase 初识、熟悉和结缘的故事。 智慧油客自2016年诞生以来&#xff0c;秉持新零售的思维&#xff0c;成功从过去二十年间以“以销售产品为中心”的传统思维模式&#xff0c;转向“以…

【深度学习】手机SIM卡托缺陷检测【附链接】

一、手机SIM卡托用途 SIM卡托是用于固定和保护SIM卡的部件&#xff0c;通过连接SIM卡与手机主板的方式&#xff0c;允许设备访问移动网络&#xff0c;用户可以通过SIM卡进行通话、发送短信和使用数据服务。 二、手机SIM卡托不良影响 SIM卡接触不良&#xff0c;造成信号中断&…

高新技术企业复审需要哪些材料?

高新技术企业复审需要准备以下材料&#xff1a; 《高新技术企业认定复审申请书》&#xff1b;高新技术企业证书&#xff1b;企业营业执照副本、税务登记证书&#xff08;复印件&#xff09;&#xff1b;企业职工人数、学历结构以及研发人员占企业职工的比例证明&#xff1b;五…