device tree를 작성 할 때 참조를 사용한다
정확하게 참조를 하면 어떤것이 어떤것을 참조하여 컴파일하면서 어떻게 되는지 확인해보자
라즈베리파이 3b+ 에서 fdtdump를 사용해 device tree를 덤프 하고 dtb와 비교해보자
linux/arch/arm/boot/dts/bcm2710-rpi-3-b.dts
&mmcnr {
pinctrl-names = "default";
pinctrl-0 = <&sdio_pins>;
bus-width = <4>;
status = "okay";
};
여래 부분에서 참조하는 것으로 분석하면 헷갈리니 하나만 참조하는것으로 확인하자
참조되는 파일은 아래이다
bcm270x.dtsi
mmcnr: mmcnr@7e300000 {
compatible = "brcm,bcm2835-mmc", "brcm,bcm2835-sdhci";
reg = <0x7e300000 0x100>;
interrupts = <2 30>;
clocks = <&clocks BCM2835_CLOCK_EMMC>;
dmas = <&dma 11>;
dma-names = "rx-tx";
brcm,overclock-50 = <0>;
non-removable;
status = "disabled";
};
fdtdump로 확인하면 아래와 같다
mmcnr@7e300000 {
compatible = "brcm,bcm2835-mmc", "brcm,bcm2835-sdhci";
reg = <0x7e300000 0x00000100>;
interrupts = <0x00000002 0x0000001e>;
clocks = <0x00000007 0x0000001c>;
dmas = <0x0000000b 0x0000000b>;
dma-names = "rx-tx";
brcm,overclock-50 = <0x00000000>;
non-removable;
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <0x0000001d>;
bus-width = <0x00000004>;
phandle = <0x00000033>;
};
참조되는 node( mmcnr: mmcnr@7e300000 )에 참조하는 node(&mmcnr )의 data가 overwite되어 fdt가 만들어진다
동일한 property라면 참조하는 node가 overwite하기 때문에 &mmcnr의 값으로 fdt가 만들어진다
여기서 phandle이 하나 생기는데 이는 작성하지 않으면 저절로 생기면서 phandle의 값은 node 만의 고유한 값이다
노드를 참조할때는 이 값을 사용하여 참조한다.
그렇다면 " &mmcnr" 에서 sdio_pins를 참조한다
&mmcnr {
pinctrl-names = "default";
pinctrl-0 = <&sdio_pins>; <--------------- 여기
bus-width = <4>;
status = "okay";
};
sdio_pins node의 phandle 값은 어떨까?
sdio_pins {
brcm,pins = <0x00000022 0x00000023 0x00000024 0x00000025 0x00000026 0x00000027>;
brcm,function = <0x00000007>;
brcm,pull = <0x00000000 0x00000002 0x00000002 0x00000002 0x00000002 0x00000002>;
phandle = <0x0000001d>;
};
sdio_pins의 phandle은 "1d"이다
그렇다면
&mmcnrdml에서 참조하는 pinctrl-0의 값을 보면 "1d" 동일하다.
이런식으로 node를 참조한다.
'device tree' 카테고리의 다른 글
unflatten_device_tree -> __unflatten_device_tree 분석 (0) | 2023.05.17 |
---|---|
디버깅 방법 (0) | 2023.05.12 |
Linux and the Device tree 문서 정리 (0) | 2023.05.09 |
device tree 연대기 (0) | 2023.05.09 |
댓글