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

相关文章
|
18天前
|
Ubuntu Linux 开发者
Ubuntu20.04搭建嵌入式linux网络加载内核、设备树和根文件系统
使用上述U-Boot命令配置并启动嵌入式设备。如果配置正确,设备将通过TFTP加载内核和设备树,并通过NFS挂载根文件系统。
67 15
|
22天前
|
Linux
【Linux】System V信号量详解以及semget()、semctl()和semop()函数讲解
System V信号量的概念及其在Linux中的使用,包括 `semget()`、`semctl()`和 `semop()`函数的具体使用方法。通过实际代码示例,演示了如何创建、初始化和使用信号量进行进程间同步。掌握这些知识,可以有效解决多进程编程中的同步问题,提高程序的可靠性和稳定性。
67 19
|
24天前
|
Linux Android开发 开发者
linux m、mm、mmm函数和make的区别
通过理解和合理使用这些命令,可以更高效地进行项目构建和管理,特别是在复杂的 Android 开发环境中。
60 18
|
1月前
|
存储 监控 Linux
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
105 13
|
4月前
|
Linux Shell
Linux系统编程:掌握popen函数的使用
记得在使用完 `popen`打开的流后,总是使用 `pclose`来正确关闭它,并回收资源。这种做法符合良好的编程习惯,有助于保持程序的健壮性和稳定性。
200 6
|
4月前
|
Linux Shell
Linux系统编程:掌握popen函数的使用
记得在使用完 `popen`打开的流后,总是使用 `pclose`来正确关闭它,并回收资源。这种做法符合良好的编程习惯,有助于保持程序的健壮性和稳定性。
210 3
|
5月前
|
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)
|
4月前
|
Linux
在Linux内核中根据函数指针输出函数名称
在Linux内核中根据函数指针输出函数名称
|
5月前
|
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`服务生效。
82 2
|
5月前
|
Shell Linux C语言
Linux0.11 execve函数(六)
Linux0.11 execve函数(六)
110 1