惠州做棋牌网站建设有哪些公司,网站的营销推广方案,付银行的网站建设费的会计科目,免费国外代理网页关于设备树的理解#xff1a; 设备树#xff08;Device Tree#xff09;是一种用于特定硬件设备的解释语法树。它用来表示存储有关主板硬件和CPU架构信息的数据在内核中的传递格式#xff0c;使内核可以更好地了解硬件并支持它们#xff0c;而不必编写固定的代码。设备节点…关于设备树的理解 设备树Device Tree是一种用于特定硬件设备的解释语法树。它用来表示存储有关主板硬件和CPU架构信息的数据在内核中的传递格式使内核可以更好地了解硬件并支持它们而不必编写固定的代码。设备节点是一颗带着叶子和枝的树它的枝分支表示硬件结构之间的关系类型。它使硬件设备作为一个有意义的结构以及由几个硬件设备组成的总体设备的依赖关系。 描述一个设备信息的节点我们叫做设备节点一个设备节点内部包含当前硬件的多个不同属性相同节点不同属性是以链式结构存储。 设备树文件格式 设备树Device Tree提供给Linux系统一种标准的用于描述硬件和软件间通信的表示方式。设备树是一种描述性的格式它包括单个阴影的集合按照一定的结构和内容构成。 设备树包括3个部分 设备树头Device Tree Header它定义了该文件的格式版本及操作系统/芯片平台等信息。设备节点device Nodes它描述了系统中的设备如 CPU、GPIO、I2C等等。引导参数 boot args它用于描述设备树加载时进行系统初始化所需要的参数以及将来设备树中所定义的设备加载在内存中时所需要的参数。每个设备树的结构中都会有一个root节点它的名字一般是/。节点具有属性即name/value串name/value串存储于device-levels中路径由从root node开始在*.dts*文件中由空格分隔的文本字符串标识。 另外设备树的属性还可以由#cellsphandleregcompatible等标签标识它们代表了设备的总体概括信息以及设备如何组合结构和行为方式。 设备树基本语法 设备树是节点和属性的简单树结构。属性是键值对节点可以同时包含属性和子节点。 例 /dts-v1/;//当前使用的设备树的版本号 / {//设备树的根节点 node1 {//子节点node1 a-string-property A string;//属性-》键值对 a-string-list-property first string, second string; // hex is implied in byte arrays. no 0x prefix is required a-byte-data-property [01 23 34 56]; child-node1 {//node1节点的子节点 first-child-property;//空属性只起到标识作用 second-child-property 1; a-string-property Hello, world; }; child-node2 { }; }; node2 {//子节点node2 an-empty-property; a-cell-property 1 2 3 4; /* each number (cell) is a uint32 */ child-node1 { }; }; }; 在驱动中获取设备树信息 设备树节点信息结构体 在内核里面存在一个结构体 struct device_node用于存放设备节点信息 struct device_node { const char *name; //设备节点名字 mynode const char *full_name;//设备节点完整名字 mynode0x12345678 struct property *properties;//键值对结构体属性结构体 struct device_node *parent;//父节点地址 struct device_node *child;//子节点地址 struct device_node *sibling;//兄弟节点地址 } 节点属性结构体 struct property { char *name;//键的名字 int length;//值的长度字节 void *value;//值 struct property *next;//指向下一个节点的指针 }; 自动获取设备树节点API struct device_node *of_find_node_by_path(const char *path) 功能通过节点路径获取设备节点 参数 path:节点路径/mynode0x12345678 返回值成功返回指向设备节点信息结构体空间的指针失败返回NULL struct device_node *of_find_node_by_name(struct device_node *from, const char *name) 功能通过节点名字获取设备节点 参数 from:父节点指针填NULL默认从根节点帮我们解析寻找 name:设备节点名mynode 返回值成功返回指向设备节点信息结构体空间的指针失败返回NULL struct device_node *of_find_compatible_node( struct device_node *from, const char *type, const char *compat) 功能通过compatible来解析节点 参数 from:NULL,默认从根节点开始解析 type:NULL compat:compatible的值 返回值成功返回指向设备节点信息结构体空间的指针失败返回NULL __u32 __be32_to_cpup(const __be32 *p) 功能将大端字节序转化为小端字节序 参数数据指针 返回值成功返回转化后的数据失败返回-1 属性解析API struct property *of_find_property(const struct device_node *np, const char *name, int *lenp) 功能根据解析的节点结构体得到属性结构体信息 参数 np:设备节点首地址 name:键名 lenp:获取到的值的字节数 返回值成功返回属性结构体地址失败返回空