itop-3568开发板驱动学习笔记(22)设备树(一)设备树基础

news2024/11/17 17:47:14

《【北京迅为】itop-3568开发板驱动开发指南.pdf》 学习笔记

文章目录

  • 设备树简介
  • 设备树编译
  • 设备树语法
    • 设备根节点
    • 设备子节点
    • 节点名称
    • reg 属性
    • #address-cell 和 #size-cells 属性
    • model 属性
    • status 属性
    • compatible 属性
    • aliases 节点
    • chosen 节点
    • device_type 属性
    • 自定义属性

设备树简介

什么是设备树

设备树是保留着存在于系统中的设备信息,当机器引导时,OS通过使用驱动程序和其他组件获得的信息建立此树,并且当添加或删除设备时更新此树。

上一篇笔记提到了平台设备模型,它将设备和驱动区分开来,一份驱动可以与多份设备匹配,但随着 device (板级文件)的增多,Linux 内核代码变得越来越多,这些代码相对于内核来说都算是”垃圾代码“,为了解决这个问题,linux 就引入了设备树来替代 device 文件。

既然设备树是用来替代平台总线 device 文件的,那么设备树的运作原理还是基于平台总线模型,只是设备树采用的是文本格式,不像 device.c 一样每次修改都要重新编译内核。

设备树基本名词

名词含义
DTDevice Tree 设备树
FDTFlattened Device Tree 展开设备树,起源 OpenFirmware(OF)
dtsdevice tree source 设备树源码
dtsidevice tree source include 通用的设备树源码
dtbdevicedevice tree blob dts 编译生成的文件
dtcdevice tree compiler 设备树编译器

设备树编译

编译设备树命令:

dtc -I dts -O dtb -o xxx.dtb xxx.dts

反编译设备树:

dtc -I dtb -O dts -o xxx.dts xxx.dtb

示例:

在这里插入图片描述

设备树语法

设备根节点

根节点是设备树必须添加的节点,节点名为 /。

示例:

/dts-v1/; // dts 版本
/{        // 根节点
};

设备子节点

子节点格式:

	[label:] node-name[@unit-address] {
		[properties definitions]
		[child nodes]
	}

Tip:同级节点下节点名称不能相同,不同级别节点名称可以相同。

示例:

在这里插入图片描述

节点名称

在对节点命名时,需要体现设备的特征,如串口一般命名为 uart 或 serial,

在这里插入图片描述
节点名称是必选项,标签和设备地址是可选项,标签是节点的别名,设备地址用于区分不同的设备。

reg 属性

reg 属性用来描述地址信息,如寄存器地址,格式为:

reg = <addr1 len1 addr2 len2 ...>

在这里插入图片描述

#address-cell 和 #size-cells 属性

reg 属性的长度是可变的,#address-cell 和 #size-cells 属性用来决定 reg 的长度,比如下面这个例子,#address-cell 为 1,表示有一个地址,#size-cells 为 0,表示有 0 个地址长度。

在这里插入图片描述

model 属性

model 属性是一个字符串,用来描述设备信息,例如:

在这里插入图片描述

status 属性

status 属性表示设备的状态,该属性值是一个字符串,可取值包括:

status 值含义
okay设备可用
disabled设备不可用
fail设备不可用且有错误
fail-sss设备不可用且有 sss 错误(sss 是错误内容)

示例:
在这里插入图片描述

compatible 属性

compatible 是设备树与驱动进行匹配的属性,属性值为字符串,compatible 属性值的推荐格式:"manufacturer,model"(“厂商名,模块驱动名”)。

该属性可以有多个值,驱动会从第一个值开始匹配,示例:

在这里插入图片描述

aliases 节点

aliases 用来定义节点的别名,它和节点标签类似,但它可以批量定义别名。

示例:

在这里插入图片描述

chosen 节点

chosen 节点用来 uboot 给内核传递参数(重点是 bootargs 参数),该节点必须是根节点的子节点。

示例:

在这里插入图片描述

device_type 属性

device_type 属性值为字符串,只用于 cpu 或 memory 节点。

示例:

在这里插入图片描述

自定义属性

设备树可以自定义一些属性,

比如 mipi 背光参数,

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/438203.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用Docker创建并运行Jenkins详细步骤

文章目录 一、使用Docker搭建Jenkins二、为Jenkins配置执行节点1、进入管理页面2、新建节点3、配置节点信息4、子节点连接master节点5、在子节点机器上运行上面复制下来的命令6、查看子节点是否在线 三、创建一个简单的job1、进入创建页面2、设置job名称3、配置job相关信息4、构…

eBay变现方式有哪些?如何利用好测评自养号?

近年来&#xff0c;越来越多的人选择在eBay开店&#xff0c;甚至很多其他平台的卖家也转型到了eBay。但很多卖家发现&#xff0c;在运营了一段时间后&#xff0c;过了对新账号的流量扶持期&#xff0c;店铺突然出现流量开始下滑的情况&#xff0c;针对这种情况卖家可以采取哪些…

计算机网络(数据链路层)部分习题

1. 通过传统以太网发送中文“华南师范大学计算机学院”&#xff0c;封装成以太网帧&#xff0c;请问该帧的数据字段有效字节是多少&#xff1f;需要填充多少个字节&#xff1f; 答&#xff1a;一个字两个字节&#xff0c;“华南师范大学计算机学院”共11个字&#xff0c;有效字…

Visual Studio容器工具要求在构建,调试或运行容器化项目之前运行Docker

出现此提示&#xff0c;是因为电脑未安装Docker所致&#xff0c;接下来就教大家如何安装Docker。 第一步&#xff1a;下载 地址&#xff1a;Install Docker Desktop on Windows | Docker Documentation 第二步&#xff1a;安装 1、双击Docker Desktop Installer.exe运行安装程…

电子束与材料相互作用Matlab代码

标题 1 题目2 实验原理2.1 蒙特卡洛模拟的基本思想2.2 电子散射的基本概念 3 代码 1 题目 扫描透射电镜(STEM)的基本原理是用极细的扫描电子束透射样品,透射电子直接被具有一定张角的接收器所接收&#xff0c;透射电流的强度直接反应了样品的质量厚度。 对于一定厚度的样品&am…

面试官:一千万的数据,你是怎么查询的?

面试官&#xff1a;一千万的数据&#xff0c;你是怎么查询的&#xff1f; 1 先给结论 对于1千万的数据查询&#xff0c;主要关注分页查询过程中的性能 针对偏移量大导致查询速度慢&#xff1a; 先对查询的字段创建唯一索引 根据业务需求&#xff0c;先定位查询范围&#xff08…

23Java面试专题 八股文面试全套真题(含大厂高频面试真题)

准备篇-01-企业简历筛选规则 准备篇-02-简历注意事项 等写简历的时候看02和04... 准备篇-03-应届生该如何找到合适的练手项目 &#xff01;准备篇-04-Java程序员的面试过程 Redis篇-01-redis开篇 感觉有点难 Redis篇-02-redis使用场景-缓存-缓存穿透 Redis篇-03-redis使用场景-…

一日一题:第十题---并查集(集合合并)and 二叉树遍历

​作者&#xff1a;小妮无语 专栏&#xff1a;一日一题 &#x1f6b6;‍♀️✌️道阻且长&#xff0c;不要放弃✌️&#x1f3c3;‍♀️ 今天来更前几天做的&#xff0c;怕忘记了hh 目录 并查集题目描述(集合合并)代码对路径压缩的解释 二叉树遍历题目描述代码 并查集 ​​​…

【JavaEE】死锁是什么?如何避免死锁(保姆级讲解)

博主简介&#xff1a;想进大厂的打工人博主主页&#xff1a;xyk:所属专栏: JavaEE初阶 本篇文章将介绍什么是死锁&#xff0c;死锁的四大必要条件&#xff0c;如何去避免死锁~~~ 目录 一、死锁是什么&#xff1f; 二、关于死锁的情况 2.1 一个线程的情况 2.2 两个线程的情…

javaweb家具购物商城的电商设计与实现

目 录 1 绪论 1 1.1 项目背景 1 1.2 研究意义 1 1.3 本系统概述 2 2系统分析 3 2.1 系统需求分析 3 2.1.1 功能需求 3 2.1.2 性能需求 4 2.2 系统可行性分析 4 2.2.1 技术及开发方法可行性 4 2.2.2 管理可行性 4 2.2.3 经济可行性 5 2.3 业…

CPU的一、二、三级缓存

在Java并发编程中&#xff0c;我们经常会遇到共享变量的读写问题&#xff0c;关于这类问题我们经常会说到原子性、可见性、有序性这三大特性&#xff0c;再进一步会了解到总线和CPU的一、二、三级缓存。关于这三个级别的缓存网上文章介绍比较多&#xff0c;今天我们这篇文章&am…

Django REST Framework(DRF)框架之其他常用API的使用

DRF之其他常用API的使用 限流Throttling限流类设置全局默认限流策略基于类视图限流定义限流频次自定义限流类 过滤Filtering查询集过滤查询参数过滤使用过滤器组件使用过滤器字段过滤字段排序 分页Pagination常用分页类全局与局部的使用自定义分页类 异常处理Exceptions常见异常…

Docder 安装——Windows版

Docder 安装——Windows版 docder 下载地址 https://smartidedl.blob.core.chinacloudapi.cn/docker/20210926/Docker-win.exe 1、使用 PowerShell 启用 Hyper-V 以管理员身份打开 PowerShell 控制台&#xff0c;运行以下命令&#xff1a; Enable-WindowsOptionalFeature -On…

在flowforge中使用模版配置来自定义node-red实例

添加模版设置 在FlowForge中,每个项目都是从模板创建的。模板为项目定义了一组预配置的选项。这包括运行时设置- 比较常见就是 Node-RED settings.js文件中设置的值。 模板还定义了项目可以自定义哪些选项。 本篇文章就来解释一下如何向模板对象中添加新的Node-RED运行时选项…

365天深度学习打卡 YOLOv5白皮书-第Y4周:common.py文件解读

YOLOv5白皮书-第Y4周&#xff1a;common.py文件解读 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊|接辅导、项目定制 文件位置&#xff1a;./models/common.py 该文件是实现YOLO算法中各个模块的地方&#…

【Cpp】手撕搜索二叉树(KV模型)

文章目录 二叉搜索树的应用搜索二叉树(KV模型)代码:二叉搜索树的性能分析 二叉搜索树的应用 K模型&#xff1a;K模型即只有key作为关键码&#xff0c;结构中只需要存储Key即可&#xff0c;关键码即为需要搜索到的值。 比如&#xff1a;给一个单词word&#xff0c;判断该单词是…

水果FL Studio21最新中文完整版下载更新及内容介绍

简单总结一下&#xff0c;本次小版本更新最重要的内容&#xff0c;我个人认为是对于M1芯片的适配。其余的比如EQ2&#xff0c;3x这些我们很熟悉的插件虽说也有更新&#xff0c;但是估计并没有特别大的改动。我个人的话会先放一段时间&#xff0c;等下次有其他更让我感兴趣的内容…

吃透SpringMVC面试八股文

说说你对 SpringMVC 的理解 SpringMVC是一种基于 Java 的实现MVC设计模型的请求驱动类型的轻量级Web框架&#xff0c;属于Spring框架的一个模块。 它通过一套注解&#xff0c;让一个简单的Java类成为处理请求的控制器&#xff0c;而无须实现任何接口。同时它还支持RESTful编程…

【智能电网】智能电网中针对DOS和FDIA的弹性分布式EMA(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

burpsuite的基本使用

一&#xff0c;Proxy&#xff08;代理&#xff09; 目录 一&#xff0c;Proxy&#xff08;代理&#xff09; 1.1 intercept &#xff08;拦截&#xff09; 1.2 HTTP history&#xff08;HTTP历史记录&#xff09; 1.3 WebSockets history 1.4 options&#xff08;选项&am…