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

Linux驱动开发中设备节点、虚拟节点、逻辑节点之间的区别与关系

概述

在Linux DTS中我们可以看到各种各样的节点,每个节点都是对某一物理设备或功能抽象或具体的描述

设备节点

设备节点是对物理设备的一种具体的描述,它一般包含设备的寄存器地址、设备的类型、中断、时钟频率这些通用信息,除了这些通用信息还有一些设备节点会包含一些自己特有的细节例如Linux上的DTS节点就是最好的例子,例如MIPI设备会包含Lens的描述,以下是一个UART设备节点的DTS描述:

uart@1700000 {compatible = "vendor,uart";reg = <0x1700000 0x1000>;interrupts = <0 10 0>;clocks = <&rk_clocks>;
};

虚拟节点

虚拟节点一般是用来描述特定的软件功能,它不依赖于任何硬件,一般该节点的描述非常简单,例如下面是一个用来描述当前系统版本的节点:

 virtual_version {compatible = "firmware-version";version = "1.0.0";string = "Example System Firmware v1.0.0";};
Tips
虚拟节点也可以用来模拟一个硬件。

逻辑节点

就是逻辑节点是用来描述硬件的特定功能,它依赖于真实硬件,以下是一个ISPP的示例:

ispp {compatible = "virtual,node";isp_in: endpoint {                       remote-endpoint = <&isp_in>;        };    };

逻辑节点一般通过remote-endpoint进行连接,ispp通过获取到isp设备节点的输入然后进行其它处理例如3A算法等。
下面是一个LED的逻辑节点示例:

  led@0 {compatible = "simple-led";label = "LED0";gpios = <&gpio0 10 GPIO_ACTIVE_HIGH>;};

该节点没有自己的寄存器地址和时钟等描述,它依赖于gpio来实现自己的功能,所以一般称为逻辑节点。

三者之间的区别

  • **设备节点:**是描述真实的设备,需要包含设备类型、寄存器物理地址、时钟频率…
  • **虚拟节点:**是描述特定的软件功能,它一般是由系统虚拟的节点,通过该节点应用层可以获取到一些系统信息或者用来模拟硬件。
  • **逻辑节点:**是描述特定的硬件功能,它一般依赖于硬件,通过endpoint来与硬件建立管道连接,获取硬件的输入然后执行其它操作从而实现特定功能。

三者之间的关系

三者之间的关系并不大,因为从根本意义上来说它们都是节点,只是应用场景不同,叫法不一样而已,它们只是描述某种硬件或者某个功能的信息,最终这些信息都会被驱动所接受并使用。

节点与驱动的关系

节点信息是描述某个硬件或功能的信息,而驱动则是实现,就像声明与实现一样。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Vue3框架搭建2:axios+typescript封装
  • C 语言调用 Python 代码
  • pycharm 创建python 初始化内容
  • Pytest简介及jenkins集成
  • 2024智慧竞技游戏俱乐部线下面临倒闭?
  • 五、python列表
  • 【python】PyQt5的窗口界面的各种交互逻辑实现,轻松掌控图形化界面程序
  • 华为OD 机试真题 - 分割均衡字符串(Python)
  • 认识sm1,sm2,sm3,sm4以及如何在Node.js实现
  • 如何解决隐藏游戏服务器的源IP问题
  • Windows 如何安装和卸载 OneDrive?具体方法总结
  • 基于R语言的水文、水环境模型优化技术及快速率定方法与多模型案例
  • 数仓工具—Hive语法之事务表更新Transactional Table Update
  • 【学习笔记】无人机(UAV)在3GPP系统中的增强支持(三)-机上无线电接入节点无人机
  • 南京邮电大学统计学课程实验2 用EXCEL进行参数估计假设检验 指导
  • Android单元测试 - 几个重要问题
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • Django 博客开发教程 16 - 统计文章阅读量
  • docker python 配置
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • js写一个简单的选项卡
  • mysql中InnoDB引擎中页的概念
  • PAT A1120
  • PermissionScope Swift4 兼容问题
  • Python进阶细节
  • Vim 折腾记
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 前端代码风格自动化系列(二)之Commitlint
  • 阿里云移动端播放器高级功能介绍
  • ​​​​​​​​​​​​​​Γ函数
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • $.ajax()
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (Java数据结构)ArrayList
  • (js)循环条件满足时终止循环
  • (备份) esp32 GPIO
  • (补充):java各种进制、原码、反码、补码和文本、图像、音频在计算机中的存储方式
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (二)延时任务篇——通过redis的key监听,实现延迟任务实战
  • (附源码)php投票系统 毕业设计 121500
  • (附源码)springboot教学评价 毕业设计 641310
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (一)utf8mb4_general_ci 和 utf8mb4_unicode_ci 适用排序和比较规则场景
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (转)winform之ListView
  • ****Linux下Mysql的安装和配置
  • ***详解账号泄露:全球约1亿用户已泄露
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .gitignore文件设置了忽略但不生效
  • .net 7和core版 SignalR
  • .Net MVC + EF搭建学生管理系统
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • @RequestBody的使用
  • @Resource和@Autowired的区别