장치 트리 .dts 파일에서 꺾쇠 괄호 < > 안의 두 값은 무엇입니까?

장치 트리 .dts 파일에서 꺾쇠 괄호 < > 안의 두 값은 무엇입니까?

다음은코드 세그먼트장치 트리 파일에서:

flash@0 {
                compatible = "n25q128";
                reg = <0x0>;
                spi-max-frequency = <50000000>;
                #address-cells = <1>;
                #size-cells = <1>;
                partition@qspi-fsbl-uboot {
                    label = "qspi-fsbl-uboot";
                    reg = <0x0 0x100000>;
                };
                partition@qspi-linux {
                    label = "qspi-linux";
                    reg = <0x100000 0x500000>;
                };
                partition@qspi-device-tree {
                    label = "qspi-device-tree";
                    reg = <0x600000 0x20000>;
                };
                partition@qspi-rootfs {
                    label = "qspi-rootfs";
                    reg = <0x620000 0x5E0000>;
                };
                partition@qspi-bitstream {
                    label = "qspi-bitstream";
                    reg = <0xC00000 0x400000>;
                };
            };

내 간단한 질문은 < >의 두 값이 무엇입니까? 예를 들어 reg = <0x600000 0x20000>;

초기 주소와 최종 주소인 줄 알았는데 여기서는 최종 주소가 초기 주소보다 낮을 수 없기 때문에 큰 의미가 없습니다.

답변1

꺾쇠 괄호(<>)는 "32비트 부호 없는 정수 배열"을 의미하며, 저는 이를 종종 "셀"이라고 부릅니다. 이 속성의 경우 reg첫 번째 값은 (오프셋) 주소이고 두 번째 값은 레지스터의 길이입니다. 여러 범위를 갖는 것도 가능합니다.

reg = <addr1 addr1_length addr2 addr2_length  ... addrN addrN_length>

원천:

답변2

일반적으로 두 개의 숫자만 있을 필요는 없습니다.

또한 다음과 같이 설명했습니다.https://elinux.org/Device_Tree_Usage#How_Addressing_Works각각이 단지 두 개의 숫자일 필요는 없습니다.

예를 들어 64비트 장치에서는 다음과 같은 경우가 많습니다.

#address-cells = <2>;
#size-cells = <2>;

즉, 주소와 오프셋의 유형은 다음과 같습니다.

reg = <0x1 0x2 0x3 0x4>

이는 영역을 나타냅니다.

  • 기본 주소: 00000001 00000002 (2개의 32비트 숫자로 구성 #address-cells = <2>;)
  • 길이: 00000003 00000004 (2개의 32비트 숫자로 구성 #size-cells = <2>;)

이는 장치 트리의 각 숫자가 정의상 32비트 폭이므로 각 64비트 값에는 두 개의 숫자가 필요하기 때문입니다.

답변3

네, reg<0xxxx 0xxxx>대표님 reg<offset length>.

offset는 장치의 기본 주소이며 길이에 따라 해당 장치의 주소 범위가 결정됩니다.

관련 정보