嵌入式linux驱动开发篇之设备树

什么是设备树?

在这里插入图片描述

设备树(Device Tree)是一种用于描述嵌入式系统硬件组件及其连接关系的数据结构。它被广泛用于嵌入式 Linux 系统,尤其是针对使用多种不同架构和平台的嵌入式系统。它是一种与硬件描述相关的中间表示形式,将硬件信息抽象成一种可移植的格式,使得操作系统和引导加载程序能够在不同的硬件平台上运行,而无需硬编码特定的硬件配置信息。

树状结构:设备树是一个层次结构,由节点和属性组成。节点可以有子节点,形成树状结构。
节点类型:设备节点(device node)描述硬件组件,属性(property)提供有关硬件配置的详细信息。

设备树的主要作用包括:

描述硬件设备信息:将硬件设备的属性和配置信息以标准格式描述出来,包括设备类型、地址、中断等。
实现硬件平台的可移植性:将硬件描述与操作系统和引导加载程序分离,使得相同的软件可以在不同的硬件平台上运行。
简化内核配置和维护:通过设备树,内核可以动态地识别和管理硬件设备,而不需要硬编码在内核中,简化了内核的配置和维护工作。

设备树的一些知识点

DTS、DTB 和 DTC区别

DTS 是设备树源码文件,DTB 是将DTS 编译以后得到的二进制文件。将.dts 编译为.dtb需要用到 DTC 工具,DTC 工具源码在 Linux 内核的 scripts/dtc 目录下。

在arch/arm/boot/dts/Makefile

dtb-$(CONFIG_SOC_IMX6SLL) += \
imx6sll-lpddr2-arm2.dtb \
imx6sll-lpddr3-arm2.dtb \

在此处添加自己的设备树文件
要编译 DTS 文件的话只需要进入到 Linux 源码根目录下,然后执行如下命令:

make all
#或者
make dtbs

和 C 语言一样,设备树也支持头文件,设备树的头文件扩展名为.dtsi,.dtsi 文件用于描述 SOC 的内部外设信息,比如 CPU 架构、主频、外设寄存器地址范围。比如串口,SPI等等。imx6ull.dtsi文件部分内容如下

#include <dt-bindings/clock/imx6ul-clock.h>
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/interrupt-controller/arm-gic.h>
#include "imx6ull-pinfunc.h"
#include "imx6ull-pinfunc-snvs.h"
#include "skeleton.dtsi"/ {aliases {can0 = &flexcan1;can1 = &flexcan2;ethernet0 = &fec1;ethernet1 = &fec2;gpio0 = &gpio1;gpio1 = &gpio2;gpio2 = &gpio3;gpio3 = &gpio4;gpio4 = &gpio5;i2c0 = &i2c1;i2c1 = &i2c2;i2c2 = &i2c3;i2c3 = &i2c4;mmc0 = &usdhc1;mmc1 = &usdhc2;serial0 = &uart1;serial1 = &uart2;serial2 = &uart3;serial3 = &uart4;serial4 = &uart5;serial5 = &uart6;serial6 = &uart7;serial7 = &uart8;spi0 = &ecspi1;spi1 = &ecspi2;spi2 = &ecspi3;spi3 = &ecspi4;usbphy0 = &usbphy1;usbphy1 = &usbphy2;};cpus {#address-cells = <1>;#size-cells = <0>;cpu0: cpu@0 {compatible = "arm,cortex-a7";device_type = "cpu";reg = <0>;clock-latency = <61036>; /* two CLK32 periods */operating-points = </* kHz	uV */996000	1275000792000	1225000528000	1175000396000	1025000198000	950000>;fsl,soc-operating-points = </* KHz	uV */996000	1175000792000	1175000528000	1175000396000	1175000198000	1175000>;fsl,low-power-run;clocks = <&clks IMX6UL_CLK_ARM>,<&clks IMX6UL_CLK_PLL2_BUS>,<&clks IMX6UL_CLK_PLL2_PFD2>,<&clks IMX6UL_CA7_SECONDARY_SEL>,<&clks IMX6UL_CLK_STEP>,<&clks IMX6UL_CLK_PLL1_SW>,<&clks IMX6UL_CLK_PLL1_SYS>,<&clks IMX6UL_PLL1_BYPASS>,<&clks IMX6UL_CLK_PLL1>,<&clks IMX6UL_PLL1_BYPASS_SRC>,<&clks IMX6UL_CLK_OSC>;clock-names = "arm", "pll2_bus",  "pll2_pfd2_396m", "secondary_sel", "step","pll1_sw", "pll1_sys", "pll1_bypass", "pll1", "pll1_bypass_src", "osc";};};
....

设备节点

设备节点是Linux系统中一个重要的概念,它是用户程序和内核驱动之间的纽带。设备节点通常位于/dev目录下,并以文件的形式存在,每个设备节点都对应着一个特定的设备。通过打开设备节点,用户程序可以获取设备的句柄,从而与设备进行通信和控制。

标准属性

节点是由一堆的属性组成,节点都是具体的设备,不同的设备需要的属性不同,用户可以自定义属性。除了用户自定义属性,有很多属性是标准属性。
compatible 属性
compatible 属性也叫做“兼容性”属性,这是重要的属性。compatible 属性的值是一个字符串列表,compatible 属性用于将设备和驱动绑定起来。格式如下

"manufacturer,model"

I.MX6U-ALPHA 开发板上的音频芯片采用的欧胜(WOLFSON)出品的 WM8960,sound 节点的 compatible 属性值如下:

compatible = "fsl,imx6ul-evk-wm8960","fsl,imx-audio-wm8960";

model 属性
model 属性值也是一个字符串,一般 model 属性描述设备模块信息。

model = "wm8960-audio";

status 属性
status 属性是和设备状态有关的,status 属性值也是字符串。

描述
disabled表明设备是可操作的
okay表明设备当前是不可操作的,但是在未来可以变为可操作的,比如热插拔设备插入以后。至于 disabled 的具体含义还要看设备的绑定文档
fail表明设备不可操作,设备检测到了一系列的错误,而且设备也不大可能变得可操作。
fail-sss含义和“fail”相同,后面的 sss 部分是检测到的错误内容
reg 属性
reg 属性的值一般是(address,length)对。reg 属性一般用于描述设备地址空间资源信息,一般都是某个外设的寄存器地址范围信息。

ranges 属性
ranges属性值可以为空或者按照(child-bus-address,parent-bus-address,length)格式编写的数字矩阵。
ranges 属性每个项目由子地址、父地址和地址空间长度
这三部分组成:child-bus-address:子总线地址空间的物理地址,由父节点的#address-cells 确定此物理地址所占用的字长。parent-bus-address:父总线地址空间的物理地址,同样由父节点的#address-cells 确定此物理地址所占用的字长。length:子地址空间的长度,由父节点的#size-cells 确定此地址长度所占用的字长。

在Linux设备树中增加设备节点的步骤通常包括以下几个步骤:

确定设备信息:包括设备的名称、兼容性、模型等。这些信息通常在设备规格书或数据手册中可以找到。
编辑设备树源文件:设备树的信息通常存储在一个设备树源文件(.dts)中。你需要打开这个文件,并在适当的位置添加你的设备节点。设备节点通常包含设备的名称、兼容性、模型以及任何特定于设备的属性或子节点。
编译设备树:一旦你添加了设备节点并保存了设备树源文件,你需要使用设备树编译器(dtc)将其编译为设备树二进制文件(.dtb)。这个文件可以在引导时被内核使用。
更新引导加载程序:需要将新的设备树二进制文件添加到引导加载程序(如U-Boot)的配置中,以便在引导时加载它。具体的步骤取决于你使用的引导加载程序。
更新内核配置:可能还需要更新内核的配置,以启用对新设备的支持。这通常涉及编辑内核配置文件(.config),然后重新编译内核。
测试:最后,需要在目标硬件上测试更改,以确保新设备能够正确识别并工作。

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

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

相关文章

嵌入式培训机构四个月实训课程笔记(完整版)-Linux ARM驱动编程第五天-ARM Linux编程之设备节点 (物联技术666)

链接&#xff1a;https://pan.baidu.com/s/1hOBKyRom-4EZMBpFn1H9kQ?pwd1688 提取码&#xff1a;1688 Linux设备节点 设备管理是linux中比较基础的东西&#xff0c;但是由于Linux智能程度的越来越高&#xff0c;Udev的使用越来越广泛&#xff0c;使得越来越多的Linux新用户对…

vivado Convergent Rounding (LSB CorrectionTechnique)

DSP块基元利用模式检测电路来计算收敛舍入&#xff08;要么为偶数&#xff0c;要么为奇数&#xff09;。以下是收敛舍入推理的示例&#xff0c;它在块满时进行推理并且还推断出2输入and门&#xff08;1 LUT&#xff09;以实现LSB校正。 Rounding to Even (Verilog) Filename: …

如何生成狗血短剧

如何生成狗血短剧 狗血短剧剧本将上述剧本转成对话 狗血短剧剧本 标题&#xff1a;《爱的轮回》 类型&#xff1a;现代都市爱情短剧 角色&#xff1a; 1. 林晓雪 - 女&#xff0c;25岁&#xff0c;职场小白&#xff0c;善良单纯 2. 陆子轩 - 男&#xff0c;28岁&#xff0c;公…

WINCC如何新增下单菜单,切换显示页面

杭州工控赖工 首先我们先看一下&#xff0c;显示的效果&#xff0c;通过下拉菜单&#xff0c;切换主显示页面。如图一&#xff1a; 图1 显示效果 第一步&#xff1a; 通过元件新增一个组合框&#xff0c;见图2&#xff1b; 组合框的设置&#xff0c;设置下拉框的长宽及组合数…

GPT4的平替llama2本地部署教程,打造自己的专属大模型

llama2 是Meta公司发布的大预言模型&#xff0c;而且是一款开源免费的AI模型。光开源这个格局就吊打了GPT。从性能上来说更是号称是GPT4的平替。 今天这篇文章会从以下几个方面介绍下llama2&#xff1a; 1 基本介绍 2 本地mac环境部署llama2 llama2官方网址 https://llama…

Rust 数据结构与算法:1算法分析之乱序字符串检查

Rust 数据结构与算法 一、算法分析 算法是通用的旨在解决某种问题的指令列表。 算法分析是基于算法使用的资源量来进行比较的。之所以说一个算法比另一个算法好,原因就在于前者在使用资源方面更有效率,或者说前者使用了更少的资源。 ●算法使用的空间指的是内存消耗。算法…

JAVA语言程序设计 第12版 5.14题

求两个数之间的最大公约数 public class exer14 {public static void main(String[] args) {//方法 1Scanner inputnew Scanner(System.in);System.out.println("Enter first integer : ");int n1input.nextInt();System.out.println("Enter second integer: &…

JDK 17 新特性 (一)

既然 Springboot 3.0 强制使用 JDK 17 那就看看 JDK17 有哪些新特性吧 参考链接 介绍一下 新特性的历史渊源 JDK 17是Java Development Kit&#xff08;JDK&#xff09;的一个版本&#xff0c;它是Java编程语言的一种实现。JDK 17于2021年9月14日发布&#xff0c;并作为Java …

基于springboot智慧外贸平台源码和论文

网络的广泛应用给生活带来了十分的便利。所以把智慧外贸管理与现在网络相结合&#xff0c;利用java技术建设智慧外贸平台&#xff0c;实现智慧外贸的信息化。则对于进一步提高智慧外贸管理发展&#xff0c;丰富智慧外贸管理经验能起到不少的促进作用。 智慧外贸平台能够通过互…

js脚本的 defer 和 async 的区别

defer 和 async 都是用于控制 HTML 中 <script> 标签加载和执行 JavaScript 的属性&#xff0c;它们的作用有所不同&#xff1a; defer&#xff1a; 当浏览器遇到带有 defer 属性的 <script> 标签时&#xff0c;它会继续解析 HTML 页面&#xff0c;同时并行下载 de…

ddp是什么意思

DDP通常代表"Distributed Data Parallelism"&#xff0c;即分布式数据并行。它是一种用于训练深度学习模型的并行计算策略。在深度学习中&#xff0c;模型训练通常需要处理大量的数据和复杂的计算任务。DDP的目标是通过将数据和计算任务分布到多个计算设备&#xff0…

神经网络算法原理

目录 得分函数 数学表示 计算方法 损失函数 ​编辑 前向传播 反向传播 ​编辑 整体架构 正则化的作用 数据预处理 ​过拟合解决方法 得分函数 得分函数是在机器学习和自然语言处理中常用的一种函数&#xff0c;用于评估模型对输入数据的预测结果的准确性或匹配程度。…

【Python---六大数据结构】

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;Python &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; Python---六大数据结构 往期内容前言概述一下可变与不可变 Number四种不同的数值类型Number类型的创建i…

2024年【天津市安全员B证】新版试题及天津市安全员B证复审考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 天津市安全员B证新版试题参考答案及天津市安全员B证考试试题解析是安全生产模拟考试一点通题库老师及天津市安全员B证操作证已考过的学员汇总&#xff0c;相对有效帮助天津市安全员B证复审考试学员顺利通过考试。 1、…

人工智能学习与实训笔记(七):神经网络之模型压缩与知识蒸馏

人工智能专栏文章汇总&#xff1a;人工智能学习专栏文章汇总-CSDN博客 本篇目录 七、模型压缩与知识蒸馏 7.1 模型压缩 7.2 知识蒸馏 7.2.1 知识蒸馏的原理 7.2.2 知识蒸馏的种类 7.2.3 知识蒸馏的作用 七、模型压缩与知识蒸馏 出于对响应速度&#xff0c;存储大小和能…

(07)Hive——窗口函数详解

一、 窗口函数知识点 1.1 窗户函数的定义 窗口函数可以拆分为【窗口函数】。窗口函数官网指路&#xff1a; LanguageManual WindowingAndAnalytics - Apache Hive - Apache Software Foundationhttps://cwiki.apache.org/confluence/display/Hive/LanguageManual%20Windowing…

【Redis实战】有MQ为啥不用?用Redis作消息队列!?Redis作消息队列使用方法及底层原理高级进阶

&#x1f389;&#x1f389;欢迎光临&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;特别推荐给大家我的最新专栏《Redis实战与进阶》 本专栏纯属为爱发电永久免费&#xff01;&a…

致敬新春“不回家”的厨师,李锦记让厨师的年味更有滋味

“新春饭市万家团圆&#xff0c;致敬千万坚守岗位的厨师” 新春团圆饭向来是餐饮行业最为关注的节点&#xff0c;但过去几年&#xff0c;在疫情与后疫情时期&#xff0c;新年团圆饭市不免冷清。而今年餐饮行业真正迎来“龙抬头”&#xff0c;龙年除夕夜的团圆饭市终于重迎来了…

腾讯云4核8G服务器能支持多少人访问?

腾讯云4核8G服务器支持多少人在线访问&#xff1f;支持25人同时访问。实际上程序效率不同支持人数在线人数不同&#xff0c;公网带宽也是影响4核8G服务器并发数的一大因素&#xff0c;假设公网带宽太小&#xff0c;流量直接卡在入口&#xff0c;4核8G配置的CPU内存也会造成计算…

挑战杯 Yolov安全帽佩戴检测 危险区域进入检测 - 深度学习 opencv

1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; Yolov安全帽佩戴检测 危险区域进入检测 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;4分 该项目较为新颖&am…