Linux 设备树dts介绍

2024-04-19 07:58
文章标签 linux 介绍 设备 dts

本文主要是介绍Linux 设备树dts介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一  概述

    在写驱动的过程中,有很大一部分工作是在对设备信息进行管理,随着芯片种类的增加,这种管理工作变得越来越复杂。目前写驱动主要有三种方式:

1、跟写单片机裸机驱动一样,直接把驱动和硬件信息写在一起。这种方式的优点是程序简单,缺点很明显,就是每当硬件信息改动的时候,比如简单的更换一下IO引脚,都需要去修改源文件的大部分内容,因此扩展性不强。

2、使用总线-设备-驱动模型。这种模式使用上下分层,左右分离的思想,把设备和驱动分离,然后挂在一根总线上,使用一定的机制进行匹配。这种方式相对与第一种,扩展性更强,当需要改动硬件信息时,只需要改动device相关代码就好,而driver相关代码则是纯软件概念,不需要动,但是他仍然不够好,想象一下每个设备对应一个device文件,当有成千上万个设备时,岂不是会产生大量的冗余代码,而且每次改动硬件信息都需要重新编译驱动,导致效率不高,于是有了第三种方式。

3、使用设备树管理。这种方式沿用总线-设备-驱动模型,与第二种方式不同的是,我们把硬件信息单独抽出来,使用一定的格式组织起来,这就是设备树文件(dts),使用时它会被编译成dtb文件,被内核解析。这样的方式减少了代码的冗余度,提高了效率,下面一步一步地了解dts文件是怎样使用起来的。

二  dts文件格式

    既然是一棵树,就要有根和节点,下面通过一个实际的例子来看下这些东西是怎么定义的。一个完整的设备树文件摘选部分如下:

/dts-v1/;/* First 4KB has pen for secondary cores. */
/memreserve/ 0x00000000 0x0001000;/ {model = "Calxeda Highbank";compatible = "calxeda,highbank";#address-cells = <1>#size-cells = <1>cpus {#address-cells = <1>#size-cells = <0>cpu@0 {compatible = "arm,cortex-a9";reg = <0>next-level-cache = <&L2>};cpu@1 {compatible = "arm,cortex-a9";reg = <1>next-level-cache = <&L2>};};memory {name = "memory";device_type = "memory";reg = <0x00000000 0xff900000>};chosen {bootargs = "console=ttyAMA0";};soc {#address-cells = <1>#size-cells = <1>compatible = "simple-bus";interrupt-parent = <&intc>ranges;timer@fff10600 {compatible = "arm,cortex-a9-twd-timer";reg = <0xfff10600 0x20>interrupts = <1 13 0xf01>};watchdog@fff10620 {compatible = "arm,cortex-a9-twd-wdt";reg = <0xfff10620 0x20>interrupts = <1 14 0xf01>};intc: interrupt-controller@fff11000 {compatible = "arm,cortex-a9-gic";#interrupt-cells = <3>#size-cells = <0>#address-cells = <1>interrupt-controller;reg = <0xfff11000 0x1000>,<0xfff10100 0x100>};gpioe: gpio@fff30000 {#gpio-cells = <2>compatible = "arm,pl061", "arm,primecell";gpio-controller;reg = <0xfff30000 0x1000>interrupts = <0 14 4>};......};
};

从上面可以看出,dts文件的布局是这样的:

/dts-v1/;  // 表示设备树文件的版本号
[memory reservations] //表示保留的内存大小,就是说我想保留多少内存给自己用,不给内核使用
格式为: /memreserve/ <address> <length>
/ {                   // "/" 表示根  [property definitions]   // 属性定义[child nodes]            // 子节点定义
};

子节点的格式为:

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

首先[label:],如上面的这个节点:

gpioe: gpio@fff30000 {#gpio-cells = <2>compatible = "arm,pl061", "arm,primecell";gpio-controller;reg = <0xfff30000 0x1000>interrupts = <0 14 4>};

这篇关于Linux 设备树dts介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/916979

相关文章

防止Linux rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

Java中HashMap的用法详细介绍

《Java中HashMap的用法详细介绍》JavaHashMap是一种高效的数据结构,用于存储键值对,它是基于哈希表实现的,提供快速的插入、删除和查找操作,:本文主要介绍Java中HashMap... 目录一.HashMap1.基本概念2.底层数据结构:3.HashCode和equals方法为什么重写Has

linux系统上安装JDK8全过程

《linux系统上安装JDK8全过程》文章介绍安装JDK的必要性及Linux下JDK8的安装步骤,包括卸载旧版本、下载解压、配置环境变量等,强调开发需JDK,运行可选JRE,现JDK已集成JRE... 目录为什么要安装jdk?1.查看linux系统是否有自带的jdk:2.下载jdk压缩包2.解压3.配置环境

Linux搭建ftp服务器的步骤

《Linux搭建ftp服务器的步骤》本文给大家分享Linux搭建ftp服务器的步骤,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录ftp搭建1:下载vsftpd工具2:下载客户端工具3:进入配置文件目录vsftpd.conf配置文件4:

Linux实现查看某一端口是否开放

《Linux实现查看某一端口是否开放》文章介绍了三种检查端口6379是否开放的方法:通过lsof查看进程占用,用netstat区分TCP/UDP监听状态,以及用telnet测试远程连接可达性... 目录1、使用lsof 命令来查看端口是否开放2、使用netstat 命令来查看端口是否开放3、使用telnet

Linux系统管理与进程任务管理方式

《Linux系统管理与进程任务管理方式》本文系统讲解Linux管理核心技能,涵盖引导流程、服务控制(Systemd与GRUB2)、进程管理(前台/后台运行、工具使用)、计划任务(at/cron)及常用... 目录引言一、linux系统引导过程与服务控制1.1 系统引导的五个关键阶段1.2 GRUB2的进化优

Springboot项目构建时各种依赖详细介绍与依赖关系说明详解

《Springboot项目构建时各种依赖详细介绍与依赖关系说明详解》SpringBoot通过spring-boot-dependencies统一依赖版本管理,spring-boot-starter-w... 目录一、spring-boot-dependencies1.简介2. 内容概览3.核心内容结构4.

Linux查询服务器 IP 地址的命令详解

《Linux查询服务器IP地址的命令详解》在服务器管理和网络运维中,快速准确地获取服务器的IP地址是一项基本但至关重要的技能,下面我们来看看Linux中查询服务器IP的相关命令使用吧... 目录一、hostname 命令:简单高效的 IP 查询工具命令详解实际应用技巧注意事项二、ip 命令:新一代网络配置全