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

相关文章
|
2月前
|
Linux Shell
Linux系统编程:掌握popen函数的使用
记得在使用完 `popen`打开的流后,总是使用 `pclose`来正确关闭它,并回收资源。这种做法符合良好的编程习惯,有助于保持程序的健壮性和稳定性。
85 6
|
2月前
|
Linux Shell
Linux系统编程:掌握popen函数的使用
记得在使用完 `popen`打开的流后,总是使用 `pclose`来正确关闭它,并回收资源。这种做法符合良好的编程习惯,有助于保持程序的健壮性和稳定性。
124 3
|
3月前
|
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社区不得不
Linux设备树(DTS)
|
2月前
|
Linux
在Linux内核中根据函数指针输出函数名称
在Linux内核中根据函数指针输出函数名称
|
3月前
|
Linux PHP
Linux CentOS 宝塔 Suhosin禁用php5.6版本eval函数详细图文教程
【8月更文挑战第27天】本文介绍两种禁用PHP执行的方法:使用`PHP_diseval_extension`禁用和通过`suhosin`禁用。由于`suhosin`不支持PHP8,仅适用于PHP7及以下版本,若服务器安装了PHP5.6,则需对应安装`suhosin-0.9.38`版本。文章提供了详细的安装步骤,并强调了宝塔环境下与普通环境下的PHP路径差异。安装完成后,在`php.ini`中添加`suhosin.so`扩展并设置`executor.disable_eval = on`以禁用执行功能。最后通过测试代码验证是否成功禁用,并重启`php-fpm`服务生效。
43 2
|
3月前
|
Shell Linux C语言
Linux0.11 execve函数(六)
Linux0.11 execve函数(六)
55 1
|
3月前
|
Linux API
Linux源码阅读笔记07-进程管理4大常用API函数
Linux源码阅读笔记07-进程管理4大常用API函数
|
3月前
|
存储 Unix Linux
揭秘Linux硬件组成:从内核魔法到设备树桥梁,打造你的超级系统,让你的Linux之旅畅通无阻,震撼体验来袭!
【8月更文挑战第5天】Linux作为顶级开源操作系统,凭借其强大的功能和灵活的架构,在众多领域大放异彩。本文首先概述了Linux的四大核心组件:内核、Shell、文件系统及应用程序,并深入探讨了内核的功能模块,如存储、CPU及进程管理等。接着介绍了设备树(Device Tree),它是连接硬件与内核的桥梁,通过DTS/DTB文件描述硬件信息,实现了跨平台兼容。此外,还简要介绍了Linux如何通过本地总线高效管理硬件资源,并阐述了文件系统与磁盘管理机制。通过这些内容,读者可以全面了解Linux的硬件组成及其核心技术。
54 3
|
3月前
|
安全 Unix Linux
Linux Clone函数
Linux Clone函数
56 3
|
3月前
|
Linux
Linux0.11 文件打开open函数(五)
Linux0.11 文件打开open函数(五)
44 0