终于搞懂Linux 设备树中的#address-cells,#size-cells 和reg 属性

news2024/12/22 20:15:09

目录

  • 一、前置知识
    • 1. 处理器平台
    • 2. reg 属性的基本格式
    • 3. reg 属性的作用
      • reg 用法
  • 二、#address-cells 和 #size-cells 属性
    • 1. 示例1
    • 2. 示例2
    • 3. 示例3

一、前置知识

要理解#address-cells#size-cell 这两个属性,就要先了解 reg属性。

1. 处理器平台

下面的介绍,主要基于 IMX6ULL进行

2. reg 属性的基本格式

reg = <address1 length1 address2 length2 address3 length3 ...>

3. reg 属性的作用

reg属性一般用于描述设备地址空间资源的信息,一般都是某个外设的寄存器地址范围信息。

reg 用法

imx6ull.dtsi 文件中

      qspi: qspi@021e0000 {
        #address-cells = <1>;
        #size-cells = <0>;
        compatible = "fsl,imx6ull-qspi", "fsl,imx6ul-qspi";
        reg = <0x021e0000 0x4000>, <0x60000000 0x10000000>;
        ...
      };

二、#address-cells 和 #size-cells 属性

#address-cells#size-cells 都是 32位的整形数据,用来表示当前节点和子节点 的reg属性的地址信息( address)和 长度信息 length的所占用的字长(32位)。

1. 示例1

    aips1: aips-bus@02000000 {
      compatible = "fsl,aips-bus", "simple-bus";
      #address-cells = <1>;
      #size-cells = <1>;
      reg = <0x02000000 0x100000>;
      ranges;
      ...
      }

这里address-cells = 1,size-cells = 1 , 表示 reg属性中,地址信息的长度是1个字长,地址长度信息也是1个字长,即是:address = 0x02000000, length = 0x100000(1M)

刚好跟参考手册 system memory map 中的AIPS1 的地址一致。

在这里插入图片描述

2. 示例2

  alphaled {
    #address-cells = <1>;
    #size-cells = <1>;
    compatible = "atkalpha-led";
    status = "okay";
    reg = < 0X020C406C 0X04    /* CCM_CCGR1_BAE       */
        0X020E0068 0X04    /* SW_MUX_GPIO1_IO03_BASE   */
        0X020E02F4 0X04    /* SW_PAD_GPIO1_IO03_BASE  */
        0X0209C000 0X04    /* GPIO1_DR_BASE       */
        0X0209C004 0X04>;  /* GPIO1_GDIR_BASE       */
  };

这里address-cells = 1,size-cells = 1 , 表示 reg属性中,地址信息的长度是1个字长,地址长度信息也是1个字长。

按照reg = <address length> 这样的规则解析:

  • address = 0X020C406C 刚好是寄存器 CCM_CCGR1的起始地址;
  • length = 0x04 ,表示寄存器是4byte的长度,即是32bits

所以上述reg 属性的第一行 0X020C406C 0X04 描述的是寄存器 CCM_CCGR1 的地址信息。

在这里插入图片描述

3. 示例3

在内核源码的 falconfalls.dts

      pci@1,0 {
        #address-cells = <3>;
        #size-cells = <2>;
        compatible = "intel,ce4100-pci", "pci";
        device_type = "pci";
        bus-range = <1 1>;
        reg = <0x0800 0x0 0x0 0x0 0x0>;
        ...
        }

这里address-cells = 3,size-cells = 2 , 表示 reg属性中,地址信息的长度是3个字长,地址长度信息是2个字长,即是:address = 0x0800 0x0 0x0, length = 0x00 0x00

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

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

相关文章

基于Django的图书管理系统

文章目录 前言一、页面展示1.登录2.前端页面3.后端页面 二、项目上传&#xff08;1&#xff09;导入数据库&#xff08;2&#xff09;导入项目&#xff08;3&#xff09;数据库密码修改&#xff08;4&#xff09;进入网站 总结 前言 本网站调用Django编写了图书管理网站&#…

【SpringBoot】SpringBoot3-基本介绍

目录 环境基本介绍pom.xml启动器依赖管理机制分析为什么导入starter-web所有相关依赖都导入进来&#xff1f;为什么版本号都不用写&#xff1f;自定义版本号第三方的依赖 总结 自动配置机制理解默认的包扫描规则配置默认值按需加载自动配置总结 自动配置流程问题流程步骤流程总…

网站开发初学者指南:2024年最新解读

在信息交流迅速的时代&#xff0c;网页承载着大量的信息&#xff0c;无论你知道还是不知道&#xff0c;所以你知道什么是网站开发吗&#xff1f;学习网站开发需要什么基本技能&#xff1f;本文将从网站开发阶段、网站开发技能、网站开发类型等角度进行分析&#xff0c;帮助您更…

前端JS必用工具【js-tool-big-box】学习,生成uuid,数组去重

js-tool-big-box这个前端工具库&#xff0c;今天又添加了2个实用功能&#xff0c;分别是生成uuid和数组去重。 目录 1 安装并引入 2 生成uuid 3 数组去重 1 安装并引入 安装最新版的js-tool-big-box工具包 由于生成uuid和数组去重属于两个不同对象下的方法&#xff0c;所以…

Trinity部署、使用与原理分析

文章目录 前言1、概述1.1、整体架构1.2、trinity-main1.3、childx 2、安装与使用2.1、源码安装2.1.1 部署系统依赖组件2.1.2 使用源码安装系统 2.2、使用方法 3、测试用例3.1、Splice系统调用压力测试3.2、其它系统调用压力测试3.3、自定义系统调用压力测试 4、总结4.1、部署架…

华为正式放弃高通芯片 | 百能云芯

5月15日&#xff0c;据外媒最新报道&#xff0c;高通公司正式确认&#xff0c;华为已无需依赖其处理器供应。 在出口许可被正式吊销前&#xff0c;高通的首席财务官已公开表示&#xff0c;预计明年与华为之间的芯片销售将为零&#xff0c;因为华为决定不再从高通购买4G芯片。 报…

centos7下使用docker安装fastdfs服务

先查看容器是否已经存在 docker ps -a 删除掉之前的tracker及storage服务 docker rm tracker docker rm storage 1、没有镜像先下载镜像 docker pull morunchang/fastdfs 2、运行服务 a、不指定物理服务器路径 docker run -d --name tracker --nethost morunchang/fastdfs sh…

Android Studio kotlin 转 Java

一. 随笔记录 java代码可以转化成kotlin代码&#xff0c;当然 Kotlin 反过来也可以转java 在Android Studio中 可以很方便的操作 AS 环境&#xff1a;Android Studio Iguana | 2023.2.1 二. 操作步骤 1.步骤 顶部Tools ----->Kotlin ------>Show Kotlin Bytecode 步…

Zotero 使用入门(笔记)

参考文献&#xff1a;Zotero入门完整教程-共27节-免费&#xff0c;李长太&#xff0c; 仅供参考学习

vue2基础语法03——过滤器filter

vue2基础语法03——过滤器filter 1. 前言1.1 需求1.2 不用过滤器实现1.2.1 插值语法、计算属性、方法实现1.2.2 更多关于计算属性 和 方法 2. 使用过滤器实现2.1 说明2.2 例子12.3 例子2——优化2.3.1 默认字母不分割2.3.2 默认字母以分割 2.4 过滤器使用地方 3. 全局过滤器4. …

实验室无法培养的菌,原来可以这么研究!

厌氧氨氧化&#xff08;anammox&#xff09;细菌在全球氮循环和废水氮去除中发挥着至关重要的作用&#xff0c;由于anammox细菌生长缓慢、难以培养等特点&#xff0c;对其生态学和生物学特性知之甚少。近日&#xff0c;凌恩生物合作客户重庆大学陈猷鹏教授团队在《Science of t…

Gemini 5.14日更新 - 推出Gemini Advance服务

收到Gemini Advance试用邀请 今天和往常一样&#xff0c;打开Gemini&#xff0c;惊喜的发现右小角一行小字&#xff1a;试用Gemini Advance。好家伙&#xff0c;OpenAI 刚推出ChatGPT 4o&#xff0c;Google立马推出Gemini Advance&#xff0c;说明国外高科技企业也是很拼的。 …

哈夫曼编码的应用

数据结构与算法课的一个简单实验&#xff0c;记录一下&#xff0c;以供参考。 文章目录 要求测试样例统计字母出现次数建立哈夫曼树对字符编码对原文进行编码译码 要求 输入一段100—200字的英文短文&#xff0c;存入一文件a中。统计短文出现的字母个数n及每个字母的出现次数…

公域流量如何引流到私域流量?

公域流量和私域流量是数字营销中常用的两种流量类型。公域流量指的是通过搜索引擎、社交媒体等公共平台获取的流量&#xff0c;而私域流量则是指企业自身拥有的用户群体和数据。那么&#xff0c;如何将公域流量引流到私域流量呢&#xff1f;下面我将为您详细解答。 1、提供有价…

开源社区社群兴趣搭子圈子,系统开发新论坛交流兴趣爱好圈子论坛可搭建本地同城社群圈子社区圈子同城找搭子圈子,包含小程序+公众号H5+安卓苹果app,源码交付!

优势 1、长时间的陪玩APP源码开发经验&#xff0c;始终坚持从客户的实际需求出发 2、提供安全的陪玩系统源码开发解决方案 3、需求定制不走弯路&#xff0c;源码交付&#xff0c;可二开 4、追求精细化服务&#xff0c;力求做好每一个陪玩系统源码开发环节搭建流程支持 PC 端…

多步预测系列 | LSTM、CNN、Transformer、TCN、串行、并行模型集合

● 环境框架&#xff1a;python 3.9 pytorch 1.8 及其以上版本均可运行 ● 使用对象&#xff1a;论文需求、毕业设计需求者 ● 代码保证&#xff1a;代码注释详细、即拿即可跑通。 往期精彩内容&#xff1a; 时序预测&#xff1a;LSTM、ARIMA、Holt-Winters、SARIMA模型的分…

MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】

前言 做数仓开发离不开 SQL &#xff0c;写了很多 HQL 回头再看 MySQL 才发现&#xff0c;很多东西并不是 HQL 所独创的&#xff0c;而是几乎都来自于关系型数据库通用的 SQL&#xff1b;想到以后需要每天和数仓打交道&#xff0c;那么不管是 MySQL 还是 Oracle &#xff0c;都…

部署YUM仓库及 NFS共享服务

YUM仓库服务 部署YUM软件仓库 使用YUM工具管理软件包 一、YUM概述 1.YUM (Yellow dog Updater Modified) 基于RPM包构建的软件更新机制可以自动解决依赖关系所有软件包由集中的YUM软件仓库提供 2. 准备安装源3-1 2.1 软件仓库的提供方式 FTP服务:ftp://..HTTP服务:htt…

线性回归学习笔记

学习了王天一博士的机器学习40讲&#xff0c;做个小总结&#xff1a; 1、机器学习中&#xff0c;回归问题隐含了输入变量和输出变量均可连续取值的前提。 2、单变量线性回归&#xff0c;所有样本到直线的欧氏距离之和最小&#xff0c;即均方误差最小化。 3、最小二乘法的几何意…

OceanBase集群如何进行OCP的替换

有OceanBase社区版的用户提出替换 OCP 管控平台的需求。举例来说&#xff0c;之前的OCP平台采用单节点&#xff0c;然而随着OceanBase集群的陆续上线和数量的不断增多&#xff0c;担心单节点的OCP可能面临故障风险&#xff0c;而丧失对OceanBase集群的管控能力。另此外&#xf…