基于 ARM 架构的 SOC 有很多种,一种 SOC 又可以制作出很多款板子,每个板子都有一个对应的 DTS 文件,那么如何确定编译哪一个 DTS 文件呢?...2、设备节点 设备树是采用树形结构来描述板子上的设备信息的文件,每个设备都是一个节点,叫做设 备节点,每个节点都通过一些属性信息来描述节点信息,属性就是键—值对。...另一种格式: label: node-name@unit-address 引入 label 的目的就是为了方便访问节点,可以直接通过&label 来访问这个节点,比如通过&cpu0 就可以访问“cpu...单词 aliases 的意思是“别名”,因此 aliases 节点的主要功能就是定义别名,定义别名的目的就是为了方便访问节点。...关于设备树就讲解到这里,关于设备树我们重点要了解一下几点内容: ①、DTS、DTB 和 DTC 之间的区别,如何将.dts 文件编译为.dtb 文件。
通过定义phandle属性值,任何节点都可以被其他节点引用。...属性常备用在拥有孩子节点的父节点上,用来描述孩子节点时如何编址的。...Device tree中采用别名节点来定义设备节点全路径的别名,别名节点必须是根节点的孩子,而且还必须采用aliases的节点名称。.../aliases节点中每个属性定义了一个别名,属性的名字指定了别名,属性值指定了device tree中设备节点的完整路径。...| dts API: 说明 dts标准接口支持通过节点和属性名,获取属性值(用户需要知道属性值得类型) 原型 int of_property_read_u32(const struct device_node
设备节点的例子如下图: 在上图中:cpu 和 ethernet依靠不同的unit-address 分辨不同的CPU;可见,node-name相同的情况下,可以通过不同的unit-address定义不同的设备节点...}; 注:DTS中的大多数设备树将不包含显式的phandle属性,当DTS被编译成二进制DTB格式时,DTC工具会自动插入phandle属性。...#address-cells 和 #size-cells 表明了子节点应该如何编写 reg 属性值,一般 reg 属性都是和地址有关的内容,和地址相关的信息有两种:起始地址和地址长度,reg 属性的格式一为...节点的主要功能就是定义别名,定义别名的目的就是为了方便访问节点。...例如:定义 flexcan1 和 flexcan2 的别名是 can0 和 can1。
(2)路径名称 通过指定从根节点到所有子节点到所需节点的完整路径,可以唯一地标识设备树中的节点。...#size-cells 属性值是一个 u32,可以用在任何拥有子节点的设备中,并描述子设备节点应该如何寻址。...aliases aliases 节点用来定义别名,为了内核方便访问节点。...此处关于 uboot 如何通过设备树传参给 kernel,可以单独写篇文章,待补充... 5....(1)aliases 节点 aliases 节点用来定义一个或多个别名属性,按照约定,该节点应该在根节点上。
每个节点里最重要的当然是节点的属性和值了,因为这里包含了要传递到内核的“板级硬件描述信息”,驱动中会通过一些API函数获取这些信息。 属性和值的写法有一定的规范。...compatible属性是用来查找节点的方法之一,另外还可以通过节点名或节点路径查找指定节点。...在设备树中更多的是为节点添加标签,没有使用节点别名,别名的作用是“快速找到设备树节点”。在驱动中如果要查找一个节点,通常情况下我们可以使用“节点路径”一步步找到节点。...如何获取设备树节点信息?...总结一下,主要是讲了为什么要有设备树,设备树文件的结构是怎样的,如何从设备树文件中获取节点信息,包括查找节点,获取节点属性,以及内存映射等,最后讲了编译设备树。
为什么要使用设备树来替代传统的总线设备驱动模型 3. DTS、DTB 和 DTC 4. DTS 语法 4.1 .dtsi 头文件 4.2 设备节点 4.3 标准属性 5....4.2 设备节点 设备树是采用树形结构来描述板子上的设备信息的文件,每个设备都是一个节点,叫做设 备节点,每个节点都通过一些属性信息来描述节点信息,属性就是键—值对。...#address-cells 和#size-cells 表明了子节点应该如何编写 reg 属性值,一般 reg 属性都是和地址有关的内容,和地址相关的信息有两种:起始地址和地址长度,reg 属性的格式一为...aliases属性 aliases的意思是“别名”,因此 aliases 节点的主要功能就是定义别名,定义别名的目的就是为了方便访问节点。...在节点命名的时候会加上 label,然后通过&label来访问节点,这样比较方便,而且设备树里面大量的使用&label 的形式来访问节点。
4.3.3.3 运行时注意事项 为了在启动内核前更新参数到内核 dts 和可以在 U-Boot 控制台查看修改 dts。...按阶段划分可以分为使用内部 dts 阶段和使用内核 dts 阶段,如下图所示。 图 4-3: dts 变化图 可以通过命令set_working_fdt来切换当前生效的 fdt。...别名是 device tree 中完整路径的一个简写,有一个专门的节点 ( /aliases) 来表示别名的相关信息,用如下命令可以查看系统中别名的配置情况: sunxi#fdt list /aliases...• 参数: • fdt: 工作 flattened device tree • nodeoffset: 待修改节点的偏移 • name: 待检索的属性名 • lenp: 检索属性值的长度...cmdline 向 kernel 提供信息,主要是通过更新bootargs变量实现env_set(“bootargs”, cmdline)。
,我们必须书写完整的节点路径,这样当一个节点嵌套比较深的时候就不是很方便,所以,设备树允许我们用下面的形式为节点标注引用(起别名),借以省去冗长的路径。...下面的例子中就是直接引用了dtsi中的一个节点,并向其中添加/修改新的属性信息 KEY 在设备树中,键值对是描述属性的方式,比如,Linux驱动中可以通过设备节点中的"compatible"这个属性查找设备节点...compatible属性是用来查找节点的方法之一,另外还可以通过节点名或节点路径查找指定节点。...,即 `属性 = 节点别名 GPIO标号 工作模式> GPIO的设置同样采用了上述偏移量的思想,比如下面的这个led的设备书,表示使用GPX2组的第7个引脚: 驱动自定义key 针对具体的设备...,有部分属性很难做到通用,需要驱动自己定义好,通过内核的属性提取解析函数进行值的获取,比如dm9000节点中的下面这句就是自定义的节点属性,用以表示配置EEPROM不可用。
compatible = "rockchip,fpga", "rockchip,rk3399"; 上面是根节点的兼容属性,定义了整个系统(设备级别)的名称,通过这个属性就可以判断出它启动的是什么设备。...,我们必须书写完整的节点路径,这样当一个节点嵌套比较深的时候就不是很方便,所以,设备树允许我们用下面的形式为节点标注引用(起别名),借以省去冗长的路径。...这样就可以实现类似函数调用的效果 3.KEY 在设备树中,键值对是描述属性的方式,比如,Linux驱动中可以通过设备节点中的”compatible”这个属性查找设备节点 inux设备树语法中定义了一些具有规范意义的属性...主要有三种方法提取信息 1、compatible属性是用来查找节点 2、通过节点名查找指定节点 3、节点路径查找指定节点 看一个使用compatible提取属性的例子 #dts...gpio控制器 #gpio-cells,用来描述gpio使用节点的属性一个cell的内容,即 `属性 = 节点别名 GPIO标号 工作模式> firefly-gpio = <&gpio0
= “red fish”,“blue fish”; 5 dts的组成 5.1 标准属性 5.1.1 compatible 每一个dts文件都是由一个root的根节点组成,内核通过根节点“/”的兼容性即可判断它启动的是什么设备...你仍然需要注意reg值班需要与节点名的值相匹配。按照惯例,如果一个节点有一个reg属性,那么这个节点名称必须包括unit-address,这是reg属性的第一个address值。...,但此时这些地址只是本地设备节点,还没有说明如何从那些地址里映射到cpu可以使用的地址。...根节点的非直接子节点是无法使用CPU的address domain的。为了在deivce tree获取内存映射地址必须指定如何从一个域名将地址转换到另一个。Ranges属性就用于此目的。...aliases节点为了解决节点路径名过长的问题,引入了节点别名的概念,可以引用到一个全路径的节点。
更新目标之前,您可以通过在 .dts 中使用 /include/ 模拟 DTO 行为,从而在主机上验证叠加层 DT 的结果。...要在 SoC DT 中添加节点或更改属性,引导加载程序必须在 SoC DT 之上动态叠加设备专用的 DT。...叠加层可以应用于主设备树中的节点,也可以添加新节点,但不能引用之前叠加层中添加的节点。...将 overlay_1 和 overlay_2 依次应用于基础 DT 之后,节点 e 中属性 prop 的值(由 overlay_1.dts 设置)将被 overlay_2.dts 设置的值覆盖。...DTBO 分区的有效性(也验证 DTBO 分区中应用于基础 DT 的叠加层的有效性)。 生成的 DT 中的其他节点或属性更改是否已呈现给 Linux 内核。
仅编译设备树二、DTS语法1、.dtsi 头文件在 .dts 设备树文件中,可以通过“#include ”来引用 .h 、 .dtsi 和 .dts 文件。....2、 设备节点设备树是采用树形结构来描述板子上的设备信息的文件,每个设备都是一个节点,叫做设备节点,每个节点都通过一些属性信息来描述节点信息,属性就是 键值对。...compatible 这两个文件的内容:(3)查看soc节点soc 节点的所有子节点:(4) 特殊节点aliases 子节点:主要功能就是定义别名,定义别名的目的就是为了方便访问节点。...解析流程如下:五、绑定信息文档Linux 内核源码中有详细的 .txt 文档描述了如何添加节点,这些 .txt 文档叫做绑定文档。...)path :全路径的节点名,可以使用节点的别名,比如“ /backlight ”就是 backlight 这个节点的全路径。
这些文档说明了如何使用叠加 DT 中的节点 fragment@x 和语法 overlay 更新主 DT。...使用标签label 为了允许对编译时不存在的节点进行未定义的引用,叠加 DT .dts 文件的头文件中必须带有 /plugin/ 标签。...例如: /dts-v1/; /plugin/; 在这里,您可以使用引用定位要叠加的节点,该引用是以“和”符号 (&) 作为前缀的绝对节点路径。...附加 如果引用目标属性不存在于主 DT 中,则在 DTO 之后被附加。...子节点 子节点语法示例: main.dts: [my_main_dt.dts] /dts-v1/; / { compatible = "corp,foo"; my_nodes: nodes
这样就可以实现类似函数调用的效果。编译设备树的时候,相同的节点的不同属性信息都会被合并,相同节点的相同的属性会被重写,使用引用可以避免移植者四处找节点,直接在板级.dts增改即可。...下面的例子中就是直接引用了dtsi中的一个节点,并向其中添加/修改新的属性信息: 三、KEY 在设备树中,键值对是描述属性的方式,比如,Linux驱动中可以通过设备节点中的"compatible"这个属性查找设备节点...compatible属性是用来查找节点的方法之一,另外还可以通过节点名或节点路径查找指定节点。..."#gpio-cells",用来描述gpio使用节点的属性一个cell的内容,即 `属性 = 节点别名 GPIO标号 工作模式>。...驱动自定义key 针对具体的设备,有部分属性很难做到通用,需要驱动自己定义好,通过内核的属性提取解析函数进行值的获取,比如dm9000节点中的下面这句就是自定义的节点属性,用以表示配置EEPROM不可用
insert into employee values (3,'3','lin','男',33,'123456789106666666','2012-09-09'); 注意事项 插入数据时,指定字段的顺序需与值的顺序一一对应...[WHERE 条件]; 注意事项 修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据。...为1 的数据, 将name修改为 小玲, gender 修改为 女 update employee set name = '小玲',gender = '女' where id = 1; -- 修改所有的员工的入职日期为...,可无,如果没有条件,则会删除整张表的所有数据。...DELETE 语句不能删除某一字段的值(可以使用UPDATE)。
通过定义phandle属性值,任何节点都可以被其他节点引用。...属性常备用在拥有孩子节点的父节点上,用来描述孩子节点时如何编址的。...Device tree中采用别名节点来定义设备节点全路径的别名,别名节点必须是根节点的孩子,而且还必须采用aliases的节点名称。.../aliases节点中每个属性定义了一个别名,属性的名字指定了别名,属性值指定了device tree中设备节点的完整路径。...dts API: 说明 dts标准接口支持通过节点和属性名,获取属性值(用户需要知道属性值得类型) 原型 int of_property_read_u32(const struct device_node
设备树 (DT, Device Tree) 是用于描述 non-discoverable(google这样写的,意思应该就是硬件信息看不到) 硬件的命名节点和属性构成的一种数据结构。...使用 DTO 的引导加载程序可以维护系统芯片 (SoC) DT,并动态叠加针对特定设备的 DT,从而向树中添加节点并对现有树中的属性进行更改。...1、Android9的更新 在android9中,bootloader在将统一的dtb传递给kernel之前,不能修改dtbo中定义的属性。...将设备树分离为 SoC 通用部件和设备专用部件后,您必须确保这两个部件以后相互兼容,包括: 主 DT 中的 DT 定义(例如,节点、属性、标签)。...主 DT 中的任何定义更改都可能会触发叠加 DT 中的更改。例如,如需更正主 DT 中的某个节点名称,请定义映射到原始节点名称的“别名”标签(以免更改叠加 DT)。
在jz2440.dts里指定引脚 可以看到,’’‘无论何种方法,驱动写法的核心不变,差别在于如何指定硬件资源’’’。 对比下三种方法的优缺点。...只是平台设备的构建区别,以前构造平台设备是在.c文件中,使用设备树构造设备节点原本不存在,需要在dts文件中构造节点,节点中含有资源 dts被编译成dtb文件传给内核,内核会处理解析dtb...device dev;中对于dts生成的platform_device这里含有of_node of_node中含有属性,这取决于设备树,比如compatible属性 让后注册/配置/file_operation...指定引脚也可以通过pin指定引脚,我们在设备树中如何指定引脚完全取决于驱动程序 既可以获取pin属性值也可以获取reg属性值 /* 根据platform_device的资源进行ioremap */...发现多了wifi的信息,通过对比设备树文件,我们可以看出怎么写wifi设备节点,就知道如何添加设备节点.
/devicetree/bindings/fb就描述了lcd、lvds这类属性设置方法 节点之间的联系 节点与节点之间的关联,通常通过“标号引用”和“包含”来实现 所谓标号引用,就是在节点名称前加上标号...,这样设备树的其他位置就能够通过&符号来调用/访问该节点,比如上面代码ir_recv节点中的gpio属性,就引用了gpio1标号处的节点 包含则是最基本的方式,比如我们要在i2c1接口添加一个i2c外设...nxp字段,但是驱动却仍然可以匹配上,因为别名匹配对compatible中字符串里第二个字段敏感 4.常见属性的设置与获取 当修改或编写驱动时,常常需要修改gpio、时钟、中断等等参数,以前都是在mach-xxx...的gpio节点中会设置为#gpio-cells = ;,那么可以不写最后一个参数 驱动一般通过以下接口获取上面节点中gpio的属性。...); 在dts和驱动都不关心gpio名字的情况下,也可直接通过以下接口来获取gpio号,这个时候编号index就十分重要了,可以指定拿取节点的第index个gpio属性 gpio = of_get_gpio
显然我们事先不知道要查哪个表,泛型dao的基本要求就是对所有的表都适用,这就需要我们动态的获取表名,基本思想可以是方法中传入一个类(前提是数据库中的表和实体类都是一一对应的)的实例,通过反射获取这个实体类中的属性名和属性类型...反射是java中一个很重要的特性,在不知道类中信息的时候,利用反射我们可以获取到类中所有的信息,例如属性名,属性类型,方法名,还可以执行类中的方法,很强大的,在框架中大多数也是采用反射获取类中的信息。...实例: 下面简单的介绍使用的方法,方法很简单,都是已经封装好的方法,直接调用即可 一个实体类:(贴张截图)都是私有的属性 图片 获得属性信息的方法: public static void getField...,包括权限修饰符,属性类型,属性名,这里的String是java.lang.String,属性名和属性类型后面可以利用字符串截取获得实际想要的数据。...(); 输出的是: int class java.lang.String class java.lang.String int 独立获取属性名: String name = field.getName(
领取专属 10元无门槛券
手把手带您无忧上云