-
[커널][디바이스트리] 디바이스 트리에서 8, 16, 64 비트값 선언하고 읽기.Linux/kernel 2023. 8. 3. 02:25
디바이스 트리에서 특정 노드에 정수형 프로퍼티를 선언할 경우, 아래와 같이 선언할 수 있다.
gpclk0_gpio4: gpclk0_gpio4 { brcm,pins = <4>; brcm,function = <BCM2835_FSEL_ALT0>; }; gpclk1_gpio5: gpclk1_gpio5 { brcm,pins = <5>; brcm,function = <BCM2835_FSEL_ALT0>; }; gpclk1_gpio42: gpclk1_gpio42 { brcm,pins = <42>; brcm,function = <BCM2835_FSEL_ALT0>; };
`brcm,pins` , `brcm,function`, `brcm,pull` 기본적으로 모두 unsigned int 로 선언된 프로퍼티들이다.
위에 값들을 불러올 때, 값이 작다고 of_read_property_u8(), of_read_property_u16() 함수를 호출해서 불러와도 될까?
에러는 발생하지 않는다. 단지 값이 0으로 읽힐 뿐이다.
of_read_property_u8(), of_read_property_u16() 함수를 사용하고 싶다면, 디바이스 트리의 프로퍼티들 앞에 특정 구문을 추가해야 한다.
gpclk0_gpio4: gpclk0_gpio4 { brcm,pins = /bits/ 8 <4>; brcm,function = <BCM2835_FSEL_ALT0>; }; gpclk1_gpio5: gpclk1_gpio5 { brcm,pins = /bits/ 16 <5>; brcm,function = <BCM2835_FSEL_ALT0>; }; gpclk1_gpio42: gpclk1_gpio42 { brcm,pins = /bits/ 8 <42>; brcm,function = <BCM2835_FSEL_ALT0>; };
- brcm,pins = /bits/ 8 <4> : gpclk0_gpio4 노드의 brcm,pins 프로퍼티는 unsigned char으로 선언된다. of_property_read_u8()로 read됨.
- brcm,pins = /bits/ 16 <4> : gpclk1_gpio5 노드의 brcm,pins 프로퍼티는 unsigned char으로 선언된다. of_property_read_u16()로 read됨.
- brcm,pins = /bits/ 64 <0x00000001 0x00000000> : gpclk1_gpio42 노드의 brcm,pins 프로퍼티는 unsigned char으로 선언된다. of_property_read_u64()로 read됨.
64-bit 형은 2개의 unsigned 32-bit integer형으로 표현이 가능하다.
- Reference
1. https://github.com/vagrantc/device-tree-compiler/blob/master/Documentation/dts-format.txt
'Linux > kernel' 카테고리의 다른 글
[리눅스 커널] Interrupt - high level reference (0) 2023.08.03 [리눅스 커널] platform driver probe를 호출하는 4가지 방법. (0) 2023.08.03 [커널][디바이스트리] Label을 사용하는 이유와 참조시 주의점 (0) 2023.08.03 [리눅스 커널] 커널 컨텍스트 (0) 2023.08.03 [리눅스 커널] Loadable Kernel Module(LKM) (0) 2023.08.03