当前位置: 首页 > news >正文

Yocto Project 快速构建

此文为机器辅助翻译,仅供个人学习使用,如有翻译不当之处欢迎指正

1 Yocto 项目快速构建

1.1 欢迎!

本简短文档将引导您完成使用 Yocto Project 进行典型镜像构建的流程,并介绍如何为特定硬件配置构建环境。您将使用 Yocto Project 构建一个名为 Poky 的参考嵌入式操作系统。

[!NOTE]

  • 本文中的示例假定您使用的是运行最新 Ubuntu Linux 发行版的原生 Linux 系统。如果您希望用于通过 Yocto Project 构建镜像的机器(构建主机)并非原生 Linux 系统,仍可通过使用跨平台工具(CROPS)并设置 Poky 容器来执行这些步骤。更多信息请参阅《Yocto Project 开发任务手册》中的 “设置使用跨平台工具(CROPS)” 章节。

  • 您可以使用适用于 Linux 的 Windows 子系统版本 2(WSL 2)在 Windows 10 或更高版本、Windows Server 2019 或更高版本上设置构建主机。更多信息请参阅《Yocto Project 开发任务手册》中的 “设置使用适用于 Linux 的 Windows 子系统(WSL 2)” 章节。

如果您需要有关 Yocto 项目的更多概念或背景信息,请参阅Yocto 项目概述和概念手册。

1.2 兼容的Linux发行版

确保您的构建主机满足以下要求:

  • 至少需要 90 GB 的可用磁盘空间,但更多的空间将有助于运行多个构建并通过重用构建工件来提高性能。
  • 至少 8 GB 的 RAM,尽管强烈建议使用具有尽可能多的 RAM 和尽可能多的 CPU 内核的现代构建主机来最大限度地提高构建性能。
  • 运行受支持的 Linux 发行版(例如 Fedora、openSUSE、CentOS、Debian 或 Ubuntu 的最新版本)。有关支持 Yocto 项目的 Linux 发行版列表,请参阅 Yocto 项目参考手册中的“支持的 Linux 发行版” 部分。有关准备构建主机的详细信息,请参阅 Yocto 项目开发任务手册中的“准备构建主机”部分。
    • Git 1.8.3.1 或更高版本
    • tar 1.28 或更高版本
    • Python 3.8.0 或更高版本。
    • gcc 8.0 或更高版本。
    • GNU make 4.0 或更高版本

如果您的构建主机不满足以上三个版本要求中的任何一个,您可以采取措施准备系统,以便继续使用 Yocto 项目。有关详细信息,请参阅 Yocto 项目参考手册中“所需的 Git、tar、Python、make 和 gcc 版本” 部分。

1.3 构建主机软件包

您必须在构建主机上安装必要的主机软件包。以下命令基于 Ubuntu 发行版安装主机软件包:

$ sudo apt install build-essential chrpath cpio debianutils diffstat file gawk gcc git iputils-ping libacl1 liblz4-tool locales python3 python3-git python3-jinja2 python3-pexpect python3-pip python3-subunit socat texinfo unzip wget xz-utils zstd

[!NOTE]

有关所有受支持的 Linux 发行版上的主机包要求,请参阅 Yocto 项目参考手册中的构建主机所需包部分。

1.4 使用 Git 克隆 Poky

完成机器的设置说明后,您需要在构建主机上获取 Poky 仓库的副本。使用以下命令克隆 Poky 仓库。

$ git clone git://git.yoctoproject.org/poky
Cloning into 'poky'...
remote: Counting
objects: 432160, done. remote: Compressing objects: 100%
(102056/102056), done. remote: Total 432160 (delta 323116), reused
432037 (delta 323000) Receiving objects: 100% (432160/432160), 153.81 MiB | 8.54 MiB/s, done.
Resolving deltas: 100% (323116/323116), done.
Checking connectivity... done.

转到发布 wiki 页面,然后选择一个发布代号(例如styhead),对应于最新的稳定版本或长期支持版本。

然后移动到poky目录并查看现有分支:

$ cd poky
$ git branch -a
.
.
.
remotes/origin/HEAD -> origin/master
remotes/origin/dunfell
remotes/origin/dunfell-next
.
.
.
remotes/origin/gatesgarth
remotes/origin/gatesgarth-next
.
.
.
remotes/origin/master
remotes/origin/master-next
.
.
.

对于此示例,请根据版本styhead检查分支StyheadStyhead为youcto5.1):

$ git checkout -t origin/styhead -b my-styhead
Branch 'my-styhead' set up to track remote branch 'styhead' from 'origin'.
Switched to a new branch 'my-styhead'

前面的 Git checkout 命令创建了一个名为 的本地分支 my-styhead。该分支中可用的文件与styhead 发布分支中仓库的文件完全匹配。

注意,您可以定期在同一目录中键入以下命令,以使本地文件与发布分支保持同步:

$ git pull

有关访问 Yocto 项目相关存储库的更多选项和信息,请参阅 Yocto 项目开发任务手册中的定位 Yocto 项目源文件部分。

1.5 建立你的镜像

使用以下步骤构建您的镜像。构建过程会从源代码创建完整的 Linux 发行版,包括工具链。

[!NOTE]

  • 如果您在防火墙后工作,并且您的构建主机未设置代理,则在获取源代码时可能会遇到构建过程的问题(例如,获取器故障或 Git 故障)。

  • 如果您不清楚自己的代理设置,请咨询您当地的网络基础设施资源并获取相关信息。检查您的网络浏览器设置也是一个不错的起点。最后,您可以在Yocto 项目 Wiki 的“使用网络代理”页面上找到更多信息。

1.初始化构建环境:poky 目录中,运行oe-init-build-env 环境设置脚本来在构建主机上定义 Yocto 项目的构建环境。

$ cd poky
$ source oe-init-build-env
You had no conf/local.conf file. This configuration file has therefore been
created for you with some default values. You may wish to edit it to, for
example, select a different MACHINE (target hardware). See conf/local.conf
for more information as common configuration options are commented.You had no conf/bblayers.conf file. This configuration file has therefore
been created for you with some default values. To add additional metadata
layers into your configuration please add entries to conf/bblayers.conf.The Yocto Project has extensive documentation about OE including a reference
manual which can be found at:https://docs.yoctoproject.orgFor more information about OpenEmbedded see their website:https://www.openembedded.org/### Shell environment set up for builds. ###You can now run 'bitbake <target>'Common targets are:core-image-minimalcore-image-full-cmdlinecore-image-satocore-image-westonmeta-toolchainmeta-ide-supportYou can also run generated QEMU images with a command like 'runqemu qemux86-64'Other commonly useful commands are:- 'devtool' and 'recipetool' handle common recipe tasks- 'bitbake-layers' handles common layer tasks- 'oe-pkgdata-util' handles common target package tasks

除此之外,该脚本还会创建构建目录, build在本例中,它位于源目录中。脚本运行后,您的当前工​​作目录将设置为 构建目录。稍后,当构建完成时, 构建目录将包含构建期间创建的所有文件。

2.检查本地配置文件:在设置构建环境时,构建目录的 conf 子目录中会生成一个名为 local.conf 的本地配置文件。在本示例中,默认配置为针对 qemux86 目标进行构建,该目标适用于仿真环境。所使用的软件包管理器设置为 RPM 软件包管理器。

[!tip]
通过使用共享状态缓存镜像并启用哈希等效性,您可以显著加快构建速度并防范获取程序故障。这样一来,您可以直接使用预构建工件,而无需重新构建。这仅在您的网络和所使用的服务器能够以快于本地构建的速度下载这些工件时才有意义。

要使用此类镜像,请在构建目录的conf/local.conf文件中取消注释以下行:

>    BB_HASHSERVE_UPSTREAM = "wss://hashserv.yoctoproject.org/ws"
>    SSTATE_MIRRORS ?= "file://.* http://cdn.jsdelivr.net/yocto/sstate/all/PATH;downloadfilename=PATH"
>    BB_HASHSERVE = "auto"
>    BB_SIGNATURE_HANDLER = "OEEquivHash"

哈希等效性服务器需要 Python 的websockets模块版本 9.1 或更高。Debian GNU/Linux 12(Bookworm)及更高版本、Fedora、CentOS Stream 9 及更高版本,以及 Ubuntu 22.04(LTS)及更高版本均包含足够新的软件包。其他受支持的发行版需要从软件包源以外的渠道(如通过pip)获取该模块。

3.开始构建: 继续使用以下命令为目标构建操作系统映像,在本例中为core-image-sato

    $ bitbake core-image-sato

有关使用该bitbake命令的信息,请参阅 Yocto 项目概述和概念手册中的 BitBake部分,或参阅 BitBake 用户手册中的BitBake 命令。

4.使用 QEMU 模拟您的图像: 一旦构建了此特定图像,您就可以启动 QEMU,它是 Yocto 项目附带的快速模拟器:

    $ runqemu qemux86-64

如果您想了解有关运行 QEMU 的更多信息,请参阅 Yocto 项目开发任务手册中的使用快速模拟器 (QEMU)章节。

5.退出 QEMU: 可通过点击关机图标,或在启动 QEMU 的命令行窗口中输入 Ctrl-C 来退出 QEMU。

1.6 针对特定硬件定制您的构建

到目前为止,您所做的只是快速构建了一个仅适用于模拟的映像。本节将向您展示如何通过在 Yocto 项目开发环境中添加硬件层来针对特定硬件定制您的构建。

一般来说,层是包含相关指令和配置集的存储库,这些指令和配置集指示 Yocto 项目执行哪些操作。将相关元数据隔离到功能特定的层中,有助于模块化开发,并使层元数据的复用更加容易。

[!NOTE]

按照惯例,层名称以字符串“meta-”开头。

按照以下步骤添加硬件层:

1.查找层: 有多种硬件层可用。Yocto 项目 源代码库包含许多硬件层。本示例添加了 meta-altera硬件层。

2.克隆层: 使用 Git 在你的机器上创建该层的本地副本。你可以将副本放在之前创建的 Poky 仓库副本的顶层:

$ cd poky$ git clone https://github.com/kraj/meta-altera.gitCloning into 'meta-altera'...remote: Counting objects: 25170, done.remote: Compressing objects: 100% (350/350), done.remote: Total 25170 (delta 645), reused 719 (delta 538), pack-reused 24219Receiving objects: 100% (25170/25170), 41.02 MiB | 1.64 MiB/s, done.Resolving deltas: 100% (13385/13385), done.Checking connectivity... done.

硬件层现在可以在构建主机上的 Poky 参考存储库内的其他层旁边使用,meta-altera并且包含支持英特尔旗下 Altera 硬件所需的所有元数据。

[!NOTE]

建议每个 Yocto 项目版本都为层创建一个分支。请务必检查支持您正在使用的 Yocto 项目版本的层分支。

3.更改配置以针对特定机器进行构建: 文件中的 MACHINE变量 local.conf指定用于构建的机器。在本例中,将MACHINE变量设置为cyclone5。以下配置可供使用: https://github.com/kraj/meta-altera/blob/master/conf/machine/cyclone5.conf。

[!NOTE]

有关配置构建的更多信息,请参阅前面的“检查本地配置文件”步骤。

3.将您的层添加到层配置文件: 在构建期间使用层之前,您必须将其添加到您的bblayers.conf 文件中,该文件位于构建目录 conf目录中。

使用bitbake-layers add-layer命令将层添加到配置文件中:

$ cd poky/build
$ bitbake-layers add-layer ../meta-altera
NOTE: Starting bitbake server...
Parsing recipes: 100% |##################################################################| Time: 0:00:32
Parsing of 918 .bb files complete (0 cached, 918 parsed). 1401 targets,
123 skipped, 0 masked, 0 errors.

您可以在使用 bitbake-layers 脚本添加图层部分中找到有关添加图层的更多信息 。

完成这些步骤后,该层已添加meta-altera到您的 Yocto 项目开发环境中,并将其配置为为机器构建 cyclone5

[!NOTE]

上述步骤仅供演示之用。如果您尝试为该cyclone5机器构建镜像,则应阅读 Altera 的相关文档README

1.7 创建您自己的通用层

也许你有一个应用程序或特定的一组行为需要进行隔离处理。你可以使用bitbake-layers create-layer命令创建自己的通用层。该工具会自动创建层,它会设置一个包含layer.conf配置文件的子目录、一个recipes-example子目录(其中包含一个example.bb配方文件)、一个许可文件以及一个README文件。

以下命令运行该工具来创建 目录meta-mylayer中命名的层poky

$ cd poky
$ bitbake-layers create-layer meta-mylayer
NOTE: Starting bitbake server...
Add your new layer with 'bitbake-layers add-layer meta-mylayer'

有关图层以及如何创建它们的更多信息,请参阅 Yocto 项目开发任务手册中的使用 bitbake-layers 脚本创建通用图层部分。

1.8 下一步去哪里

现在您已经体验过 Yocto 项目,您可能会问自己“接下来该做什么?”。Yocto 项目有很多信息来源,包括网站、维基页面和用户手册:

  • 网站:Yocto 项目网站提供背景信息、最新版本、突发新闻、完整的开发文档以及可供您利用的丰富的 Yocto 项目开发社区的访问权限。

  • 视频研讨会:Yocto 项目和 BitBake 简介,第 1 部分和Yocto 项目和 BitBake 简介,第 2 部分视频提供了一个视频研讨会,向您介绍使用 Yocto 项目开发自定义嵌入式 Linux 发行版的最重要方面。

  • Yocto 项目概述和概念手册: Yocto 项目概述和概念手册是了解 Yocto 项目的理想入门指南。本手册将向您介绍 Yocto 项目及其开发环境。此外,本手册还提供了 Yocto 项目各个方面的概念性信息。

  • Yocto 项目 Wiki: Yocto项目 Wiki 提供了有关在推进 Yocto 项目时下一步行动、发布信息、项目规划和 QA 信息的更多信息。

  • **Yocto 项目邮件列表:**相关邮件列表提供了一个讨论、提交补丁和发布公告的平台。这里有多个按主题分组的邮件列表。请参阅 Yocto 项目参考手册中的“邮件列表” 部分,查看 Yocto 项目邮件列表的完整列表。

  • 链接和其他文档的综合列表: Yocto 项目参考手册中的链接和相关文档部分提供了所有相关链接和其他用户文档的综合列表 。

相关文章:

Yocto Project 快速构建

此文为机器辅助翻译&#xff0c;仅供个人学习使用&#xff0c;如有翻译不当之处欢迎指正 1 Yocto 项目快速构建 1.1 欢迎&#xff01; 本简短文档将引导您完成使用 Yocto Project 进行典型镜像构建的流程&#xff0c;并介绍如何为特定硬件配置构建环境。您将使用 Yocto Proj…...

git相关配置

git相关配置 欢迎使用Markdown编辑器修改Git默认编辑器为vimgit配置默认用户名和密码&#xff1a; 欢迎使用Markdown编辑器 修改Git默认编辑器为vim #方法1&#xff1a;直接执行 git config --global core.editor vim#方法2&#xff1a;修改git的配置文件.git/config文件&am…...

ci/cd全流程实操

本次采用架构,gitlab + jenkins + 镜像仓库+ k8s 准备工作 一、gitlab部署 拉取镜像 部署环境: macbook m2中docker部署gitlab (m2平台架构问题,这里只能用yrzr/gitlab-ce-arm64v8 这个容器镜像) docker pull yrzr/gitlab-ce-arm64v8 在 Docker 里,–privileged=tr…...

Python中in和is关键字详解和使用

在 Python 中&#xff0c;in 和 is 是两个常用但含义不同的关键字&#xff0c;初学者很容易混淆它们的用法。下面是关于它们的详细解释、注意事项及常见示例。 一、关键字 in&#xff1a;成员运算符 1. 功能 用于判断某个元素是否存在于序列&#xff08;如列表、元组、字符串…...

ACM模式用Scanner和System.out超时的解决方案和原理

Hi~&#xff01;这里是奋斗的明志&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f331;&#x1f331;个人主页&#xff1a;奋斗的明志 &#x1f331;&#x1f331;所属专栏&#xff1a;笔试强训 &#x1f4da;本系列文章为个人学…...

微服务中服务降级和异常的区别

在Java中&#xff0c;服务降级和异常处理是两个相关但不同的概念。它们的主要区别如下&#xff1a; 1. 服务降级&#xff08;Service Degradation&#xff09;: 定义&#xff1a;服务降级是指在系统中某个服务或功能出现问题时&#xff0c;通过采取某些策略来降低服务的质量或…...

MYSQL创建索引的原则

创建索引的原则包括&#xff1a; 表中的数据量超过10万以上时考虑创建索引。 选择查询频繁的字段作为索引&#xff0c;如查询条件、排序字段或分组字段。 尽量使用复合索引&#xff0c;覆盖SQL的返回值。 如果字段区分度不高&#xff0c;可以将其放在组合索引的后面。 对于…...

29、魔法微前端——React 19 模块化架构

一、时空结界分割术&#xff08;模块化架构设计&#xff09; 1. 次元切割协议 // 主应用入口const HogwartsMain () > {const [subApps] useState({potion: React.lazy(() > import(./PotionShop)),library: React.lazy(() > import(./LibraryApp)),quidditch: R…...

【PmHub后端篇】PmHub 中缓存与数据库一致性的实现方案及分析

在软件开发项目中&#xff0c;缓存的使用十分普遍。缓存作为一种存储机制&#xff0c;能够暂时保存数据&#xff0c;从而加速数据的读取和访问。然而&#xff0c;当数据同时存在于缓存和数据库中时&#xff0c;如何保证两者的数据一致性成为了一个关键问题。在 PmHub 项目中&am…...

Verilog HDL 语言整理

Verilog HDL 语言 Verilog HDL 简介 硬件描述语言Hardware Description Language是一种用形式化方法即文本形式 来描述和设计数字电路和数字系统的高级模块化语言 Verilog HDL&#xff08;Hardware Description Language&#xff09;是一种硬件描述语言&#xff0c;用于建模…...

[250516] OpenAI 升级 ChatGPT:GPT-4.1 及 Mini 版上线!

目录 ChatGPT 迎来重要更新&#xff1a;GPT-4.1 和 GPT-4.1 mini 正式上线用户如何访问新模型&#xff1f;技术亮点与用户体验优化 ChatGPT 迎来重要更新&#xff1a;GPT-4.1 和 GPT-4.1 mini 正式上线 OpenAI 宣布在 ChatGPT 平台正式推出其最新的 AI 模型 GPT-4.1 和 GPT-4.…...

R语言学习--Day03--数据清洗技巧

在一般情况下&#xff0c;我们都是在数据分析的需求前提下去选择使用R语言。而实际上&#xff0c;数据分析里&#xff0c;百分之八十的工作&#xff0c;都是在数据清洗。并不只是我们平时会提到的异常值处理或者是整合格式&#xff0c;更多会涉及到将各种各样的数据整合&#x…...

文件系统交互实现

关于之前的搭建看QT控件文件系统的实现-CSDN博客&#xff0c;接下来是对本程序的功能完善&#xff0c;我想着是这样设计的&#xff0c;打开一个目录以后&#xff0c;鼠标选中一个项可以是目录&#xff0c;也可以是文件&#xff0c;右键可以出现一个菜单选择操作&#xff0c;比如…...

SqlHelper 实现类,支持多数据库,提供异步操作、自动重试、事务、存储过程、分页、缓存等功能。

/// <summary> /// SqlHelper 实现类&#xff0c;支持多数据库&#xff0c;提供异步操作、自动重试、事务、存储过程、分页、缓存等功能。 /// </summary> public class SqlHelper : IDbHelper {private readonly IDbConnectionFactory _connectionFactory;private…...

DevExpressWinForms-RichEditControl-基础应用

RichEditControl-基础应用 在企业级WinForms应用开发中&#xff0c;富文本编辑与文档处理是常见需求。DevExpress WinForms的RichEditControl作为一款功能强大的富文本编辑控件&#xff0c;提供了媲美Microsoft Word的文档处理能力&#xff0c;支持复杂格式编辑、打印导出、界…...

Elasticsearch 索引副本数

作者&#xff1a;来自 Elastic Kofi Bartlett 解释如何配置 number_of_replicas、它的影响以及最佳实践。 更多阅读&#xff1a;Elasticsearch 中的一些重要概念: cluster, node, index, document, shards 及 replica 想获得 Elastic 认证&#xff1f;查看下一期 Elasticsearc…...

RabbitMQ 扇形交换器工作原理详解

目录 一、扇形交换器简介二、扇形交换器工作原理2.1 消息广播机制2.2 路由键的忽略三、代码示例3.1 生产者代码3.2 消费者代码四、实际应用场景4.1 日志收集系统4.2 实时通知系统4.3 事件驱动架构五、总结在 RabbitMQ 的众多交换器类型中,扇形交换器(Fanout Exchange)是一种…...

IDEA中springboot项目中连接docker

具体内容如下&#xff1a; 1、在Linux中安装docker 使用安装命令&#xff1a; apt-get install docker.io 还有一个是更新软件并安装docker&#xff1a; sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io 运行docker systemctl start …...

arxiv等开源外文书数据的获取方式

一、一些基本说明 开放API接口文档&#xff1a;https://info.arxiv.org/help/api/user-manual.html#2-api-quickstart研究领域分类说明文档&#xff1a;https://arxiv.org/category_taxonomy 二、基于url接口方式检索并获取数据 本质是get方式&#xff0c;在url中传检索参数…...

ChatGPT再升级!

近日&#xff0c;OpenAI 正式发布 GPT-4.1 和轻量级版本 GPT-4.1mini&#xff0c;并已全面上线 ChatGPT 平台&#xff0c;迅速引发全球 AI 圈热议&#xff0c;标志着 ChatGPT 在智能化和效率上再登新高峰。 GPT-4.1 是为编程与任务处理优化的高性能模型。相较前作 GPT-4o&#…...

23、电网数据管理与智能分析 - 负载预测模拟 - /能源管理组件/grid-data-smart-analysis

76个工业组件库示例汇总 电网数据管理与智能分析组件 1. 组件概述 本组件旨在模拟一个城市配电网的运行状态&#xff0c;重点关注数据管理、可视化以及基于模拟数据的智能分析&#xff0c;特别是负载预测功能。用户可以通过界面交互式地探索电网拓扑、查看节点状态、控制时间…...

#跟着若城学鸿蒙# web篇-获取定位

前言 在业务中&#xff0c;某些网页上需要获取用户的地理位置&#xff0c;然后按照用户搜索的兴趣点与用户的距离远近进行排序&#xff0c;这就需要h5能够获取到用户的位置。 由于 web 组件基于Chromium M114 版本开发&#xff0c;前端就可以使用navigator.geolocation.getC…...

前端批量下载文件打包为zip

多文件需要一次性下载为zip文件 这是近期遇到的一个需求&#xff0c;本身是多文件上传的&#xff0c;下载时单个下载太慢又繁杂&#xff0c;用户希望能一次性批量下载&#xff0c;就选择了jszip import axios from "axios" import JSZip from "jszip" im…...

Vue百日学习计划Day9-15天详细计划-Gemini版

重要提示&#xff1a; 番茄时钟&#xff1a; 每个番茄钟为25分钟学习&#xff0c;之后休息5分钟。每完成4个番茄钟&#xff0c;进行一次15-30分钟的长休息。灵活性&#xff1a; JavaScript 的概念较多&#xff0c;尤其是 this、原型链、闭包和异步编程&#xff0c;可能需要更多…...

MySQL8.x新特性:与mysql5.x的版本区别

MySQL8.x新特性 1.与mysql5.x的区别&#xff1a;MySQL8.x新特性&#xff1a;与mysql5.x的版本区别-CSDN博客 2.窗口函数&#xff08;Window Functions&#xff09;&#xff1a;MySQL8.x新特性&#xff1a;窗口函数&#xff08;Window Functions&#xff09;-CSDN博客 引言 …...

RabbitMQ 消息模式实战:从简单队列到复杂路由(三)

精准投递&#xff1a;路由模式 路由模式详解 路由模式是 RabbitMQ 中一种功能强大且灵活的消息传递模式&#xff0c;它在发布订阅模式的基础上&#xff0c;引入了路由键&#xff08;Routing Key&#xff09;的概念&#xff0c;实现了消息的精准路由和分发 。在路由模式中&…...

STM32 定时器主从模式配置解析

STM32 定时器主从模式配置解析 下面这两行代码是配置STM32定时器主从模式的关键设置 代码功能解析 TIM_SelectInputTrigger(TIM3, TIM_TS_TI2FP2); // 选择从模式输出的触发源 TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset); // 选择从模式1. TIM_SelectInputTrigger(T…...

Leetcode76覆盖最小子串

覆盖最小子串 代码来自b站左程云 class Solution {public String minWindow(String str, String tar) {char[] s str.toCharArray();char[] t tar.toCharArray();int[] cnt new int[256];for (char cha : t) { cnt[cha]--;}int len Integer.MAX_VALUE;int debt t.length…...

Perl语言深度考查:从文本处理到正则表达式的全面掌握

阅读原文 前言&#xff1a;为什么Perl依然值得学习&#xff1f; "这个脚本用Perl写只需要5分钟&#xff01;"——在当今Python大行其道的时代&#xff0c;你依然能在不少企业的运维部门听到这样的对话。Perl作为一门有着30多年历史的语言&#xff0c;凭借其强大的文…...

idea中Lombok失效的解决方案

Lombok 是一个 Java 库&#xff0c;旨在通过注解简化 Java 代码的编写&#xff0c;减少样板代码&#xff0c;提高开发效率。它通过自动生成常见的代码&#xff08;如 getter、setter、构造函数等&#xff09;来减少开发者的手动编码工作。 一般Lombok失效有四步排查方案&#…...

【LeetCode 热题 100】动态规划 系列

&#x1f4c1; 70. 爬楼梯 状态标识&#xff1a;爬到第i层楼梯时&#xff0c;有多少种方法。 状态转移方程&#xff1a;dp[i] dp[i-1] dp[i-2]&#xff0c;表示从走一步和走两步的方式。 初始化&#xff1a;dp[1] 1 , dp[2] 2。 返回值&#xff1a;dp[n]&#xff0c;即走到…...

刷leetcodehot100返航版--双指针5/16

for (int i 0, j 0; i < n; i ) { while (j < i && check(i, j)) j ; // 具体问题的逻辑 } 常见问题分类&#xff1a; (1) 对于一个序列&#xff0c;用两个指针维护一段区间 (2) 对于两个序列&#xff0c;维护某种次序&#xff0c;比如归并排序中…...

DAY24元组和OS模块

元组 元组的特点&#xff1a; 有序&#xff0c;可以重复&#xff0c;这一点和列表一样元组中的元素不能修改&#xff0c;这一点非常重要&#xff0c;深度学习场景中很多参数、形状定义好了确保后续不能被修改。 很多流行的 ML/DL 库&#xff08;如 TensorFlow, PyTorch, Num…...

CSS:三大特性

文章目录 一、层叠性二、继承性三、优先级 一、层叠性 二、继承性 可以在MDN网站上查看属性是否可以被继承 例如color 三、优先级...

Cross-Site Scripting(XSS)

1. XSS介绍 跨站脚本攻击&#xff08;Cross-Site Scripting&#xff09;简称XSS&#xff0c;人们经常将跨站脚本攻击&#xff08;Cross Site Scripting&#xff09;缩写为CSS&#xff0c;但这会与层叠样式表&#xff08;Cascading Style Sheets&#xff0c;CSS&#xff09;的缩…...

掌握HTML文件上传:从基础到高级技巧

HTML中input标签的上传文件功能详解 一、基础概念 1. 文件上传的基本原理 在Web开发中&#xff0c;文件上传是指将本地计算机中的文件&#xff08;如图片、文档、视频等&#xff09;传输到服务器的过程。HTML中的<input type"file">标签是实现这一功能的基础…...

WebRTC中的几个Channel

一、我指的是谁&#xff1f; 以视频为例&#xff0c;常见的有&#xff1a;MediaChannel、VideoMediaChannel、WebRtcVideoChannel、BaseChannel、VideoChannel&#xff0c;那么&#xff0c;为什么要这么多Channel&#xff0c;只写一个叫做SuperChannel行不行&#xff08;很多程…...

【设计模式】- 行为型模式1

模板方法模式 定义了一个操作中的算法骨架&#xff0c;将算法的一些步骤推迟到子类&#xff0c;使得子类可以不改变该算法结构的情况下重定义该算法的某些步骤 【主要角色】&#xff1a; 抽象类&#xff1a;给出一个算法的轮廓和骨架&#xff08;包括一个模板方法 和 若干基…...

容器化-k8s-使用和部署

一、K8s 使用 1、基本概念 集群: 由 master 节点和多个 slaver 节点组成,是 K8s 的运行基础。节点: 可以是物理机或虚拟机,是 K8s 集群的工作单元,运行容器化应用。Pod: K8s 中最小的部署单元,一个 Pod 可以包含一个或多个紧密相关的容器,这些容器共享网络和存储资源。…...

黑马k8s(九)

1.Pod-生命周期概述 2.Pod生命周期-创建和终止 3.Pod生命周期-初始化容器...

Android trace中CPU的RenderThread与GPU

Android trace中CPU的RenderThread与GPU RenderThread是系统的GPU绘制线程&#xff0c;GPU渲染就是通常所谓的硬件加速&#xff0c;如果应用关闭硬件加速&#xff0c;就没有了RenderThread&#xff0c;只有UI Thread&#xff0c;即Android主线程。 Android GPU渲染SurfaceFlin…...

测试工程师如何学会Kubernetes(k8s)容器知识

Kubernetes(K8s)作为云原生时代的关键技术之一&#xff0c;对于运维工程师、开发工程师以及测试工程师来说&#xff0c;都是一门需要掌握的重要技术。作为一名软件测试工程师&#xff0c;学习Kubernetes是一个有助于提升自动化测试、容器化测试以及云原生应用测试能力的重要过程…...

接触感知 钳位电路分析

以下是NG板接触感知电路的原理图。两极分别为P3和P4S&#xff0c;电压值P4S < P3。 电路结构分两部分&#xff0c;第一部分对输入电压进行分压钳位。后级电路使用LM113比较器芯片进行电压比较&#xff0c;输出ST接触感知信号。 钳位电路输出特性分析 输出电压变化趋势&a…...

码蹄集——圆包含

MT1181 圆包含 输入2个圆的圆心的坐标值&#xff08;x&#xff0c;y&#xff09;和半径&#xff0c;判断断一个圆是否完全包含另一个圆&#xff0c;输出YES或者NO。另&#xff1a;内切不算做完全包含。 格式 输入格式&#xff1a;输入整型&#xff0c;空格分隔。 每行输入一组…...

ConcurrentSkipListMap的深入学习

目录 1、介绍 1.1、线程安全 1.2、有序性 1.3、跳表数据结构 1.4、API 提供的功能 1.5、高效性 1.6、应用场景 2、数据结构 2.1、跳表&#xff08;Skip List&#xff09; 2.2、节点类型&#xff1a; 1.Node 2.Index 3.HeadIndex 2.3、特点 3、选择层级 3.1、随…...

ProfibusDP主站转modbusTCP网关接DP从站网关通讯案例

ProfibusDP主站转modbusTCP网关接DP从站网关通讯案例 在工业自动化领域&#xff0c;Profibus DP和Modbus TCP是两种常见的通信协议。Profibus DP广泛应用于过程自动化、工厂自动化等场景&#xff0c;而Modbus TCP则常见于楼宇自动化、能源管理等领域。由于设备和系统之间往往存…...

第一次做逆向

题目来源&#xff1a;ctf.show 1、下载附件&#xff0c;发现一个exe和一个txt文件 看看病毒加没加壳&#xff0c;发现没加那就直接放IDA 放到IDA找到main主函数&#xff0c;按F5反编译工具就把他还原成类似C语言的代码 然后我们看逻辑&#xff0c;将flag.txt文件的内容进行加…...

【项目】自主实现HTTP服务器:从Socket到CGI全流程解析

00 引言 ​ 在构建高效、可扩展的网络应用时&#xff0c;理解HTTP服务器的底层原理是一项必不可少的技能。现代浏览器与移动应用大量依赖HTTP协议完成前后端通信&#xff0c;而这一过程的背后&#xff0c;是由网络套接字驱动的请求解析、响应构建、数据传输等一系列机制所支撑…...

AI最新资讯,GPT4.1加入网页端、Claude 3.7 Sonnet携“极限推理”发布在即

目录 一、GPT4.1加入网页端二、Claude 3.7 Sonnet携“极限推理”发布在即三、这项功能的关键特点1、双模式操作2、可视化思考过程3、可控的思考预算4、性能提升 四、Claude制作SVG图像1、Prompt提示词模板2、demo&#xff1a;技术路线图**Prompt提示词&#xff1a;**3、甘特图4…...

Android 中使用通知(Kotlin 版)

1. 前置条件 Android Studio&#xff1a;确保使用最新版本&#xff08;2023.3.1&#xff09;目标 API&#xff1a;最低 API 21&#xff0c;兼容 Android 8.0&#xff08;渠道&#xff09;和 13&#xff08;权限&#xff09;依赖库&#xff1a;使用 WorkManager 和 Notificatio…...