다음은코드 세그먼트장치 트리 파일에서:
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
는 장치의 기본 주소이며 길이에 따라 해당 장치의 주소 범위가 결정됩니다.