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

驱动开发硬核特训 · Day 10 (理论上篇):设备模型 ≈ 运行时的适配器机制

🔍

B站相应的视屏教程
📌 内核:博文+视频 - 总线驱动模型实战全解析
敬请关注,记得标为原始粉丝。


在 Linux 驱动开发中,设备模型(Device Model)是理解驱动架构的核心。而从软件工程的角度看,它与**适配器模式(Adapter Pattern)**之间也存在着惊人的相似性。本文尝试从理论出发,构建“设备模型 ≈ 运行时的适配器机制”的认知,并通过逻辑图与结构分析,将这一理念讲透讲透。


一、适配器模式回顾:统一接口的桥梁

在这里插入图片描述

在软件设计模式中,**适配器模式(Adapter Pattern)**的作用是:将一个类的接口转换成客户端所期待的另一个接口

  • 目标接口(Target):客户端期待调用的接口
  • 源接口(Adaptee):已有的但不兼容的接口
  • 适配器(Adapter):中间桥梁,让客户端可以透明使用源接口

我们以 USB 转串口为例:

Client(PC) <--> USB接口↓ 适配器
设备(串口芯片) <--> UART接口

在代码中,Adapter 就是包装 Adaptee 的对象,让它“看起来”满足了 Target 接口。


二、Linux 设备模型的运行时角色

Linux 的设备模型其实也完成了“统一接口”的桥接动作:

  • platform_device / i2c_client 等设备描述结构(相当于 Adaptee)
  • platform_driver / i2c_driver 等驱动结构(相当于 Adapter)
  • driver core(驱动核心)通过总线匹配机制连接设备与驱动(Adapter 注册给一个 Bus,用于查找匹配)

当你写下如下代码时:

platform_driver_register(&my_driver);

实际上就是在告诉内核:我有一个驱动,它能适配某些符合匹配条件的设备,请你在运行时自动“配对”他们。

这正是“运行时适配器机制”的体现!


三、匹配机制的本质:驱动适配器为谁服务?

1. 核心概念类比:

软件工程术语Linux 设备模型
Target接口驱动模型中的标准接口(probe等)
Adaptee类各种硬件设备(platform、I2C等)
Adapter适配器驱动结构体(platform_driver等)
适配者注册driver_register / i2c_add_driver
自动装配匹配逻辑总线匹配函数(of_match、id_table)

2. 匹配的流程图:

           ┌────────────┐│ 设备树Node │  ←──── 用户定义设备信息└────┬───────┘│▼┌──────────────┐│ platform_device │ ←─── 内核解析设备树,注册└────┬──────────┘│▼┌──────────────┐│  platform_bus │ ←─── 总线负责配对逻辑└────┬──────────┘│probe匹配机制│▼┌──────────────┐│ platform_driver │ ←── 驱动是适配器└──────────────┘

四、为什么说它是“运行时”的适配器?

适配器模式在传统软件设计中通常是编译期设计好适配关系,但在 Linux 驱动中,设备与驱动的绑定是:

  • 在设备注册(如 platform_device)后,在 driver core 的设备链表中查找驱动
  • 或者在驱动注册后,从已知设备中查找与之匹配的设备
  • 依据的是 名字匹配 / compatible 字符串

因此,这是 运行时动态匹配与绑定,它不是写死的关系,而是通过总线模型中的匹配函数灵活控制。


五、多个总线的统一模型:都是适配器

我们常见的 driver 类型:

  • platform_driver
  • i2c_driver
  • spi_driver
  • usb_driver
  • pci_driver

它们都继承了一个共同的父结构:

struct device_driver {const char *name;struct bus_type *bus;...
};

它们都注册给对应的 bus_typebus_type 就是 Adapter 插口类型的定义者

换句话说,不同总线驱动之间的差异只是适配规则的差异,核心逻辑是一样的:我声明我能处理什么设备(通过 compatible 或 ID 表),然后内核会自动调用 probe 函数完成初始化。


六、设备模型中的三大核心角色

为了理解更深入,我们整理出设备模型三大核心结构体的适配关系:

设备模型角色软件设计模式对应Linux结构体功能描述
被适配者Adapteeplatform_device / i2c_client硬件描述
适配器Adapterplatform_driver / i2c_driver驱动逻辑
适配管理器AdapterManagerbus_type匹配规则、注册匹配与解绑回调

这三者构成了一个完整的“运行时适配”生态。


七、适配器模式的优势在驱动模型中的体现

适配器优势驱动模型的体现
将不兼容接口统一包装硬件种类繁多,统一由 driver core 适配
解耦:客户端与底层对象分离用户只关心 probe 中的行为,与具体设备解耦
支持运行时灵活绑定动态添加/删除驱动与设备都是天然支持的

八、真实场景举例:平台驱动模型

假设你有如下设备树片段:

lcdif1: lcd-controller@32e80000 {compatible = "fsl,imx8mp-lcdif1";reg = <0x32e80000 0x10000>;interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>;...
};

你注册了如下 platform_driver:

static const struct of_device_id lcdif_match[] = {{ .compatible = "fsl,imx8mp-lcdif1" },{ /* sentinel */ }
};static struct platform_driver lcdif_driver = {.probe = lcdif_probe,.remove = lcdif_remove,.driver = {.name = "lcdif",.of_match_table = lcdif_match,},
};

整个过程就是典型的 运行时适配器匹配:设备为 Adaptee,驱动为 Adapter,由 bus_type 来桥接匹配


九、总结与过渡

我们可以得出核心观点:

Linux 的驱动模型不是传统静态接口封装,而是构建了一个运行时的适配器机制系统,通过 bus / device / driver 三者的动态配对完成模块化的解耦架构。

  • 驱动 ≈ Adapter
  • 总线 ≈ AdapterManager(匹配策略)
  • 设备 ≈ Adaptee
  • probe 函数 ≈ Target 接口执行器

下一篇内容将全面深入 platform_driver、i2c_driver 结构与实际设备树如何映射为设备对象,驱动如何实现匹配,sysfs 如何生成等具体实现细节,并围绕 PCA9450 PMIC 进行实战代码分析。

敬请期待 Day 10 博文下篇:《设备模型 ≈ 运行时的适配器机制(下)——以 V4L2 摄像头驱动为例》


相关文章:

驱动开发硬核特训 · Day 10 (理论上篇):设备模型 ≈ 运行时的适配器机制

&#x1f50d; B站相应的视屏教程&#xff1a; &#x1f4cc; 内核&#xff1a;博文视频 - 总线驱动模型实战全解析 敬请关注&#xff0c;记得标为原始粉丝。 在 Linux 驱动开发中&#xff0c;设备模型&#xff08;Device Model&#xff09;是理解驱动架构的核心。而从软件工程…...

4.13日总结

javafx中实现发送qq邮箱验证码: 手动导入jar包方法&#xff1a; 第一步&#xff1a;开启QQ邮箱的 POP3/IMAP 或者 SMTP/IMAP 服务 打开qq邮箱&#xff08;电脑端&#xff09;&#xff0c;找到设置里的账号与安全的安全设置&#xff0c;往下滑就可以找到 POP3/IMAP 或者 SMTP…...

python 微博爬虫 01

起因&#xff0c; 目的: ✅下载单个视频&#xff0c;完成。✅ 获取某用户的视频列表&#xff0c;完成。剩下的就是&#xff0c; 根据视频列表&#xff0c;逐个下载视频&#xff0c;我没做&#xff0c;没意思。获取视频的评论&#xff0c;以后再说。 关键点记录: 1. 对一个视…...

CST1017.基于Spring Boot+Vue共享单车管理系统

计算机/JAVA毕业设计 【CST1017.基于Spring BootVue共享单车管理系统】 【项目介绍】 共享单车管理系统&#xff0c;基于 Spring Boot Vue 实现&#xff0c;功能丰富、界面精美 【业务模块】 系统共有四类用户&#xff0c;分别是&#xff1a;监管用户、运营用户、调度用户、普…...

小刚说C语言刷题——第23讲 字符数组

前面&#xff0c;我们学习了一维数组和二维数组的概念。今天我们学习一种特殊的数组&#xff0c;字符数组。 1.字符数组的概念 字符数组就是指元素类型为字符的数组。字符数组是用来存放字符序列或者字符串的。 2.字符数组的定义及语法 char ch[5]; 3.字符数组的初始化及赋…...

c++11--std::forwaord--完美转发

std::forword的作用 完美转发的核心目的是保持参数的原始类型&#xff08;包括const/volatile限定符和左值/右值性质&#xff09;不变地传递给其他函数。 为什么需要完美转发 在没有完美转发之前&#xff0c;我们面临以下问题&#xff1a; 模板参数传递中的值类别丢失 当参数…...

机器学习的一百个概念(12)学习率

前言 本文隶属于专栏《机器学习的一百个概念》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见[《机器学习的一百个概念》 ima 知识库 知识库广场搜索: 知识库创建人机器学习@Shockang机器学习数学基础@Shocka…...

java异常 与 泛型<T>

文章目录 异常认识异常什么是异常&#xff1f;Java的异常体系异常的基本处理异常的作用&#xff1f; 自定义异常编译时异常自定义运行时异常 异常的处理方案 泛型认识泛型泛型类泛型接口泛型方法、通配符、上下限泛型支持的类型包装类包装类具备的其他功能总结 异常 认识异常 …...

齐次坐标系统:什么是齐次坐标?为什么要引入齐次坐标?

齐次坐标系统&#xff1a;计算机图形学的基础 在计算机图形学、计算机视觉、相机标定、三维建模等领域&#xff0c;齐次坐标是一个非常重要的数学工具。本文将介绍&#xff1a;齐次坐标的基本概念、数学原理、我们为什么要引入齐次坐标、及其在实际应用中的价值。 文章目录 齐…...

基于XGBoost的异烟酸生产收率预测:冠军解决方案解析

1. 引言 在化工生产领域,准确预测产品收率对优化工艺流程、降低生产成本具有重要意义。本文以异烟酸生产为研究对象,通过机器学习方法构建预测模型,在包含10个生产步骤、42个工艺参数的数据集上实现高精度收率预测。该方案在工业竞赛中斩获冠军,本文将深度解析其技术实现细…...

vue3动态路由

要想实现vitevue-router实现动态路由我们需要用到 1. addRoute() 官方文档中addRoute的使用 当我们添加一个主路由的时候 router.addRoute({ path: /permission, name: permission, component: () > import(xxxxx)}) 添加子路由也就是嵌套路由 router.addRoute(主路由的…...

Tkinter进度条与状态栏

在图形用户界面(GUI)应用中,进度条和状态栏是非常常见的控件,它们可以有效地向用户显示操作进度、状态信息或者任务完成情况。Tkinter提供了内置的控件和方法来实现进度条和状态栏的功能。在这一章中,我们将学习如何在Tkinter应用中使用进度条和状态栏来提升用户体验。 1…...

NModbus 库在 C# 中的使用

以下是关于 NModbus 库在 C# 中的使用方法 的详细指南,涵盖从安装到实际通信的完整流程: 1. 安装 NModbus 库 通过 NuGet 包管理器安装: Install-Package NModbus 或使用 .NET CLI: dotnet add package NModbus 2. 基础使用示例 2.1 创建 Modbus TCP 主站(Master) …...

大模型到底是怎么产生的?一文了解大模型诞生全过程

前言 大模型到底是怎么产生的呢? 本文将从最基础的概念开始,逐步深入,用通俗易懂的语言为大家揭开大模型的神秘面纱。 大家好,我是大 F,深耕AI算法十余年,互联网大厂核心技术岗。 知行合一,不写水文,喜欢可关注,分享AI算法干货、技术心得。 【专栏介绍】: 欢迎关注《…...

算法差分详解 + 总结

文章目录 差分一维差分题解代码 二维差分 差分 区间修改时使用差分 1. 先预处理一个差分数组&#xff0c;cre[i] a[i] - a[i-1]&#xff0c;对差分数组求前缀和可以还原为原数组 2. 如果要让区间内的数d&#xff0c;比如[l,r]内d&#xff0c;那么r1区间-d可以达到这样的效果&…...

全星APQP软件:为用户提供高效、合规、便捷的研发管理体验

全星APQP软件&#xff1a;为用户提供高效、合规、便捷的研发管理体验 为什么选择全星APQP软件系统&#xff1f; 在汽车及高端制造行业&#xff0c;研发项目管理涉及APQP&#xff08;先期产品质量策划&#xff09;、FMEA&#xff08;失效模式与影响分析&#xff09;、CP&#x…...

数据结构——哈希详解

数据结构——哈希详解 目录 一、哈希的定义 二、六种哈希函数的构造方法 2.1 除留取余法 2.2 平方取中法 2.3 随机数法 2.4 折叠法 2.5 数字分析法 2.6 直接定值法 三、四种解决哈希冲突的方法 3.1 开放地址法 3.1.1 线性探测法 3.1.2 二次探测法 3.2 链地址法 3…...

智慧乡村数字化农业全产业链服务平台建设方案PPT(99页)

1. 农业全产业链概念 农业全产业链是依托数字化、电子商务、云计算等技术&#xff0c;整合规划咨询、应用软件设计与开发等服务&#xff0c;推动农业产业升级和价值重塑&#xff0c;构建IT产业融合新生态。 2. 产业链技术支撑 利用云计算、大数据、区块链等技术&#xff0c;为…...

Mysql -- 基础

SQL SQL通用语法&#xff1a; SQL分类&#xff1a; DDL: 数据库操作 查询&#xff1a; SHOW DATABASES&#xff1b; 创建&#xff1a; CREATE DATABASE[IF NOT EXISTS] 数据库名 [DEFAULT CHARSET字符集] [COLLATE 排序规则]&#xff1b; 删除&#xff1a; DROP DATABA…...

《AI大模型应知应会100篇》第14篇:大模型商业化现状:主流应用场景及盈利模式

第14篇&#xff1a;大模型商业化现状&#xff1a;主流应用场景及盈利模式 摘要 近年来&#xff0c;大模型&#xff08;如Qwen、DeepSeek、GPT、BERT等&#xff09;以其强大的语言理解和生成能力引发了技术界的广泛关注。然而&#xff0c;如何将这些前沿技术转化为商业价值&am…...

深入理解linux操作系统---第3讲 基本操作与基本管理

3.1 shell基本功能与基本概念 3.1.1 shell基本功能 Shell是Linux系统的核心交互工具&#xff0c;主要功能包括&#xff1a; 程序启动与进程管理&#xff1a;通过命令行将程序名传递给内核执行&#xff0c;支持进程的后台运行与监控&#xff08;如ps、kill命令&#xff09;文…...

Go:函数

函数 函数声明 func name(parameter-list) (result-list) { body }函数声明包含函数名、形参列表、可选的返回列表以及函数体 。形参列表指定由调用者传递的变量参数名和类型&#xff1b;返回列表指定函数返回值类型 &#xff0c;无返回值或返回未命名值时&#xff0c;返回列…...

swagger 注释说明

一、接口注释核心字段 在 Go 的路由处理函数&#xff08;Handler&#xff09;上方添加注释&#xff0c;支持以下常用注解&#xff1a; 注解名称用途说明示例格式Summary接口简要描述Summary 创建用户Description接口详细说明Description 通过用户名和邮箱创建新用户Tags接口分…...

【C++】C与C++、C++内存空间、堆与栈

C嘎嘎嘎嘎嘎~ C与C的区别与联系 C内存空间 int global_var; // 未初始化全局变量&#xff0c;BSS段 const char* str "Hello"; // 字符串常量text段 in数据段void func() {static int static_var; // 未初始化的静态变量&#xff0c;数据段int local_var; …...

从零训练LLM-1.训练BPE

文章目录 BPE 简介BPE (Byte-Pair Encoding) 算法训练流程BPE 编码流程BPE 评估代码 参考 本文基于 HF -tokenizer 训练&#xff0c;更便捷 BPE 简介 分词器将单词从自然语言通过“词典”映射到0, 1, 36这样的数字&#xff0c;可以理解为数字就代表了单词在“词典”中的页码。…...

shield.io网站|markdown中适用的“徽标”

动态的我还没看是怎么弄&#xff0c;但是应该和静态的差不多&#xff0c;因此本文仅讨论静态徽标 静态徽标效果 创建方法 网址&#xff1a;Shields.io | Shields.io 进入之后点击“Badges”标签进入网页创建徽标的页面&#xff0c;根据文档中对每个属性的介绍在右侧将自己预…...

Vue 3 自定义指令

Vue 3 是一个非常强大的前端框架&#xff0c;它不仅提供了简单易用的 API&#xff0c;还支持多种高级功能&#xff0c;以便开发者根据需要扩展和优化应用。在 Vue 中&#xff0c;自定义指令是一种非常灵活的功能&#xff0c;它允许我们为 DOM 元素添加特定的行为&#xff0c;扩…...

25某团校招后端开发一面

一、进程通信和线程通信方式 进程通信方式 管道&#xff08;Pipe&#xff09; 半双工通信&#xff0c;数据单向流动&#xff0c;仅用于有亲缘关系的进程&#xff08;如父子进程&#xff09;。通过内核缓冲区实现数据传输&#xff0c;如父进程写、子进程读。命名管道&#xff…...

音视频学习(三十四):H264中的宏块

什么是宏块&#xff1f; 在 H.264 中&#xff0c;宏块是编码图像时最小的处理单位。它的核心作用包括&#xff1a; 帧内预测&#xff08;Intra Prediction&#xff09;帧间预测&#xff08;Inter Prediction&#xff09;变换、量化、熵编码等 标准定义&#xff1a; 一个宏块…...

Pandas 中透视表(`pivot_table`)和交叉表(`crosstab`)的区别

Pandas 中透视表&#xff08;pivot_table&#xff09;和交叉表&#xff08;crosstab&#xff09;的区别 核心区别 透视表 (pivot_table) 用于对数据进行 聚合计算&#xff08;如求和、均值、计数等&#xff09;。支持多维度分组&#xff08;行、列、甚至多层索引&#xff09;。…...

Restful风格接口开发

目录 Restful Apifox 介绍 端口号8080怎么来的&#xff1f; 为什么要使用Apifox? Restful 如果请求方式是Post&#xff0c;那我就知道了要执行新增操作&#xff0c;要新增一个用户 如果请求方式是Put&#xff0c;那就代表我要修改用户 具体要对这些资源进行什么样的操…...

20250414| AI:RAG多路召回和融合重排序技术

好的&#xff01;以下是对RAG&#xff08;检索增强生成&#xff09;中多路召回和融合重排序技术的详细解释&#xff0c;结合解释学习的视角&#xff0c;帮助你更好地理解和学习。这些技术是RAG系统的核心组成部分&#xff0c;决定了检索阶段的效果和最终生成答案的质量。我会尽…...

基于时间序列分解与XGBoost的交通通行时间预测方法解析

一、问题背景与数据概览 在城市交通管理系统中,准确预测道路通行时间对于智能交通调度和路径规划具有重要意义。本文基于真实道路传感器数据,构建了一个结合时间序列分解与机器学习模型的预测框架。数据源包含三个核心部分: 道路通行数据(new_gy_contest_traveltime_train…...

论文精度:HeightFormer:基于Transformer的体素高度预测在路边3D目标检测中的应用

论文地址:https://arxiv.org/pdf/2503.10777 1. 背景与问题定义 1.1 路边视觉3D检测的重要性 在自动驾驶领域,车辆端的视觉感知系统面临视角局限性​(如遮挡、短距离感知)和安全挑战。相比之下,​路边摄像头通过高位安装,可覆盖更广的感知范围(如交叉路口、高速公路)…...

华为手机清理大数据的方法

清理手机最大的问题是&#xff0c;手动和自动清理了多次&#xff0c;花费了很长时间&#xff0c;但是只腾挪出来了一点点空间&#xff0c;还是有很大空间无法使用&#xff0c;这篇文章就告诉你怎样做&#xff0c;以花瓣剪辑为例&#xff0c;如下&#xff1a; 删除数据&#xff…...

tcp特点+TCP的状态转换图+time_wait详解

tcp特点TCP的状态转换图time wait详解 目录 一、tcp特点解释 1.1 面向连接 1.1.1 连接建立——三次握手 1.1.2 连接释放——四次挥手 1.2 可靠的 1.2.1 应答确认 1.2.2 超时重传 1.2.3 乱序重排 1.2.4 去重 1.2.5 滑动窗口进行流量控制 1.3 流失服务&#xff08;字节…...

flutter 桌面应用之窗口自定义

在开发桌面软件的时候我们经常需要配置软件的窗口的大小以及位置 我们有两个框架选择:window_manager和bitsdojo_window 对比bitsdojo_window 特性bitsdojo_windowwindow_manager自定义标题栏✅ 支持❌ 不支持控制窗口行为&#xff08;大小/位置&#xff09;✅&#xff08;基本…...

【C++】NAN相关研究

先说结论&#xff1a;NAN对比一切都是false INF 对INF 是true 正无穷与正无穷比较相等&#xff0c;正无穷与负无穷比较不相等 window linux环境下基本相同&#xff0c; debug release基本相同 NAN -NAN INF -INF 不做论述 // TestNan.cpp : 此文件包含 "main" 函数。…...

windows下Git安装及其IDEA配置

1.下载Git安装包 阿里镜像链接&#xff08;建议从这里下载&#xff0c;速度很快&#xff09; git-scm.com&#xff08;官方网站&#xff0c;提供了各个平台&#xff08;Windows、Mac、Linux&#xff09;的安装程序&#xff09; 选择版本号后&#xff0c;在选择此版本的不同包…...

迷你世界脚本脚本常见问题

脚本常见问题 彼得兔 更新时间: 2024-05-22 17:54:44 在查阅开发者学院中的脚本API时&#xff0c;若有任何问题或建议&#xff0c;欢迎通过问卷进行反馈&#xff01;【点我填写问卷】 1.Block中的data在什么地方使用 data使用有具体需求,此处不建议开发者使用。开发者尽可能使…...

2025蓝桥杯C++ A组省赛 题解

昨天打完蓝桥杯本来想写个 p y t h o n python python A A A 组的题解&#xff0c;结果被队友截胡了。今天上课把 C A CA CA 组的题看了&#xff0c;感觉挺简单的&#xff0c;所以来水一篇题解。 这场 B B B 是一个爆搜&#xff0c; C C C 利用取余的性质比较好写&#…...

链接世界:计算机网络的核心与前沿

计算机网络引言 在数字化时代&#xff0c;计算机网络已经成为我们日常生活和工作中不可或缺的基础设施。从简单的局域网&#xff08;LAN&#xff09;到全球互联网&#xff0c;计算机网络将数以亿计的设备连接在一起&#xff0c;推动了信息交换、资源共享以及全球化的进程。 什…...

MySQL 常见存储引擎全解析:InnoDB、MyISAM、Memory 等对比与实战

一、什么是存储引擎&#xff1f; 存储引擎&#xff08;Storage Engine&#xff09;是 MySQL 中负责数据存储与管理的底层模块。不同的存储引擎负责处理表的读写、索引维护、事务支持、崩溃恢复等机制。 在创建表时可以指定使用的存储引擎&#xff1a; CREATE TABLE user (id…...

21天Python计划:零障碍学语法(更新完毕)

目录 序号标题链接day1Python下载和开发工具介绍https://blog.csdn.net/XiaoRungen/article/details/146583769?spm1001.2014.3001.5501day2数据类型、字符编码、文件处理https://blog.csdn.net/XiaoRungen/article/details/146603325?spm1011.2415.3001.5331day3基础语法与…...

Python中NumPy的统计运算

在数据分析和科学计算领域&#xff0c;Python凭借其丰富的库生态系统成为首选工具之一&#xff0c;而NumPy作为Python数值计算的核心库&#xff0c;凭借其高效的数组操作和强大的统计运算功能&#xff0c;广泛应用于机器学习、信号处理、统计分析等场景。本文将系统介绍NumPy在…...

SQL 解析 with as

sql的运行顺序 <select id"getTrendList" parameterType"java.util.HashMap" resultType"java.util.Map"><![CDATA[WITH-- 生成连续年份列表&#xff08;当前年前8年到前1年&#xff09;year_range AS (SELECT EXTRACT(YEAR FROM SYSD…...

07-算法打卡-链表-移除链表-leetcode(203)-第七天

1 题目地址 203. 移除链表元素 - 力扣&#xff08;LeetCode&#xff09;203. 移除链表元素 - 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例 1&#xff1a;[https://assets.leetc…...

抓包神器,自研EtherCAT抓包工具

大家好&#xff0c;博主自研了一款以太网抓包神器&#xff0c;可以用于EtherCAT抓包。 把抓包工具接入以太网总线中&#xff0c;就能正常使用了。 上位机软件采用wireshark。 开启以下协议 抓包截图如下 时间戳的精度为5ns。...

五、adb常用命令

SDK路径下的 \Android\Sdk\platform-tools\adb.exe adb devices 查看连接的设备 adb shell getprop ro.build.version.release 查看系统版本 adb shell dumpsys window windows | findstr mFocusedApp 获取正在运行的app启动包名 结果为空&#xff0c;我不知道是不是Android…...

Java第四节:idea在debug模式夏改变变量的值

作者往期文章 Java第一节&#xff1a;debug如何调试程序&#xff08;附带源代码&#xff09;-CSDN博客 Java第二节&#xff1a;debug如何调试栈帧链&#xff08;附带源代码&#xff09;-CSDN博客 Java第三节&#xff1a;新手如何用idea创建java项目-CSDN博客 步骤一 在需要修改…...