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

概述

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

设备节点

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

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

虚拟节点

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

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

逻辑节点

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

dts 复制代码
ispp {
        compatible = "virtual,node";
      	isp_in: endpoint {                       
   	 		remote-endpoint = <&isp_in>;        
   		};    
 };

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

下面是一个LED的逻辑节点示例:

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

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

三者之间的区别

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

三者之间的关系

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

节点与驱动的关系

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

相关推荐
Learn-Share_HY20 分钟前
[Linux]如何設置靜態IP位址?
linux·运维·tcp/ip·ubuntu·static ip
Everbrilliant891 小时前
Ubuntu系统下交叉编译Android的X265库
linux·运维·ubuntu·x265交叉编译·android x265·ffmpeg x265
我不要放纵1 小时前
LVS集群搭建
linux·服务器·lvs
阿巴~阿巴~1 小时前
自主Shell命令行解释器
linux·运维·服务器
许白掰1 小时前
Linux入门篇学习——借助 U 盘或 TF 卡拷贝程序到开发板上
linux·学习·借助 u 盘拷贝程序到开发板上·借助 tf卡拷贝程序到开发板上
帅次1 小时前
系统分析师-计算机系统-指令系统&多处理机系统
驱动开发·硬件架构·硬件工程·射频工程·基带工程·材料工程·精益工程
YuTaoShao3 小时前
【LeetCode 热题 100】994. 腐烂的橘子——BFS
java·linux·算法·leetcode·宽度优先
退役小学生呀3 小时前
十五、K8s可观测能力:日志收集
linux·云原生·容器·kubernetes·k8s
van叶~3 小时前
Linux探秘坊-------15.线程概念与控制
linux·运维·服务器
S,D5 小时前
MBIST - Memory BIST会对memory进行清零吗?
驱动开发·mcu·memory·功能安全·iso26262·mbist·bist