驱动开发硬核特训 · Day 25 (附加篇):从设备树到驱动——深入理解Linux时钟子系统的实战链路
一、前言
在嵌入式Linux开发中,无论是CPU、外设控制器,还是简单的GPIO扩展器,大多数硬件模块都离不开时钟信号的支撑。
时钟子系统(Clock Subsystem),作为Linux内核中基础设施的一部分,为设备提供统一、灵活、可控的时钟管理机制。
然而,时钟子系统的工作方式常常隐藏在设备树配置与驱动框架之下,让初学者难以直观感知。
今天,我们将通过一个完整、清晰、实战化的例子,带你从设备树定义,到内核驱动调用核心API,全面理解时钟子系统的核心知识点和实际用途。
二、实战场景介绍
本次实战选取的例子是 —— UART 控制器(串口)。
在 i.MX8MP 平台上,UART1
控制器是一个非常典型的时钟消费者。它需要一个稳定的时钟源来驱动波特率生成器,确保数据收发的准确性。
三、设备树中的时钟配置
在设备树中,为每个时钟消费者(比如 UART)指定它需要的时钟源。来看具体的设备树片段(源自 i.MX8MP EVK 板):
&uart1 { /* BT UART */pinctrl-names = "default";pinctrl-0 = <&pinctrl_uart1>;assigned-clocks = <&clk IMX8MP_CLK_UART1>;assigned-clock-parents = <&clk IMX8MP_SYS_PLL1_80M>;uart-has-rtscts;status = "okay";
};
解释
assigned-clocks
:指定要配置的时钟节点(这里是UART1的根时钟)。assigned-clock-parents
:指定该时钟的上游父时钟(这里是系统PLL1输出的80MHz频率)。status = "okay"
:使能设备。
小结
在设备树中,UART1通过 assigned-clocks 指定了自己依赖的时钟源。
这一步是让内核启动时,能够正确配置 UART 所需时钟。
四、时钟子系统在内核中的处理流程
内核解析设备树时,会执行以下步骤:
-
解析 assigned-clocks 属性
- 调用
of_clk_get()
获取时钟phandle。
- 调用
-
设置父时钟(if assigned-clock-parents)
- 调用
clk_set_parent()
。
- 调用
-
设置频率(if assigned-clock-rates)
- 调用
clk_set_rate()
。
- 调用
-
将时钟与设备绑定
- 供后续驱动使用
clk_get()
提取并控制时钟。
- 供后续驱动使用
总结一句话:内核在启动时,根据设备树,把设备需要的时钟准备好,驱动层可以直接使用。
五、驱动中的核心函数调用链
进入驱动注册时,通常在 probe()
函数中,设备驱动需要主动申请并启用时钟。
来看典型的 Linux 串口驱动核心代码(以drivers/tty/serial/fsl_lpuart.c
为例):
static int lpuart_probe(struct platform_device *pdev)
{struct resource *res;struct clk *clk;struct lpuart_port *sport;// ... 省略其他初始化代码clk = devm_clk_get(&pdev->dev, NULL);if (IS_ERR(clk))return PTR_ERR(clk);clk_prepare_enable(clk);// 后续设置UART寄存器,开始工作return 0;
}
解释
devm_clk_get(&pdev->dev, NULL)
:从时钟子系统中获取设备绑定的时钟(根据设备树内容解析)。clk_prepare_enable(clk)
:准备并使能时钟,确保模块时钟打开,才能访问寄存器或工作。
这两个函数是驱动中最核心的标准时钟处理流程。
六、核心知识点总结
过程 | 内容 | 说明 |
---|---|---|
设备树定义 | 通过 assigned-clocks assigned-clock-parents | 指定设备需要使用的时钟及父时钟关系 |
内核解析设备树 | 使用 of_clk_get() 、clk_set_parent() 等接口 | 完成设备初步时钟配置 |
驱动中申请时钟 | 使用 devm_clk_get() 获取时钟句柄 | 与设备生命周期绑定,自动管理释放 |
启用时钟 | 使用 clk_prepare_enable() | 确保时钟开启,模块能够正常读写工作 |
关闭时钟 | 使用 clk_disable_unprepare() (通常在 remove 时) | 释放功耗资源,避免悬空开启 |
七、完整链路小结(可视化)
[设备树]|v
解析 assigned-clocks → 绑定 clk_hw → 初始化频率和父时钟|v
驱动 probe 阶段|v
devm_clk_get() 获取时钟|v
clk_prepare_enable() 打开时钟|v
模块正常运行
八、实战小问答(加深记忆)
-
Q:如果不调用
clk_prepare_enable()
会怎么样?
➔ A:设备可能无法正常访问寄存器(时钟门控),导致挂死或者硬件超时错误。 -
Q:为什么用
devm_clk_get()
?
➔ A:简化驱动资源管理,避免忘记释放时钟资源导致内存泄漏。 -
Q:时钟源一定是固定的吗?
➔ A:不一定,有些时钟(如CPU频率)是动态可变的,需要动态控制频率。
九、driver/clk/子系统的核心组成
在 Linux 内核中,driver/clk/ 目录下是整个 Common Clock Framework(CCF) 的具体实现。
它包含两大部分:
部分 | 作用 |
---|---|
核心框架代码(Generic) | 提供统一时钟注册、获取、启用、频率调整等API |
平台时钟驱动(Platform-specific) | 各芯片平台的具体时钟树实现,比如 imx8mp |
十、实战中最关键的核心文件和功能
我们只讲跟设备树解析、驱动使用真正相关的代码,不浪费篇幅。
目录/文件 | 作用 | 备注 |
---|---|---|
drivers/clk/clk.c | 核心通用时钟框架逻辑 | 所有 clk_register, clk_get, clk_prepare_enable 都在这里最终处理 |
drivers/clk/clk-fixed-rate.c | 实现固定频率的时钟(如设备树里的 fixed-clock) | 常用于 camera、USB、PCIE refclk |
drivers/clk/imx/clk-imx8mp.c | i.MX8MP 平台特有的时钟树搭建 | 把 IMX8MP 平台的所有时钟源、分频器、复用器建立起来 |
十一、真正重要的核心函数讲解(来自 driver/clk/clk.c)
11.1 clk_register()
🔵 作用:
在内核启动时,或者平台驱动初始化时,把一个新的时钟节点注册到内核的时钟树中。
🔵 主要流程:
- 将
struct clk_hw
转换为struct clk_core
- 将
clk_core
挂到内核全局时钟链表 - 处理时钟父子关系
🔵 关键源码位置:
struct clk *clk_register(struct device *dev, struct clk_hw *hw)
{struct clk_core *core;...core = kzalloc(sizeof(*core), GFP_KERNEL);core->hw = hw;...hlist_add_head(&core->node, &clk_root_list);return __clk_create_clk(core, NULL);
}
这里的 clk_core
是真正管理时钟状态的内部结构。
11.2 of_clk_get()
和 devm_clk_get()
🔵 作用:
of_clk_get()
:从设备树 phandle 提取时钟节点。devm_clk_get()
:在驱动中调用,帮你自动结合生命周期管理。
🔵 主要流程:
- 根据设备树 phandle 查找 clk_provider
- 通过 provider的
of_clk_src_onecell_get()
或类似接口拿到clk
🔵 关键源码位置:
struct clk *of_clk_get(struct device_node *np, int index)
{...provider = of_parse_phandle(np, "clocks", index);...return provider->get(provider->data, index);
}
最终就是在驱动层 devm_clk_get()
里面,调用 of_clk_get()
,并返回一个 clk 结构体给设备驱动用。
11.3 clk_prepare_enable()
和 clk_disable_unprepare()
🔵 作用:
- clk_prepare_enable():打开时钟,并确保硬件模块有时钟供给。
- clk_disable_unprepare():关闭时钟,释放资源。
🔵 核心调用逻辑:
int clk_prepare_enable(struct clk *clk)
{int ret;ret = clk_prepare(clk);if (ret)return ret;ret = clk_enable(clk);if (ret)clk_unprepare(clk);return ret;
}
本质就是调用底层时钟驱动注册时定义好的 enable/disable
函数指针。
比如:
- PLL的 enable
- gate clock 的开关
- mux clock 的切换
十二、fixed-clock 举例(drivers/clk/clk-fixed-rate.c)
在设备树中,如果定义了:
pcie0_refclk: pcie0-refclk {compatible = "fixed-clock";#clock-cells = <0>;clock-frequency = <100000000>;
};
内核会自动匹配到 drivers/clk/clk-fixed-rate.c
中的 of_fixed_clk_setup()
:
static void __init of_fixed_clk_setup(struct device_node *node)
{struct clk_fixed_rate *fixed;...fixed->hw.init = &init;clk_register(NULL, &fixed->hw);
}
➔ 最后也是通过 clk_register()
注册到内核时钟树。
所以:
fixed-clock
→ 固定频率的时钟节点- 设备(比如 PCIe PHY)可以直接引用它做为参考时钟
✨ 最重要总结(一句话)
✅ 无论是外设驱动,还是内核框架,
✅ 设备树 → of_clk_get → clk_register → clk_prepare_enable
✅ 整个链路最终就是围绕 clk_core 和 clk_ops 把时钟管理起来,
✅ 保证所有设备能统一管理时钟、动态调频、动态开关。
📋 最后再给你一张核心流程小图(助记忆)
[设备树 clocks属性]↓
[of_clk_get()]↓
[clk_register() 把hw挂到core]↓
[devm_clk_get()]↓
[clk_prepare_enable()]↓
[设备驱动正常工作]
相关文章:
驱动开发硬核特训 · Day 25 (附加篇):从设备树到驱动——深入理解Linux时钟子系统的实战链路
一、前言 在嵌入式Linux开发中,无论是CPU、外设控制器,还是简单的GPIO扩展器,大多数硬件模块都离不开时钟信号的支撑。 时钟子系统(Clock Subsystem),作为Linux内核中基础设施的一部分,为设备…...
数据结构---单链表的增删查改
前言: 经过了几个月的漫长岁月,回头时年迈的小编发现,数据结构的内容还没有写博客,于是小编赶紧停下手头的活动,补上博客以洗清身上的罪孽 目录 前言 概念: 单链表的结构 我们设定一个哨兵位头节点给链…...
【codeforces 2104D,E】欧拉筛,字符串上dp
【codeforces 2104D,E】欧拉筛,字符串上dp Problem - D - Codeforces 题意: 给定一个长度为 n n n的数组 a 1 , a 2 , . . . , a n a_1, a_2, ... , a_n a1,a2,...,an,其中 2 ≤ a i ≤ 1 0 9 2 \leq a_i \leq 10^9 2≤…...
UEC++第15天|番茄插件、实现跳跃、实现背景运动
这是flyBird的第二天,做了一些简单的功能,明天继续更新 vs的番茄插件 在visual stdudio里使用可以帮助代码补全,这一篇博客写的不错,大家可以参考一下。VS2019 安装番茄助手(Visual Assist x 插件)攻略_vs…...
论文笔记-基于多层感知器(MLP)的多变量桥式起重机自适应安全制动与距离预测
《IET Cyber-Systems and Robotics》出版山东大学 Tenglong Zhang 和 Guoliang Liu 团队的研究成果,文章题为“Adaptive Safe Braking and Distance Prediction for Overhead Cranes With Multivariation Using MLP”。 摘要 桥式起重机的紧急制动及其制动距离预测是…...
[论文阅读]Adversarial Semantic Collisions
Adversarial Semantic Collisions Adversarial Semantic Collisions - ACL Anthology Proceedings of the 2020 Conference on Empirical Methods in Natural Language Processing (EMNLP) 对抗样本是相似的输入但是产生不同的模型输出,而语义冲突是对抗样本的逆…...
Redis Sentinel 和 Redis Cluster 各自的原理、优缺点及适用场景是什么?
我们来详细分析下 Redis Sentinel (哨兵) 和 Redis Cluster (集群) 这两种方案的原理和使用场景。 Redis Sentinel (哨兵) 原理: Sentinel 本身是一个或一组独立于 Redis 数据节点的进程。它的核心职责是监控一个 Redis 主从复制 (Master-Slave) 架构。多个 Sentinel 进程协同…...
面向人工智能、量子科技、人形机器人等产业,山东启动制造业创新中心培育认定
从山东省工业和信息化厅了解到,2025年山东省制造业创新中心培育和认定已启动,重点面向全省传统优势产业、新兴产业及未来产业等领域,鼓励具备条件的龙头企业牵头创建省制造业创新中心。 今年,山东重点面向全省冶金、化工、轻工、…...
无锡哲讯科技:SAP财务系统——赋能企业智慧财务管理
数字化时代,财务管理的新挑战 在全球化竞争和数字经济快速发展的背景下,企业财务管理正面临前所未有的挑战。传统的财务核算方式效率低下、数据孤岛严重、决策滞后,难以满足现代企业高效运营的需求。如何实现财务数据的实时整合࿱…...
Linux命令使用记录(自用)
阿里开源镜像站:https://developer.aliyun.com/mirror/?spma2c6h.13651102.0.0.6c2a1b11I9pmUD&serviceTypemirror&tag top命令 top [选项] -p 只显示某个进程的信息 -d 设置刷新时间,默认是5s -c 显示产生进程的完整命令,默认是进程…...
Spring Security 的 CSRF 防护机制
CSRF:跨站请求伪造(Cross-Site Request Forgery) Spring Security 中的 .csrf() 是用来开启或配置这种保护机制,防止恶意网站“冒充用户”向你的网站发起请求。 一、CSRF 攻击原理简要 CSRF 的典型攻击场景如下: 用…...
跨平台项目部署全攻略:Windows后端+Mac前端在服务器的协同实战
当你的后端(Flask+MySQL,Windows开发)与前端(Vue,Mac开发)需要统一部署到服务器并实现交互时,完全可以通过「跨平台适配+反向代理」方案实现。本文将分步骤讲解如何在 Linux服务器(推荐)或 Windows服务器 上部署,并解决跨平台兼容性、跨域请求等核心问题。 一、技术…...
第八章 磁盘管理未完待续
1.磁盘管理 磁盘简介 名词:磁盘/硬盘/disk 存储设备类型从工作原理区分 机械 机械硬盘即是传统普通硬盘,主要由:盘片,磁头,盘片转轴及 控制电机,磁头控制器,数据转换器,接口&…...
杰理AC79-WiFi 的 AP、STA 和 Monitor 模式
WiFi 的 AP、STA 和 Monitor 模式是无线网卡的不同工作模式,它们的区别如下: AP 模式(Access Point 模式,接入点模式) 功能:将有线网络转换为无线网络,允许其他无线设备连接到该网络ÿ…...
MAC安装unar并解压.rar文件
MAC上默认解压.zip文件,对.rar文件进行解压需要安装专门对软件。本文记录如何在命令行安装unar并对.rar文件进行解压。 命令行安装 brew install unar打印如下log则安装成功 使用brew list unar检查是否安装成功 brew list unar使用unar解压 unar 文件名.rar...
`nmi_watchdog` 与 `softlockup_panic` 的区别与关系
1. 功能区别 参数作用触发条件影响nmi_watchdog启用 NMI(不可屏蔽中断)看门狗检测 CPU 是否长时间不执行调度(软死锁)仅记录警告(默认),需配合 softlockup_panic 才会触发 panicsoftlockup_pan…...
【Bash】可以请您解释性地说明一下“2>1”这个语法吗?
Qwen3-235B 当然可以!我们一步步拆解 2>&1 的含义,用生活化的例子来理解它: 🧠 前提知识:三个“水流通道” 在 Linux/Unix 系统中,程序运行时有三种默认的“水流通道”: 标准输入&…...
打造美观 API 文档:Spring Boot + Swagger 实战指南
目录 打造美观 API 文档:Spring Boot Swagger 实战指南导语一、Swagger 简介二、Spring Boot 2 集成 Swagger1. 添加依赖2. 配置 Swagger3. 访问 Swagger UI 三、Spring Boot 3 集成 Swagger1. 添加依赖2. 配置 Swagger3. 访问 Swagger UI 四、多种接口文档风格展示…...
如何在 Android 上恢复已删除的照片?:简短指南
没有什么比不小心从 Android 智能手机中删除所有照片更糟糕的了。这样,除非您在重置之前已经备份了数据,否则您的所有照片都会消失。如果您忘记备份照片,您仍然可以按照一些简单的技术在 Android 设备上恢复已删除的照片。 如何在 Android 上…...
第十六届蓝桥杯大赛网安组--几道简单题的WP
目录 1. ezEvtx 2.flowzip 3.Enigma 4.星际XML解析器 1. ezEvtx 题目内容 EVTX文件是Windows操作系统生成的事件日志文件,用于记录系统、应用程序和安全事件。(本题需要选手找出攻击者访问成功的一个敏感文件,提交格式为flag{文件名},其中…...
Element:Cheack多选勾选效果逻辑判断
效果展示 取消子级勾选,父级的勾选效果 代码合集 (1)组件代码 fromlist.cheackType 类型,permissio表示是权限. fromlist:[{id:1,children:[{...}]},...]传递的数据大致结构 <!-- 操作权限 --><template v-if"…...
从摄像头到 RAW 数据:MJPEG 捕获与验证
从摄像头捕获 MJPEG 原始数据:完整指南与验证方法 🔍 引言 MJPEG(Motion JPEG)是一种常见的视频压缩格式,广泛应用于摄像头、监控系统和嵌入式设备。在某些场景下,我们需要直接从摄像头获取 MJPEG 原始数据…...
【展位预告】正也科技将携营销精细化管理解决方案出席中睿营销论坛
在医药行业面临政策深化、技术迭代、全球化竞争的多重挑战下,第二届中睿医药健康生态生长力峰会暨第三十五届中睿医药营销论坛将于广州盛大启幕。5月19-20日本次峰会以“聚焦政策变革、把握产业趋势、构建生态共赢”为核心,旨在通过全产业链资源整合与创…...
记录 Flink jdbc、mysql-cdc 连接 mysql8 碰到的适配问题
前言 记录 Flink jdbc、mysql-cdc 连接 mysql8 碰到的小问题 版本 Flink 1.15.3mysql-cdc 2.3.0MySQL 8.0.27 cdc_mysql2mysql MySQL5 之前主要用 MySQL5 ,下面是 MySQL5 的 sql ,具体见 Flink MySQL CDC 使用总结 set yarn.application.namecdc_mysql2mysql;…...
TCP概念+模拟tcp服务器及客户端
目录 一、TCP基本概念 二、ser服务器代码 三、cil客户端代码 一、TCP基本概念 TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层协议。以下是TCP的一些基本概念: 面向连接&…...
高翔《视觉SLAM十四讲》第七章视觉里程计3d-2d位姿估计代码详解与理论解析
高翔《视觉SLAM十四讲》第七章代码详解与理论解析 一、三维空间位姿估计核心算法实现 在视觉SLAM领域,3D - 2D位姿估计是确定相机在三维空间中位置和姿态的关键技术。本部分将详细解析其工程实现框架,同时说明代码模块的划分逻辑。 代码整体结构清晰,各模块分工明确,主要…...
Elasticsearch 内存使用指南
作者:来自 Elastic Valentin Crettaz 探索 Elasticsearch 的内存需求以及不同类型的内存统计信息。 Elasticsearch 拥有丰富的新功能,帮助你为你的使用场景构建最佳搜索解决方案。浏览我们的示例笔记本了解更多信息,开始免费云试用࿰…...
【Stable Diffusion】原理详解:从噪声到艺术的AI魔法
引言 Stable Diffusion是 stability.ai 开源的图像生成模型,是近年来AI生成内容(AIGC)领域最具突破性的技术之一。它通过将文本描述转化为高分辨率图像,实现了从“文字到视觉”的创造性跨越。其开源特性与高效的生成能力ÿ…...
并发设计模式实战系列(9):消息传递(Message Passing)
🌟 大家好,我是摘星! 🌟 今天为大家带来的是并发设计模式实战系列,第九章消息传递(Message Passing),废话不多说直接开始~ 目录 一、核心原理深度拆解 1. 消息传递架构 2. 并发…...
【MCP Node.js SDK 全栈进阶指南】高级篇(3):MCP 安全体系建设
背景 随着MCP协议在企业和个人应用中的广泛采用,安全性已成为MCP系统设计和开发中不可忽视的核心要素。一个健壮的MCP安全体系不仅能保护敏感数据和用户隐私,还能确保AI模型与外部工具交互的可靠性和完整性。本文将深入探讨MCP TypeScript-SDK的安全体系建设,帮助开发者构建…...
C++智能指针
智能指针是C中用于自动管理动态分配内存的类模板,它们通过在适当的时机自动释放内存来帮助防止内存泄漏。C11引入了以下几种主要的智能指针: 1. std::unique_ptr 独占所有权的智能指针,同一时间只能有一个unique_ptr指向特定对象。 #inclu…...
基于STM32、HAL库的ATECC608B安全验证及加密芯片驱动程序设计
一、简介: ATECC608B是Microchip公司生产的一款安全加密芯片,提供以下主要特性: 基于硬件的高安全性加密算法 ECC P-256加密引擎 SHA-256哈希算法 AES-128加密 真随机数生成器(TRNG) 16KB安全存储空间 IC接口(最高1MHz) 低功耗设计,适合物联网应用 二、硬件接口: ATECC60…...
【安全扫描器原理】ICMP扫描
【安全扫描器原理】ICMP扫描 1.ICMP协议概述2.ping命令3.tracert命令4.ICMP通信实例5.ICMP协议内容6.ICMP扫描的安全性7.ICMP扫描器的原理及优化策略1.ICMP协议概述 ICMP是TCP/IP协议族中的一个重要协议,主要用于在IP主机之间、主机和路由器之间传递控制消息,这些控制消息包…...
前端 AI 开发实战:基于自定义工具类的大语言模型与语音识别调用指南
在人工智能技术快速发展的今天,将大语言模型(LLM)和语音识别(ASR)功能集成到前端应用中,已经成为提升用户体验、打造智能化应用的重要手段。本文将结合一段实际的 AI 工具类代码,详细讲解如何在…...
组件轮播与样式结构重用实验
任务一:使用“Swiper 轮播组件”对自行选择的图片和文本素材分别进行轮播,且调整对应的“loop”、“autoPlay”“interval”、“vertical”属性,实现不同的轮播效果,使用Swiper 样式自定义,修改默认小圆点和被选中小圆…...
(计数)洛谷 P8386 PA2021 Od deski do deski/P10375 AHOI2024 计数 题解
题意 给定 n n n, m m m,求满足以下限制的长度为 n n n 的序列数目: 每个元素在 [ 1 , m ] [1,m] [1,m] 之间;一次操作定义为删除一个长度至少为 2 2 2 且区间两端相等的区间,该序列需要在若干次操作内被删空。 …...
基于C++数据结构双向循环链表实现的贪吃蛇
大二上数据结构I-课程设计 1.设计思路 建模:程序界面是一个二维平面图蛇:蛇的身体可以看作是链表的节点,当蛇吃到食物时,就增加一节链表节点食物:相应地在边界内随机生成蛇的移动:取得上下左右键的ASCII码…...
H3C ER3208G3路由实现内网机器通过公网固定IP访问内网服务器
内网机器可以通过内网访问服务器;公网机器可以通过公网固定IP访问服务器;但内网机器无法通过公网固定IP访问内网服务器;想实现内网机器通过公网固定IP访问内网服务器 WEB登录管理后台,网络设置->NAT配置,选“高级配…...
Vue3+Three JS高德地图自定义经纬度实现围栏
Vue3实现代码 index.html需要引入three.js <script src"https://cdn.jsdelivr.net/npm/three0.142/build/three.js"></script> 围栏组件 <template><div id"mapContainer" ref"mapContainer"></div> </templ…...
远程访问你的家庭NAS服务器:OpenMediaVault内网穿透配置教程
文章目录 前言1. OMV安装Cpolar工具2. 配置OMV远程访问地址3. 远程访问OMV管理界面4. 固定远程访问地址 前言 在这个数据爆炸的时代,无论是管理家人的照片和视频,还是企业老板处理财务报表和技术文档,高效的数据管理和便捷的文件共享已经变得…...
4.2.3 MYSQL事务原理分析
文章目录 4.2.3 MYSQL事务原理分析1. 事务1. 前提:并发连接访问2. 事务定义3. 事务语句:4. acid特性5. undolog-回滚日志6. redolog-重做日志 2. 隔离级别1. 四种隔离级别2. 并发问题解释3. 隔离级别设置 3. MVCC(Multiversion Concurrency Control&…...
极狐GitLab 如何使用文件导出迁移项目和群组?
极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 用文件导出迁移项目和群组 (FREE ALL) 推荐使用 直接传输 迁移群组和项目。然而,在某些情况下,您可能…...
Linux/AndroidOS中进程间的通信线程间的同步 - 管道和FIFO
前言 管道是 UNIX 系统上最古老的 IPC 方法,它在 20 世纪 70 年代早期 UNIX 的第三个版本上就出现了。管道为一个常见需求提供了一个优雅的解决方案:给定两个运行不同程序的进程,在 shell 中如何让一个进程的输出作为另一个进程的输入呢&…...
第十六届蓝桥杯 2025 C/C++组 破解信息
目录 题目: 题目描述: 题目链接: 思路: 思路详解: 代码: 代码详解: 题目: 题目描述: 题目链接: P12344 [蓝桥杯 2025 省 B/Python B 第二场] 破解信息…...
[FPGA Video IP] VDMA
Xilinx AXI Video Direct Memory Access IP (PG020) 详细介绍 概述 Xilinx AXI Video Direct Memory Access (AXI VDMA) LogiCORE™ IP 核(PG020)是一个软核 IP,专为视频应用设计,提供在内存与 AXI4-Stream 视频外设之间的高带宽…...
Ubuntu如何查看硬盘的使用情况,以及挂载情况。
在Ubuntu中查看硬盘使用情况及挂载情况,可通过以下命令实现: 一、查看硬盘使用情况 df -h 显示所有挂载文件系统的磁盘空间使用情况(含总容量、已用空间、可用空间等),输出结果以易读格式(如GB、MB&#x…...
第十六届蓝桥杯 2025 C/C++组 脉冲强度之和
目录 题目: 题目描述: 题目链接: 思路: 思路详解: 代码: 代码详解: 题目: 题目描述: 题目链接: P12338 [蓝桥杯 2025 省 B/Python B 第二场] 脉冲强度…...
23种设计模式-行为型模式之中介者模式(Java版本)
Java 中介者模式(Mediator Pattern)详解 🧠 什么是中介者模式? 中介者模式是一种行为型设计模式,它通过定义一个中介者对象来封装一组对象之间的交互。中介者使得各个对象不需要显式地知道彼此之间的关系,…...
集群与存储-lvs-nat实验
一、实验目的 1、熟练掌握ipvsadm 指令的使用 2、理解lvs 负载均衡的原理 3. 熟练掌握lvs-netnfs的配置 二、实验内容 1.拓扑图 2.实验步骤 #在节点服务器中添加网卡,选择仅主机模式 #查看网卡 #启用网卡 nmcli device up ens224 ip a #修改虚拟地址的网关 #…...
Android——Serializable和Parcelable
在Android中传递对象的方式 在 Android 开发中,Parcelable 和 Serializable 是两种用于对象序列化的接口 Serializable public class Student implements Serializable {public int id;public String name;public int age;public Student(int id, String name, i…...