建设网站的好公司/seo优化推广公司
在 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 会将最终的文件系统(根文件系统)打包并构建为镜像(例如 ext4
、tar
格式等)。这是通过 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
阶段是决定文件最终拷贝到哪里并打包的关键部分。
相关文章:

yocto的xxx.bb文件在什么时候会拷贝文件到build目录
在 Yocto 中,.bb 文件用于描述如何构建和安装一个软件包,而文件在构建过程中的拷贝操作通常会在某些特定的步骤中进行。具体来说,文件会在以下几个阶段被拷贝到 build 目录(或者更准确地说,拷贝到目标目录 ${D}&#x…...

Ubuntu Server 22.04.5 LTS重启后IP被重置问题
Ubuntu Server 22.04.5 LTS重启后IP被重置问题 最近在使用Ubuntu Server 22.04做项目开发测试时发现每次重启和关机后,所设置的静态IP地址都会回复到安装系统时所设置的ip Ubuntu Server 22.04 官网下载地址:Ubuntu官方下载地址 对虚拟机下安装Ubuntu感…...

Java基础复习
“任何时候我也不会满足,越是多读书,就越是深刻地感到不满足,越感到自己知识贫乏。科学是奥妙无穷的。” ——马克思 目录 一、方法&方法重载 二、运算符 三、数据类型 四、面向对象 1. 面向对象思想 2. 引用传递 3. 访问权限修饰…...

简易图书管理系统
javawebjspservlet 实体类 package com.ghx.entity;/*** author :guo* date :Created in 2024/12/6 10:13* description:* modified By:* version:*/ public class Book {private int id;private String name;private double pri…...

结构型-组合模式(Composite Pattern)
什么是组合模式 又名部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。 结构 抽象根节点(Co…...

【知识堂】大数据
一、大数据的基本概念 什么是大数据? 大数据(Big Data)是指无法通过传统工具和方法在合理时间内处理的海量数据集合。其关键特征是4V,即数据量大(Volume)、数据种类多(Variety)、处…...

力扣C语言刷题记录(三)搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1,3,5,6], target 5 输出: 2示例 2: 输入:…...

在Node.js局域网调试https的Vue项目
需求: 最近在测试在网页端(HTML5)调用移动设备的定位等权限功能,发现某些功能是必须保证域名在https下的否则会出现不正常现象。 解决: 1.在线生成和证书 访问:CSR文件生成工具-中国数字证书CHINASSL …...

3.5 认识决策树
3.5 认识决策树 3.5.1 认识决策树 如何高效的进行决策? 特征的先后顺序 3.5.2 决策树分类原理详解 已知有四个特征,预测 是否贷款给某个人。 先看房子,再看工作,是否贷款。 年龄,信贷情况,工作&#…...

股市复盘笔记
复盘是股市投资中非常重要的一个环节,它指的是投资者在股市收盘后,对当天的市场走势、个股表现以及自己的交易行为进行回顾和总结,以便更好地指导未来的投资决策。以下是对复盘的详细解释: 一、复盘的目的 总结市场走势ÿ…...

Canal 深入解析:从原理到实践的全面解读
Canal 深入解析:从原理到实践的全面解读 官网:https://github.com/alibaba/canal Canal 是阿里巴巴开源的一款分布式增量数据同步工具,广泛应用于数据同步、实时数据处理和数据库的增量备份等场景。它可以通过监听 MySQL 数据库的 binlog&am…...

SQL SERVER 2016 AlwaysOn 无域集群+负载均衡搭建与简测
之前和很多群友聊天发现对2016的无域和负载均衡满心期待,毕竟可以简单搭建而且可以不适用第三方负载均衡器,SQL自己可以负载了。windows2016已经可以下载使用了,那么这回终于可以揭开令人憧憬向往的AlwaysOn2016 负载均衡集群的神秘面纱了。 …...

解决 Maven 部署中的 Artifact 覆盖问题:实战经验分享20241204
🛠️ 解决 Maven 部署中的 Artifact 覆盖问题:实战经验分享 📌 引言 在软件开发过程中,持续集成和持续部署(CI/CD)是提高开发效率和代码质量的关键手段。Hudson 和 Maven 是两种广泛使用的工具࿰…...

【开源免费】基于SpringBoot+Vue.JS中小型医院网站(JAVA毕业设计)
博主说明:本文项目编号 T 078 ,文末自助获取源码 \color{red}{T078,文末自助获取源码} T078,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析…...

Linux CentOS
阿里云开源镜像下载链接 https://mirrors.aliyun.com/centos/7/isos/x86_64/ VMware 安装 CentOS7 自定义 下一步 选择稍后安装操作系统 选择 输入 查看物理机CPU内核数量 CtrlShiftEsc 总数不超过物理机内核数量 推荐内存 自选 推荐 推荐 默认 拆分成多个 默认 自定义硬件…...

Android SurfaceFlinger layer层级
壁纸作为显示的最底层窗口它是怎么显示的 1. SurfaceFlinger layer层级 锁屏状态dump SurfaceFlinger ,adb shell dumpsys SurfaceFlinger Display 0 (active) HWC layers: -----------------------------------------------------------------------------------…...

spark-sql配置教程
1.前期准备 (1)首先要把hadoop集群,hive和spark等配置好 hadoop集群,hive的配置可以看看这个博主写的博客 大数据_蓝净云的博客-CSDN博客 或者看看黑马程序员的视频 黑马程序员大数据入门到实战教程,大数据开发必…...

生成表格pdf格式
1. 添加依赖 <dependency><groupId>com.itextpdf</groupId><artifactId>kernel</artifactId><version>7.2.5</version></dependency><dependency><groupId>com.itextpdf</groupId><artifactId>layout…...

C++ 游戏开发的前沿趋势:从光线追踪到人工智能的全新挑战
随着游戏行业的快速发展,技术的不断进步为游戏开发带来了前所未有的机遇和挑战。从逼真的光影效果到复杂的物理模拟,再到智能化的非玩家角色(NPC)行为和玩家交互,现代游戏的技术需求已经超越了传统的图形渲染与场景搭建…...

微信小程序3-显标记信息和弹框
感谢阅读,初学小白,有错指正。 一、实现功能: 在地图上添加标记点后,标记点是可以携带以下基础信息的,如标题、id、经纬度等。但是对于开发来说,这些信息还不足够,而且还要做到点击标记点时&a…...

EasyNVR中HTTP-FLV协议无法播放怎么解决?
在科技日新月异的今天,摄像头作为公共安全领域的重要一环,其技术的不断提升正显著地改变着社会的安全格局。从最初的简单监控到如今的高清智能分析,我们可以对特定区域进行实时监控和记录,为社会的安全稳定提供了强有力的保障。 问…...

spring cloud之ribbon复习回顾
其实在项目中直接使用ribbon时不多,大多是使用feign的,其实feign底层也是通过ribbon构建的,主要记忆一下计算规则,ribbon的源码还是很不错的,还是值得学习的。 1、添加pom <dependency><groupId>org.spr…...

RFT 强化微调
OpenAI在今天发布的新技术,RFT结合了SFT和RL的优化算法,与传统的监督微调不同,强化微调旨在通过任务训练让模型掌握复杂推理能力,而不仅仅是“记住答案”。 什么是强化微调 强化微调是通过高质量任务数据和参考答案优化大语言模型…...

SpringBoot教程(三十二) SpringBoot集成Skywalking链路跟踪
SpringBoot教程(三十二) | SpringBoot集成Skywalking链路跟踪 一、Skywalking是什么?二、Skywalking与JDK版本的对应关系三、Skywalking下载四、Skywalking 数据存储五、Skywalking 的启动六、部署探针 前提: Agents 8.9.0 放入 …...

分布式搜索引擎Elasticsearch
Elasticsearch是一个基于Lucene库的开源分布式搜索引擎,它被设计用于云计算中,能够实现快速、near-real-time的搜索,并且可以进行大规模的分布式索引。 以下是一个简单的Python代码示例,展示如何使用Elasticsearch的Python客户端…...

在Vue.js中生成二维码(将指定的url+参数 生成二维码)
在Vue.js中生成二维码,你可以使用JavaScript库如qrcode或qr.js。以下是一个简单的例子,展示如何在Vue组件中使用qrcode库将指定的URL加上参数生成二维码。 首先,你需要安装qrcode库。如果你使用的是npm或yarn,可以通过命令行安装…...

统信桌面专业版部署postgresql-14.2+postgis-3.2方法介绍
文章来源:统信桌面专业版部署postgresql-14.2postgis-3.2方法介绍 | 统信软件-知识分享平台 应用场景 CPU架构:X86(海光C86-3G 3350) OS版本信息:1070桌面专业版 软件信息:postgresql-14.2postgis-3.2 …...

数字图像处理(16):RGB与HSV互转
(1)HSV颜色模型:HSV颜色模型,又称为六角锥体模型,以色调(H)、饱和度(S)、亮度(V)为基础,能够更加自然地表现和处理颜色,因…...

web组态可视化编辑器
随着工业智能制造的发展,工业企业对设备可视化、远程运维的需求日趋强烈,传统的单机版组态软件已经不能满足越来越复杂的控制需求,那么实现web组态可视化界面成为了主要的技术路径。 行业痛点 对于软件服务商来说,将单机版软件转…...

数组 - 八皇后 - 困难
************* C topic: 面试题 08.12. 八皇后 - 力扣(LeetCode) ************* Good morning, gays, Fridary angin and try the hard to celebrate. Inspect the topic: This topic I can understand it in a second. And I do rethink a movie, …...