Linux 设备树相关函数

简介: Linux 设备树相关函数

一:设备树相关解析函数


int of_property_read_string_index(struct device_node *np,const char *propname, int index,const char **out_string)


功能:读字符串数组键值对中指定的字符串


参数:

@np 设备数中的设备节点
@propname 属性名
@index 数组中的哪一个字符串
@out_string 二级指针,用来获取存放字符串指针的地址


int of_property_read_u8_array(const struct device_node *np,const char *propname,u8 *out_values, size_t sz);
  功能:获取无符号8位整型数组值    
  参数:    
    @np   设备节点结构体指针    
    @propname 属性名    
    @out_values   存放u8类型数据的地址    
    @sz     获取数组元素的个数
  int of_property_read_string_array(struct device_node *np,const char *propname,const char **out_strs,size_t sz)
  功能:读字符串数组
  参数:    
    @np   设备节点结构体指针    
    @propname 属性名   
     @out_strs       存放字符串类型数据的地址    
     @sz      获取数组元素的个数


NFS网络文件系统配置文件:


20200310210332197.png


NFS服务器重启:


20200310210405167.png


获取设备树相关信息:


#if 0
//设备树节点
qf_test:qf_edu@4001A000{       
#address-cells = <1>;  
#size-cells = <1>;   
compatible = "qf-edu,io-test";   
device_type = "mydemo";  
word-array = <32 45 67 89>;  
bi-array = [BC 20 11 FE];  
str-list = "hello","world";  
reg = <0x10001000 100 0x20000000 100>;   
};
#endif
devnod = of_find_node_by_path("/qf_edu@4001A000");  
if(devnod == NULL){   
printk(KERN_ERR "of_find_node_by_path failed...\n");    
return -EAGAIN; 
} 
of_property_read_string(devnod,"compatible", &str); 
printk(KERN_INFO "---compatible = %s---\n",str);

2020031021064157.png

of_property_read_u32_array(devnod,"reg",reg_addr,4);
for(i = 0; i < 4 ;i++)    
printk(KERN_INFO "---reg_addr[%d] = 0x%x---\n",i,reg_addr[i]);

20200310210710461.png

of_property_read_u8_array(devnod,"bi-array",mac_addr, 4); 
for(i = 0; i < 4;i++)   
printk(KERN_INFO "---mac_addr[%d] = 0x%hhx---\n",i,mac_addr[i]);

20200310210739504.png

of_property_read_string_array(devnod,"str-list",str_arr, 2);  
for(i = 0; i < 2;i++)   
printk(KERN_INFO "---str_arr[%d] = %s---\n",i,str_arr[i]);

20200310210824779.png


二:platform平台总线驱动和设备树匹配


   platform_driver  --->>>  device_driver  
            --->>> const struct of_device_id *of_match_table;        
              --->>>char compatible[128];

20200310210955339.png


匹配成功,调用probe函数指针指向的函数获取设备资源。


2020031021102230.png

相关文章
|
3月前
|
Linux 编译器 开发者
Linux设备树解析:桥接硬件与操作系统的关键架构
在探索Linux的庞大和复杂世界时🌌,我们经常会遇到许多关键概念和工具🛠️,它们使得Linux成为了一个强大和灵活的操作系统💪。其中,"设备树"(Device Tree)是一个不可或缺的部分🌲,尤其是在嵌入式系统🖥️和多平台硬件支持方面🔌。让我们深入了解Linux设备树是什么,它的起源,以及为什么Linux需要它🌳。
Linux设备树解析:桥接硬件与操作系统的关键架构
|
3月前
|
Linux
关于Linux目录访问函数总结
关于Linux目录访问函数总结
27 1
|
3月前
|
Linux
【Linux 系统编程】wait函数详解
【Linux 系统编程】wait函数详解
95 0
|
7天前
|
Linux SoC
Linux设备树(DTS)
Dts:DTS即Device Tree Source,是一个文本形式的文件,用于描述硬件信息。一般都是固定信息,无法变更,无法overlay。 设备树由来 linux内核源码中,之前充斥着大量的平台相关(platform Device)配置,而这些代码大多是杂乱且重复的,这使得ARM体系结构的代码维护者和内核维护者在发布一个新的版本的时候有大量的工作要做,以至于LinusTorvalds 在2011年3月17日的ARM Linux邮件列表中宣称“Gaah.Guys,this whole ARM thing is a f*cking pain in the ass”这使得整个ARM社区不得不
17 1
Linux设备树(DTS)
|
14天前
|
存储 Unix Linux
揭秘Linux硬件组成:从内核魔法到设备树桥梁,打造你的超级系统,让你的Linux之旅畅通无阻,震撼体验来袭!
【8月更文挑战第5天】Linux作为顶级开源操作系统,凭借其强大的功能和灵活的架构,在众多领域大放异彩。本文首先概述了Linux的四大核心组件:内核、Shell、文件系统及应用程序,并深入探讨了内核的功能模块,如存储、CPU及进程管理等。接着介绍了设备树(Device Tree),它是连接硬件与内核的桥梁,通过DTS/DTB文件描述硬件信息,实现了跨平台兼容。此外,还简要介绍了Linux如何通过本地总线高效管理硬件资源,并阐述了文件系统与磁盘管理机制。通过这些内容,读者可以全面了解Linux的硬件组成及其核心技术。
29 3
|
14天前
|
安全 Unix Linux
Linux Clone函数
Linux Clone函数
22 3
|
30天前
|
Linux SoC
Linux设备树(DTS)介绍
**设备树(DTS)是Linux中用于描述硬件信息的文本文件,旨在减少内核与平台相关代码的耦合。DTS文件包含静态硬件配置,不支持动态变更。它被编译成DTB二进制文件,供内核在启动时解析以了解硬件布局。设备树解决了ARM体系结构代码维护的复杂性问题,通过解耦实现vendor修改的独立和共二进制目标。设备树overlay允许对配置进行增量修改,遵循特定规则,如dts覆盖dtsi,先引用后修改。调试时,可使用内置工具反编译dtb或dtbo映像为dts文本以检查内容。**
76 7
|
3月前
|
算法 Linux C语言
【Linux系统编程】深入理解Linux目录操作:文件夹位置指针操作函数(telldir,seekdir,rewinddir)
【Linux系统编程】深入理解Linux目录操作:文件夹位置指针操作函数(telldir,seekdir,rewinddir)
50 0
|
2月前
|
Linux C++
Linux C/C++ main函数
Linux C/C++ main函数
|
2月前
|
移动开发 程序员 Linux
老程序员分享:linux驱动开发笔记_ioctl函数
老程序员分享:linux驱动开发笔记_ioctl函数