设备树常用的其他 OF操作函数

一.  简介

前面几篇学习了设备树常用的 OF操作函数,文章地址如下:

设备树常用 OF 操作函数说明一-CSDN博客

设备树常用 OF 操作函数说明二-CSDN博客

本文继续学习设备树 常用的一些其他的 OF操作函数。

二.  设备树常用的其他 OF操作函数

下面学习设备树其他的 OF操作函数。

1.  of_device_is_compatible 函数

of_device_is_compatible 函数用于查看节点的 compatible 属性是否有包含 compat 指定的字
符串,也就是检查设备节点的兼容性,函数原型如下:
int of_device_is_compatible(const struct device_node *device, const char *compat)
函数参数和返回值含义如下:
device :设备节点。
compat :要查看的字符串。
返回值: 0 ,节点的 compatible 属性中不包含 compat 指定的字符串;正数,节点的 compatible
属性中包含 compat 指定的字符串。

2.  of_get_address 函数

of_get_address 函数用于获取地址相关属性,主要是“ reg ”或者“ assigned-addresses ”属性值,函数原型如下:
const __be32 *of_get_address(struct device_node *dev, 
int index, 
u64 *size,
 unsigned int *flags)
函数参数和返回值含义如下:
dev :设备节点。
index :要读取的地址标号。
size :地址长度。
flags :参数,比如 IORESOURCE_IO IORESOURCE_MEM
返回值: 读取到的地址数据首地址,为 NULL 的话表示读取失败。

3.  of_translate_address 函数

of_translate_address 函数负责将从设备树读取到的地址转换为物理地址,函数原型如下:

u64 of_translate_address(struct device_node *dev, const __be32 *in_addr)
函数参数和返回值含义如下:
dev :设备节点。
in_addr :要转换的地址。
返回值: 得到的物理地址,如果为 OF_BAD_ADDR 的话表示转换失败。

4. of_address_to_resource 函数

IIC SPI GPIO 等这些外设都有对应的寄存器,这些寄存器其实就是一组内存空间, Linux 内核使用 resource 结构体来描述一段内存空间, 因此,用 resource 结构体描述的都是设备资源信息, resource 结构体定义在文件 include/linux/ioport.h 中,定义如 下:
struct resource {
	resource_size_t start;
	resource_size_t end;
	const char *name;
	unsigned long flags;
	struct resource *parent, *sibling, *child;
};
对于 32 位的 SOC 来说, resource_size_t u32 类型的。其中 start 表示开始地址, end 表示 结束地址, name 是这个资源的名字, flags 是资源标志位,一般表示资源类型,可选的资源标志 定义在文件 include/linux/ioport.h 中。
大 家 一 般 最 常 见 的 资 源 标 志 就 是 IORESOURCE_MEM IORESOURCE_REG
IORESOURCE_IRQ 等。接下来我们回到 of_address_to_resource 函数,此函数看名字像是从设 备树里面提取资源值,但是本质上就是将 reg 属性值,然后将其转换为 resource 结构体类型, 函数原型如下所示 :
int of_address_to_resource(struct device_node *dev, 
 int index,
 struct resource *r)
函数参数和返回值含义如下:
dev :设备节点。
index :地址资源标号。
r :得到的 resource 类型的资源值。
返回值: 0 ,成功;负值,失败。

三. 总结

关于设备树常用的 OF 函数就先讲解到这里, Linux 内核中关于设备树的 OF 函数不仅仅只有前面讲的这几个,还有很多 OF 函数我们并没有讲解,这些没有讲解的 OF 函数要结合具体 的驱动,例如,获取中断号的 OF 函数、获取 GPIO OF 函数等等,这些 OF 函数我们在后面的 驱动实验中再详细的讲解。

关于设备树就讲解到这里,关于设备树我们重点要了解一下几点内容:

①  DTS DTB DTC 之间的区别,如何将 .dts 文件编译为 .dtb 文件。
②  设备树语法,这个是重点,因为在实际工作中我们是需要修改设备树的。
③  设备树的几个特殊子节点。
④  关于设备树的 OF 操作函数,也是重点,因为设备树最终是被驱动文件所使用的,而 驱动文件必须要读取设备树中的属性信息,比如内存信息、 GPIO 信息、中断信息等等。要想在 驱动中读取设备树的属性值,那么就必须使用 Linux 内核提供的众多的 OF 函数。

  • 21
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值