一:设备树相关解析函数
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网络文件系统配置文件:
NFS服务器重启:
获取设备树相关信息:
#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);
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]);
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]);
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]);
二:platform平台总线驱动和设备树匹配
platform_driver --->>> device_driver --->>> const struct of_device_id *of_match_table; --->>>char compatible[128];
匹配成功,调用probe函数指针指向的函数获取设备资源。