Linux 获取设备树源文件(DTS)里的资源
韩大卫@吉林师范大学
在linux使用platform_driver_register() 注册  platform_driver 时, 需要在 platform_driver 的probe() 里面知道设备的中断号, 内存地址等资源。这些资源的描述信息存放在 resource 数据结构中, 相同的资源存放在一个树形树形数据结构中, 通过父节点, 兄弟节点, 子节点相连。 比如中断资源, IO端口资源, IO内存资源, DMA资源有不同资源树。 Linux使用 struct resource 来描述一个resoucestruct resource {resource_size_t start;      //资源范围的开始resource_size_t end;        //资源范围的结束const char *name;     //资源拥有者名unsigned long flags;    //资源属性标识struct resource *parent, *sibling, *child;   //资源树的父节点, 兄弟节点, 字节点指针
};resource_size_t 由系统决定 为uint32_t 或uint64_t 。在platform机制里, 使用platform_get_resource()来获取指定的资源类型。 比如获取想获取中断号, irq = platform_get_irq(pdev, 0);int platform_get_irq(struct platform_device *dev, unsigned int num)
{struct resource *r = platform_get_resource(dev, IORESOURCE_IRQ, num);return r ? r->start : -ENXIO;
}
EXPORT_SYMBOL_GPL(platform_get_irq);     platform_get_irq() 会返回一个start, 即可用的中断号。之后便可使用request_irq() 来注册中断服务函数。 再比如想要获取IO内存资源:struct resource *res_mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);即可得到一个IO内存资源节点指针, 包括了地址的开始,结束地址等, 该IO内存的长度可用 resource_size() 来获取, 但这段资源只是一个描述, 想真正使用这段IO内存, 还要经过先申请, 再映射的过程。例如可使用devm_request_mem_region()申请出使用这段IO内存, 再使用ioremap() 将其映射出来, 供用户空间使用。devm_request_mem_region(&pdev->dev, res_mem->start, resource_size(res_mem),res_mem->name))addr_start = ioremap(res_mem->start, resource_size(res_mem));ioremap() 的返回值即为该资源的虚拟地址。IO内存的资源是在设备树源(Device Tree Source)文件(以.dts结尾)里给出的,.dts文件就是用来描述目标板硬件信息的, 在uboot启动后, 使用uboot提供的特定API将其获取出来, 如fdt_getprop(), fdt_path_offset(), 这些API包含在uboot 的头文件<libfdt.h> 里面。uboot将.dts文件里的描述解析出来, 再对相应寄存器赋值, 在linux启动后, 使用  platform_get_resource() 即可获取到这些给定的资源, 在驱动里使用。例如一个在.dts文件中关于gpio资源的描述:gpio: gpio-controller@1070000000800 {#gpio-cells = <2>;compatible = "cavium,octeon-3860-gpio"; reg = <0x10700 0x00000800 0x0 0x100>;
gpio-controller;…根据其描述, 可知道gpio控制器的IO内存起始地址为:0x107900000800, 长度为0x100.即从 0x107900000800 到 0x1079000008ff.在目标板里使用  cat /proc/iomem  可以看到:1070000000800-10700000008ff : /soc@0/gpio-controller@1070000000800关于i2c 的描述:twsi0: i2c@1180000001000 {#address-cells = <1>;#size-cells = <0>;compatible = "cavium,octeon-3860-twsi";reg = <0x11800 0x00001000 0x0 0x200>;
interrupts = <0 45>;clock-rate = <100000>;IO内存起始地址为: 0x118000001000, 长度为0x200. 从 0x118000001000 到 0x1180000011ff.在目标板里使用  cat /proc/iomem  可以看到:1180000001000-11800000011ff : /soc@0/i2c@1180000001000

转载于:https://www.cnblogs.com/dyllove98/p/3170178.html

Linux 获取设备树源文件(DTS)里描述的资源相关推荐

  1. linux 获取设备树源文件(dts)里描述的资源,Linux 获取设备树源文件(DTS)里描述的资源...

    在linux使用platform_driver_register() 注册  platform_driver 时, 需要在 platform_driver 的probe() 里面知道设备的中断号, 内 ...

  2. Linux下设备树dts内容(详细)总结及示例解析

    文章目录 一.简介 二.设备树基础内容 2.1 设备树文件存放路径 2.2 DTS.DTB和DTC关系 2.3 传统驱动代码和使用设备树的对比 三.设备树内容属性介绍 3.1 节点名称 3.2 com ...

  3. 【Linux】设备树详解dts

    在Linux3.x版本后,arch/arm/plat-xxx和arch/arm/mach-xxx中,描述板级细节的代码(比如platform_device.i2c_board_info等)被大量取消, ...

  4. linux 使用设备树点亮LED 实战

    文章目录 前言 一.使用设备树 1.1.使用寄存器函数读写 1.2.使用pinctrl和gpio子系统 前言 了解了设备树后,这一小节将使用设备树方式点亮LED 一.使用设备树 imx6ull-ali ...

  5. 第五十三讲 获取设备树属性

    第五十三讲 获取设备树属性 文章目录 第五十三讲 获取设备树属性 一.获取设备树属性信息 1.查看属性所在节点 device_node 结构体 2.如何查找结点 节点路径 节点类型(不推荐使用) 节点 ...

  6. linux设备和驱动匹配的方法,Linux使用设备树的i2c驱动与设备匹配方式

    Linux使用设备树的i2c驱动与设备匹配有3种方式: of_driver_match_device acpi_driver_match_device i2c_match_id 源码: static ...

  7. Linux内核设备树DTS

    今天准备专门来分析一下内核设备树,主要按照如下三个方向来分析: Device Tree组成及用法: DTS文件解析常用api介绍: DTS文件的编译: 高通Android源码中dts文件引用流程: # ...

  8. linux内核设备树及编译--完整清晰

    1.设备树的概念 在内核源码中,存在大量对板级细节信息描述的代码.这些代码充斥在/arch/arm/plat-xxx和/arch/arm/mach-xxx目录,对内核而言这些platform设备.re ...

  9. FDT设备树(dts)和CCF框架

    设备树 在过去的ARM Linux中,arch/arm/plat-xxx和arch/arm/mach-xxx中充斥着大量的垃圾代码,相当多数的代码只是在描述板级细节,而这些板级细节对于内核来讲,不过是 ...

最新文章

  1. Forefront_TMG_2010-TMG建立站点间***
  2. java word openoffice_java 使用openoffice 转换文档,成.pdf,实现在线预览效果
  3. 【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目(8) 权限管理,自定义权限,扩展权限...
  4. Java 运算符及优先级
  5. P1081 开车旅行 倍增 洛谷
  6. JS面向对象——原型式继承函数、寄生式继承函数、寄生组合式继承
  7. MySQL学习之路 一 : MySQL 5.7.19 源码安装
  8. yum下载文件的缓存位置
  9. LeetCode 135. 分发糖果(贪心算法)
  10. linux进程阻塞的原因,释放大块内存时的阻塞问题
  11. 衡量神经网络的三个指标,参数量,multi-add,flop计算力
  12. AWS亚马逊ssh登录失败 Permissions 0644 for .pem are too open
  13. 谈谈对于企业级系统架构的理解
  14. 一文读懂蓝牙低功耗BLE的应用市场
  15. Eviews10.0下载与安装
  16. 关于汽油清洁剂,到底该不该加
  17. 刷爆朋友圈的虚幻引擎5,会给我们带来哪些影响?
  18. 北京软件开发商城app系统软件开发大概多少钱
  19. 无限恐怖大逃杀服务器链接失败,为什么吃鸡游戏买钥匙老是连接错误 | 手游网游页游攻略大全...
  20. 2023最新Vue 面试题+详解答案

热门文章

  1. 超简单的Oracle 数据库安装教程
  2. 电子书下载|2020 年云原生年货小红书来啦!
  3. 函数计算是如何工作的?
  4. 华为有了鸿蒙就可以翻身吗,鸿蒙2.0要来了,华为手机能靠此翻身吗?
  5. 原生php开发cms,海洋cms视频内容管理系统v10.3 原生PHP代码+影视管理系统+视频点播系统+开源CMS...
  6. erlang 怎么获得socket中的属性_技术干货,python中的异步网络框架socketserver
  7. sql 找到最近的值_数据分析——SQL查询(常用函数)
  8. arm-linux-gcc 头文件搜索路径,gcc和arm-linux-gcc默认头文件库搜索路径
  9. python可抓取数据包括什么_Python对JS型数据抓取有什么特别好的方法吗,pythonjs型抓取,想写一个爬虫,但是需要抓...
  10. rust设置里面那个是能见度_IDEA maven设置里面的Repositories这个设置问题