设备树节点属性

Linux设备树深度解析 - 第8章:地址转换与DMA配置 特性关键点典型应用dma-ranges解决非一致性DMA地址问题PCIe设备、异构内存系统iommu-map提供细粒度DMA访问控制虚拟化、安全敏感场景IOMMU绑定支持多级映射和上下文隔离云计算、车载系统注:实际配置需结合具体硬件手册,不同平台实现可能有差异。 阅读详情
device_type = "memory"就是一个属性,等号前边是属性,后边是值。
节点是一个逻辑上相对独立的实体,属性是用来描述节点特性的,根据需要一个节点由0个,1个或多个属性表示节点的特性。
一个属性由名字和值两部分组成。
和节点的名字类似,规范要求属性名字由1到31个字符组成。和节点名字字符的种类有些区别,不允许有大写字母,增加了问号和井号两个字符。不清楚为什么没有和节点名字完全保持一致,井号对于初学者容易误解,以为是注释。
0-9    数字
a-z    小写字母
,    逗号
.    句点(英)
_    下划线
+    加号
-    破折号(英)
?    问号
#    井号
为了容易区分以及避免重复,标准未定义的属性名字应该用公司或组织名称开头,比如:
fsl,channel-fifo-len
ibm,ppc-interrupt-server#s
linux,network-index
属性的值在内存中由0个或多个字节存储。
标准定义的基本类型包括:空,u32,u64,字符串,<prop-encoded-array>,字符数组6种。
前边我们已经提到,当不需要值就可以表示节点的特性时,属性的值可以为空。
u32,u64,字符串,字符数组和c语言的定义没有区别,注意的是规范要求都是大端表示,字符串也是以0x00结尾。
<prop-encoded-array>是一个结构体数组,数组的元素具体是什么根据属性的定义确定,后边我们讲到具体的属性时会详细说明。
规范中还有一个类型的属性值,叫<phandle>,这个类型的属性在内存中存储时本质上是u32。
规范预定义了一些标准的属性。“compatible”,“model”,"device_type"都是用来表示节点基本信息的。
“compatible”属性是用来匹配驱动的,他的类型是字符串数组,每个字符串表示一种设备的类型,从具体到一般。
比如某个串口控制器节点的属性”compatible = “fsl,mpc8641-uart”, “ns16550"“。第一个字符串“fsl,mpc8641-uart”前边部分是厂商(推测是frescale),后边部分是控制器具体型号,这个形式也是规范建议的标准写法。第二个字符串ns16550表示一类符合同一标准的串口控制器,比第一个字符串表示的范围更大。内核匹配驱动时首先看是否有匹配第一个字符串的驱动,如果没有的话再匹配第二个(如果有更多的,依次类推,所以优先匹配前边的)。
"model"属性用来表示设备的型号,用字符串表示,不像"compatible"用多个字符串,只需一个就够了。"device_type"属性用来表示设备类型,用字符串表示。
"#address-cells","#size-cells","reg","ranges","dma-ranges"属性都是和地址有关的。
不同的平台,不同的总线,地址位长度可能不同,有32位地址,有64位地址,为了适应这个,规范规定一个32位的长度为一个cell。"#address-cells"属性用来表示总线地址需要几个cell表示,该属性本身是u32类型的。"#size-cells"属性用来表示子总线地址空间的长度需要几个cell表示,属性本身的类型也是u32。可以这么理解父节点表示总线,总线上每个设备的地址长度以及地址范围是总线的一个特性,用"#address-cells","#size-cells"属性表示,比如总线是32位,那么"#address-cells"设置成1就可以了。这两个属性不可以继承,就是说在未定义这两个属性的时候,不会继承更高一级父节点的设置,如果没有设置的话,内核默认认为"#address-cells"为2,"#size-cells"为1。
"reg"属性用来表示节点地址资源的,比如常见的就是寄存器的起始地址及大小。要想表示一块连续地址,必须包含起始地址和空间大小两个参数,如果有多块地址,那么就需要多组这样的值表示。还记得前边说过的<prop-encoded-array>类型的属性吧,就是用来干这个的,他表示一个数组,每个元素的具体格式根据属性而定,对于'reg'属性,每个元素是一个二元组,包含起始地址和大小。还有另外一个问题,地址和大小用几个u32表示呢?这个就由父节点的"#address-cells","#size-cells"属性确定。
总线上设备在总线地址和总线本身的地址可能不同,"ranges"属性用来表示如何转换。和'reg'属性类似,'ranges'属性也是<prop-encoded-array>类型的属性,不同的是'ranges'属性的每个元素是三元组,按照前后顺序分别是(子总线地址,父总线地址,大小)。子总线地址需要几个u32表示由'ranges'属性所在节点的'#address-cells'属性决定,父总线地址需要几个u32表示由上一级节点的'#address-cells'属性决定,大小需要几个u32表示由当前节点的'#size-cells'属性确定。
'dma-ranges'属性的结构和定义与'ranges'属性完全相同,唯一不同的是地址是dma使用的地址,'ranges'中的地址是cpu使用的地址。
有的时候在一个节点中需要引用另外一个节点,比如某个外设的中断连在哪个中断控制器上。在讲节点那一节我们说过,可以通过节点的全路径指定是哪个节点,但这种方法非常繁琐。'phandle'属性是专门为方便引用节点设计的,想要引用哪个节点就在该节点下边增加一个'phandle'属性,设定值为一个u32,如'phandle = <1>',引用的地方直接使用数字1就可以引用该节点,如'interrupt-parent = <1>'。以上是规范中描述的方法,实际上这样也不方便,我在实际的代码中没有看到这么用的。还记得节点那节说过节点名字前边可以定义一个标签吧,实际情况是都用标签引用,比如节点标签为intc1,那么用'interrupt-parent = <&intc1>'就可以引用了。
'status'属性用来表示节点的状态的,其实就是硬件的状态,用字符串表示。'okay'表示硬件正常工作,“disabled”表示硬件当前不可用,“fail”表示因为出错不可用,“fail-sss”表示因为某种原因出错不可用,sss表示具体的出错原因。实际中,基本只用'okay'和'disabled'。

设备树系统学习(二)设备树的节点和属性 是一个简单的 ASCII 字符串,长度最多为 31 个字符,节节点是根据它所代表的设备类型来命名的,比如 “gpu” 就表示这个节点是 gpu外设。一般表示设备的地址或寄存器首地址,可以为 0 或没有,如”led“、“cpu@0”。label 是为了方便访问节点起的别名,可以直接通过 & label 来访问这个节点,无视节点层级,更加简洁。上面不难看出,只要地址不同(即gpio@5201314&gpio@50003000 ),多个节点使用相同的通用名称是正常的。当我们找一个节点的时候,我们必须书写。 阅读详情

相关推荐

ITK-snap进行分割区域标注、三维显示及改变显示颜色

在进行医学图像器官分割时,无论我们是用传统方法还是深度学习,最后肯定要用到手动分割的区域作为金标准来验证我们方法的精度。但是手动标注器官的轮廓是十分耗时的,这里我介绍一个比较简单的标注方法,以肺分割作为例子。 我们使用ITK-snap作为分割标注工具。 当切片间距离比较小时,比如1mm,一个患者的完整HRCT序列通常在200张以上,如果让医生一一进行分割区域标注是非常耗时乏味的。因此,我们可以使用最简单的阈值法比如OSTU,加上基本的形态学操作对肺进行粗分割得到粗略的分割掩码,在此基础上再手动的对分割结果进

u010409517的博客 2万+

我眼中的Linux设备树(三 属性)

三 属性(property)device_type = "memory"就是一个属性,等号前边是属性,后边是值。节点是一个逻辑上相对独立的实体,属性是用来描述节点特性的,根据需要一个节点由0个,1个或多个属性表示节点的特性。一个属性由名字和值两部分组成。和节点的名字类似,规范要求属性名字由1到31个字符组成。和节点名字字符的种类有些区别,不允许有大写字母,增加了问号和井号两个字符。不清楚为什么没有...

weixin_30335575的博客 382

海思MPP平台千兆以太网驱动集成与测试指南

千兆以太网(GE)是嵌入式视觉系统中音视频流传输与边缘控制的核心物理接口,其底层驱动需兼顾DMA高效调度、中断实时响应与PHY链路稳定性。在Linux嵌入式环境中,GE驱动通常基于net_device框架实现,并深度耦合于SoC专用媒体处理平台(如海思MPP),通过硬件抽象层(HAL)屏蔽寄存器操作,提供零拷贝、RGMII时序适配、描述符环管理等关键能力。技术价值体现在降低CPU负载、保障1080p@30fps实时推流、支持ONVIF/RTSP协议交互及固件远程升级。典型应用场景包括网络摄像机(IPC)、A

weixin_42599908的博客 89

【i.MX6ULL】驱动开发11——LCD驱动实践

之前在Linux系统移植时提到过LCD驱动,本篇来看下Linux设备树如何配置LCD驱动。 1 知识点 首先需要了解一个新的概念:Framebuffer 1.1 Framebuffer Framebuffer直译即帧缓冲,简称 fb,它是Linux将系统中所有跟显示有关的硬件以及软件集合起来,将底层的LCD虚拟抽象出一 个/dev/fbX设备,应用程序可以通过操作/dev/fbX来实现对屏幕的显示控制。 NXP官方Linux内核已默认开启了LCD驱动,在dev/目录下可以看到fb0这样一个设备 Frame

码农爱学习的博客 4017

RK3588上使用PCIE接口的国产千兆网卡YT6801

YT6801是裕太微电子开发的一款国产千兆PCIE以太网控制器芯片,可作为RK3588的PCIE外扩网口使用。

荻夜的博客 8211

硬件工程师笔记——三极管Multisim电路仿真实验汇总

NPN型三极管:由N型半导体、P型半导体和N型半导体组成,即NPN结构。 PNP型三极管:由P型半导体、N型半导体和P型半导体组成,即PNP结构。 三极管的工作原理基于电流的控制和放大,其核心是基区对电流的控制作用。 将三极管等效为两个串联的二极管进行等效分析

XU157303764的博客 2635

dts里的中断

** dts里的中断 ** 1). 产生中断的设备 (interrupt generating devices) interrupts: 产生的中断号, 会被interrupts-extended覆盖, 通常两者用其一; interrupt-parent: 标识此设备节点属于哪一个中断控制器, 如果没有设置这个属性, 会自动依附父节点的; interrupts-extended: 当设备连接到多个中断控制器时使用; 它与属性interrupts相互排斥, 二者只能用其一, 当两者都存在时, interrup

verdicty的专栏 2571

CAPL概述与环境搭建

CANoe和CANalyzer是Vector公司开发的两款用于汽车电子系统开发和测试的工具。CANoe主要用于网络开发、仿真和测试,而CANalyzer则主要用于网络分析和诊断。两者都支持CAPL脚本语言,可以用于编写复杂的测试脚本和仿真模型。CAPL Browser是CANoe/CANalyzer中用于编写、编辑和调试CAPL脚本的工具。它提供了一个集成的开发环境,支持语法高亮、代码自动补全、调试等功能。菜单栏:包含文件操作、编辑、编译、调试等功能。工具栏。

闲人编程的博客 1662

linux开发板加载内核、设备树、根文件系统的三种方式以及EMMC加载uboot方式

开发板通过SD卡进行启动,SD卡中加载的有uboot。

ssz__的博客 3750

C++面试八股文

和静态多态(又称编译期多态,即在系统编译期间就可以确定程序将要执行哪个函数),其中动态多态是通过虚函数实现的,虚函数是类的成员函数,存在存储虚函数指针的表叫做虚函数表,虚函数表是一个存储类成员虚函数的指针,每个指针都指向调用它的地方,当子类调用虚函数时,就会去虚表里面找自己对应的函数指针,从而实现“谁调用、实现谁”从而实现多态。而C++符号表中的符号不是以函数名命名的,称为函数名修饰规则,虽然函数名相同,但是函数参数等其他属性不同,取的符号也不同,所以不会产生查询歧义的问题,使得函数可以重载。

qq_46676829的博客 904

YOLO26剪枝 lamp剪枝测试精度仅掉0.7个点,速度提高11.8fps!

针对没有如何去选择剪枝的内容LAMP是层自适应幅度调整剪枝,无需任何参数,通过算法内部自己计算每个层的重要程度进行剪枝。基于权重重要程度和该层权重大小关系,权重越大表明该层越重要的思想进行优化。这个跟我前面说的非结构化全局剪枝是一个解法(MP),也就是lamp是在我前面那个非结构化剪枝的基础上进行优化的。但是这个逐层进行非结构剪枝目前还没有一个清晰的概念,确定每个层要剪枝多少。LAMP得分是一个平方权重大小,由层中所有“幸存权重”的总和归一化。

m0_64661770的博客 673

设备树之节点和属性

设备树概图 节点 别名节点 aliases 的意思是“别名”,因此 aliases 节点的主要功能就是定义别名,定义别名的目的就是为了方便访问节点。有时候引用的节点可读性很差,这个时候就可以定义一个简单的易于理解的名字。 在系统的中的定义如下: aliases { serial0 = "/simple-bus@fe000000/serial@llc500"; ethernet0 = "/simple-bus@fe000000/ethernet@31c000"; }; 获取节点属性函数: int of_a

cqxcool66的博客 3100

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Linux设备树:删除节点和属性的方法

本文主要介绍了在设备树中删除节点(node)和属性(property)的方法。为了便于理解,笔者先介绍了 dtsi 和 dts 的关系,然后构建了虚拟的需求场景,最终给出示例。

程序员仓库 3331

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

echarts树状图点击展开子节点_CPU眼里的结构设备树节点及属性详解

1 设备树(device tree)简介DTSpec定义一个devicetree的约束来描述硬件设备,boot引导程序将设备树传递给用户程序的内存空间中,并传递给用户相应设备树的指针。设备树为一个树形结构用来描述系统中的设备。每个节点由属性/值来描述给出设备的特性,除了根节点之外,每一个节点有一个确定的父节点。2 设备树基本模型DTS基本模型,图2-1展示了一个设备树的基本结构。其中“/...

weixin_42412910的博客 1662

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Zephyr RTOS设备树终极指南:节点与属性深度解析

Zephyr RTOS作为新一代嵌入式实时操作系统,其设备树(Devicetree)系统是硬件描述和配置的核心机制。设备树通过节点和属性的层次结构,为不同硬件架构提供统一的硬件抽象层。本文将深入解析Zephyr设备树中的节点结构、属性类型以及绑定规范,帮助开发者快速掌握这一关键技术。🚀 ## 什么是Zephyr设备树? Zephyr设备树是一个层次化的数据结构,主要用于描述硬件信息。它不仅是

gitblog_00815的博客 800

Linux 设备树: 设备树节点与属性在 dtb 文件中的存储

Linux 设备树: 设备树节点与属性在 dtb 文件中的存储

坚韧与专注 1586

设备树语法---节点属性

设备数系列,第一篇,节点属性。

ZZZZZBUG的博客 372

【设备树】SDIO节点属性

Linux设备树中SDIO配置分为主机控制器层和功能设备层。主机控制器节点描述硬件资源(寄存器、中断、时钟等),包含compatible、reg、interrupts等通用属性,以及bus-width、non-removable等SDIO特有属性。功能设备节点作为子节点,通过reg属性指定SDIO功能号,并包含设备专用属性如reset-gpios。Rockchip平台扩展了特有属性如rockchip,default-sample-phase用于时钟调优。完整配置需结合标准属性和芯片厂商文档,示例展示了典型的

似水流年 736

【Linux】Linux驱动开发:设备树节点与属性

目录1、设备节点(node)2、属性(property)3、节点的一些特性4、节点的一些标准属性4.1 compatible属性4.2 model属性4.3 status属性4.4 reg属性4.5 #address-cells和 #size-cells属性5、device_node结构体6、property结构体7、 找到节点(device_node)的API7.1 定义节点7.2 of_find_node_by_path7.3 of_find_node_by_name7.4 of_find_compat

W__winter的博客 3448

设备树节点深度解析:为何有些节点没有compatible属性?

帧缓冲区硬件LCD驱动内核板级DTBSoC基础DTB帧缓冲区硬件LCD驱动内核板级DTBSoC基础DTBfill:#333;important;important;fill:none;提供lcd0定义覆盖参数(lcd_width等)匹配compatible初始化控制器注册/dev/fb0。

niuTyler的博客 745

设备树下的属性和特殊节点

在设备树中一般节点命名格式如下: node-name@unit-address 其中“node-name”是节点名字,为 ASCII 字符串,节点名字应该能够清晰的描述出节点的 功能,比如“uart1”就表示这个节点是 UART1 外设。“unit-address”一般表示设备的地址或寄 存器首地址,如果某个节点没有地址或者寄存器的话“unit-address”可以不要,比如“cpu@0”。 一、 compatible 属性 compatible 属性用于将设备和驱...

qq_42174306的博客 1902

Linux 设备树 : 节点与属性的删除

一、节点删除 应用条件:通常DTS中包含了多个平台的描述文件,且多个平台会共享一些通用的dtsi。这些dtsi的节点对于指定的平台来说,其节点未必全部需要,因此就需要将不需要的节点进行裁剪或者DISABLE。节点删除就是实现这个作用。 语法如下: /delete-node/ 节点名; 例如在dra7.dtsi里面定义了rtc的节点,但是在自己的产品中不想使用这个RTC,而使用其他的rtc:...

z1026544682的专栏 4871

linux驱动开发学习笔记十二:设备树中节点的命名格式和常见属性

一、节点的命名格式 1 / { 2 aliases { 3 can0 = &flexcan1; 4 }; 5 6 cpus { 7 #address-cells = <1>; 8 #size-cells = <0>; 9 10 cpu0: cpu@0 { 11 ...

耐心的小黑的博客 6238

Linux驱动-设备树-获取节点属性of函数分析

我们前面一致再看设备树关联的内容:设备树语法、设备树节点、设备树配置、设备树中设备和驱动匹配等。总言之 设备数就是来描述设备属性的配置文件、映射文件。那么就像服务器、前端开发那样 js、json、dom 最终都是需要解析拿到节点数据的。前面也初步了解了 device_node 等基本知识。这里其实就是获取 节点的相关知识,同时也理解相关的获取属性的相关知识。这里对于of 函数 api 的了解、测试、简单应用,后面实际开发中会经常用到。只有自己测试验证过,基础打好了后面实际开发才能灵活运用。

十年饮冰,难凉热血 1150
上一篇: 设备树节点(node)的表示
下一篇: (一)Opencv3.2在Ubuntu14.04下的环境搭建
匿名打工仔
博客等级 码龄11年 24粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值