【Linux 设备驱动系列 4 -- 设备树 64bit 寄存器 reg 属性描述 】

文章目录

    • #address-cells 和#size-cells 属性
      • 32bit 寄存器 reg 属性描述
      • 64bit 寄存器 reg 属性描述

#address-cells 和#size-cells 属性

address-cells:address要用多少个32位数来表示;
size-cells:size 要用多少个32位数来表示。

32bit 寄存器 reg 属性描述

在 Linux 设备树(Device Tree)语法中,"reg"和"reg-names"属性是用于描述设备资源的主要属性。
"reg"属性用于描述设备的物理地址和大小。它是一个32位或64位的整数数组,每个数组元素对应一个设备资源,如内存区域、寄存器等。数组的第一个元素通常是设备的基础地址,其后紧跟的是设备大小。

"reg-names"属性用于给"reg"属性中的每一个设备资源命名,这样在驱动程序中可以通过名字来引用特定的设备资源,而不是通过索引。"reg-names"属性的值是一个字符串数组,数组中的每个字符串对应"reg"属性中的一个设备资源。

"reg"和"reg-names"属性之间的对应关系是通过数组索引来建立的,也就是说,"reg"属性中的第 n 个设备资源对应"reg-names"属性中的第n个字符串。例如,如果一个设备有两个内存资源,其"reg"属性为<0x0 0x1000 0x2000 0x1000>,“reg-names"属性为"mem1”, “mem2”,那么"mem1"对应的基地址和大小为0x00x1000,"mem2"对应的基地址和大小为0x20000x1000

64bit 寄存器 reg 属性描述

如果我们需要再dts中描述一个64bit的寄存器,需要怎么办

        stm: stm@58010000 {
                compatible = "arm,coresight-stm", "arm,primecell";
                reg =   <0 0x58010000 0 0x10000>,
					    <0x0000003B 0xB0000000 0 0x1000000>;
                reg-names = "stm-base", "stm-stimulus-base";

如代码所示, stm-base 的地址为32bit的,为0x58010000, 大小为0x10000。stm-stimulus-base的地址为64bit, 开始地址为0x3BB0000000。所以对于64bit的地址,其高32bit用 reg中的“第一个 32bit”, 低32bit 用“第2个32bit”表示。

你可能感兴趣的:(#,ARM,Linux,设备驱动系列介绍,linux,dts,device,tree,size-cells,address-cells)