zoukankan      html  css  js  c++  java
  • linux of函数实例

    / {
        wanghb {
            gpio = <129>;
            gpios = <129 130 131>;
            args = "wanghbargs";
                compatible = "wanghbcompatible";
            child1@0x1000012{
                args = "child1"; 
                gpios = <120>;
            };
            child2@0x1000012{
                args = "child2"; 
                gpios = <121>;
            };
        };
        
        
        zmm@0x120000{
            args = "zmm";
            gpios = <120>;
        };
    };

    主要来练习 of_find_node_by_path, of_find_node_by_name,of_property_read_u32_array ,of_property_read_string ,of_property_count_elems_of_size , of_get_next_child ,of_get_parent 函数

    #include <linux/of.h>
    #include <linux/device.h>
    #include <linux/platform_device.h>
    #include <linux/err.h>
    #include <linux/errno.h>
    #include <linux/list.h>
    #include <linux/init.h>
    #include <linux/module.h>
    #include <linux/kernel.h>
    
    
    struct device_node * utils_find_node_by_path(char * node_path)
    {
        struct device_node * node = NULL;
        node  = of_find_node_by_path(node_path);
        if(node != NULL)
        {
            printk(KERN_INFO "[success find device_node ,%s]
    ",node_path);
        }
        else
        {
            printk(KERN_INFO "[could not find device_node ,%s]
    ",node_path);
        }
        return node;
    }
    struct device_node * utils_find_node_by_name(char * node_name)
    {
        struct device_node * node = NULL;
        node  = of_find_node_by_name(NULL,node_name);
        if(node != NULL)
        {
            printk(KERN_INFO "[success find device_node ,%s]
    ",node_name);
        }
        else
        {
            printk(KERN_INFO "[could not find device_node ,%s]
    ",node_name);
        }
        return node;
    }
    static int __init test_module_init(void)
    {
        
        struct device_node *  wanghb = NULL;
        struct device_node *  zmm = NULL;
        struct device_node *  parent = NULL;
        struct device_node *  child = NULL;
        struct property *     wanghb_args = NULL;
        u32 value_array[10] = {0};
        u32 size = 0;
        const char * string ;
        const char * string1 ;
        const char * string2 ;
        god_bless();
        wanghb  = utils_find_node_by_path("/wanghb");
        wanghb  = utils_find_node_by_name("wanghb");
        zmm     = utils_find_node_by_path("/zmm@0x120000");
        zmm     = utils_find_node_by_name("zmm@0x120000");
        zmm     = utils_find_node_by_name("zmm");
        printk(KERN_INFO "====================================================================================");
        wanghb_args = of_find_property(wanghb,"args",NULL);
        printk(KERN_INFO "[wanghb_args value : %s, name :%s]
    ",(char*)wanghb_args->value,(char*)wanghb_args->name);
        wanghb_args = of_find_property(wanghb,"compatible",NULL);
        printk(KERN_INFO "[compatible value : %s, name :%s]
    ",(char*)wanghb_args->value,(char*)wanghb_args->name);
        
        of_property_read_string(wanghb,"args",&string);
        printk(KERN_INFO "[args : %s, ]
    ",string);
        
        of_property_read_string(wanghb,"compatible",&string);
        printk(KERN_INFO "[compatible : %s, ]
    ",string);
        
        of_property_read_u32_array(wanghb,"gpio",value_array,1);
        printk(KERN_INFO "[gpio : %d]
    ",value_array[0]);
        
        of_property_read_u32_array(wanghb,"gpios",value_array,3);
        printk(KERN_INFO "[gpio [0]: %d ,gpio [1]: %d ,gpio [2]: %d ]
    ",value_array[0],value_array[1],value_array[2]);
        
        size = of_property_count_elems_of_size(wanghb, "gpios", sizeof(u32));
        printk(KERN_INFO "[size : %d]
    ",size);
        
        child = of_get_next_child(wanghb,NULL);
        if(child)
        {
            of_property_read_string(child,"args",&string1);
            printk(KERN_INFO "[args : %s]
    ",string1);
            
            child = of_get_next_child(child,child);
            of_property_read_string(child,"args",&string2);
            printk(KERN_INFO "[args : %s]
    ",string2);
        }
        else
        {
            printk(KERN_ERR "[could not find childnode ]
    ");
        }
        
        parent = of_get_parent(child);
        of_property_read_string(parent,"args",&string);
        printk(KERN_INFO "[parentargs : %s]
    ",string);
        
        printk(KERN_INFO "====================================================================================");
        return 0;
    }
    
    static void test_module_exit(void)
    {
    }
    module_init(test_module_init);
    module_exit(test_module_exit);
    
    MODULE_AUTHOR("wanghb");
    MODULE_LICENSE("GPL");

    结果如下:

  • 相关阅读:
    使用JQuery从客户端调用C#方法
    上传文件插件 Uploadify使用说明 转
    juqery 操作select
    XP下安装IIS6.0的办法 转
    更改2003远程桌面端口3389为其他端口号
    Web打印
    远程桌面 客户端无法建立跟远程计算机的连接 解决办法
    WPF的“.NET研究”消息机制(一) 让应用程序动起来 狼人:
    应用Visual Studio 2010辅“.NET研究”助敏捷测试(上) 狼人:
    ASP.NET调用.sql文件(二“.NET研究”) 狼人:
  • 原文地址:https://www.cnblogs.com/coversky/p/14987846.html
Copyright © 2011-2022 走看看