• 设备树属性获取,通过键获取值的相关函数实验


    1.int of_property_read_u32_index(const struct device_node *np,
    const char *propname, u32 index, u32 *out_value)
    功能:获取32位无符号整型的值
    参数:
    np:节点结构体指针
    propname:键名
    index:索引号
    out_value:获取到的值
    返回值:成功返回0,失败返回错误码

    2.int of_property_read_variable_u32_array(const struct device_node *np,
    const char *propname,
    u32 *out_values,
    size_t sz_min,
    size_t sz_max)
    功能:获取一个u32位数组
    参数:
    np:节点结构体指针
    proname:键名
    out_values:存放数据的数组名
    sz_min:期待读取到的元素的最小个数
    sz_max:期待读取到元素的最大个数
    返回值:成功返回读取到的个数,失败返回错误码

    3.int of_property_read_string(const struct device_node *np,
    const char *propname,
    const char **out_string)
    功能:读取字符串类型的值
    参数:np:节点结构体指针
    proname:键名
    out_string:指获取到的字符串的首地址
    返回值:返回值:成功返回0,失败返回错误码

    代码示例:

    #include 
    #include 
    #include 
    
    struct device_node *node;
    struct property *pr;
    int len,i,ret;
    const char *p;
    unsigned int val;
    unsigned int array[2];
    
    
    //入口函数
    static int __init mycdev_init(void)
    {
        //通过路径获取设备树节点信息
        node = of_find_node_by_path("/mynode@0x12345678");
        if(node == NULL)
        {
            printk("解析设备树节点失败\n");
            return -EFAULT;
        }
        printk("成功解析设备树节点\n");
    
        //读取字符串类型的值
        ret = of_property_read_string(node,"astring",&p);
        if(ret)
        {
            printk("获取字符串失败\n");
            return -EFAULT;
        }
        printk("value:=%s\n",p);
    
        //获取u32的值
        ret = of_property_read_u32_index(node,"uint",1,&val);
        if(ret)
        {
            printk("获取u32值失败\n");
            return -EFAULT;
        }
        printk("value=%#x\n",val);
    
        //获取u32数组
        ret = of_property_read_variable_u32_array(node,"uint",array,2,2);
        if(ret < 0)
        {
            printk("获取u32数组失败\n");
            return -EFAULT;
        }
        printk("value:%#x,%#x\n",array[0],array[1]);  
    
        return 0;
    }
    
    //出口函数
    static void __exit mycdev_exit(void)
    {
    
    
    }
    
    module_init(mycdev_init);
    module_exit(mycdev_exit);
    // GPL协议
    MODULE_LICENSE("GPL");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65

    结果:
    在这里插入图片描述

  • 相关阅读:
    咖啡店怎么做才能赚钱?一个公式,简单粗暴简单做到
    在 Windows 操作系统中,可以通过命令行工具来杀死进程
    Vatee万腾的数字化掌舵:Vatee科技引领未来的新高度
    查题系统API无限搜题接口搭建
    搭建docker镜像仓库
    Kafka3.x安装以及使用
    EChart常见配置项解析
    【深入理解Kotlin协程】lifecycleScope源码追踪扒皮
    概率论与数理统计
    Kotlin语法学习(二)
  • 原文地址:https://blog.csdn.net/qq_72815752/article/details/128007755