본문 바로가기
device tree

device tree 참조

by jsh91 2023. 11. 19.

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

댓글