Embedded Software 개발 : `schematic to source code` - 1/2 편에 이어서...
마지막으로 확인한 내용은 gpio 관련 dts/dtsi 의 define 내용이었다.
dts/dtsi 는 AP/Board 의 내용을 define 해둔 script 이고, 이것을 실제로 device driver 로 가져오는 부분을 찾아가 보자.
- compatible : 전통적(?)으로 dts/dtsi <-> device driver 의 관계, 정확하게 driver 에서 dts/dtsi 를 참조하는 부분은 저comaptible name 을 기준으로 참조한다. 참조라는 말은 특정 pin 이나 IP 를 이용한 driver 가 되기 위해 특정 resource 를 driver 에서 연결하는 로직 이라 이해하면 쉽다.
- status : 해당 심볼을 load 할 때의 기본 status 를 의미하고, 해당 field 가 "okay" 로 enable 되어 있어야 바로 사용 가능하다.
우선 compatible인 bone-pinmux-helper 로 검색(note book 내 source tree 가 깨져서 웹서치로 대체하였다 ㅜㅜ),
https://github.com/bgat/linux-multi-v7/blob/master/drivers/misc/cape/beaglebone/bone-pinmux-helper.c
해당 platform driver 가 어떠한 dts/dtsi 를 참조하는 지 찾아보면 아래와 같다.
of_device_id 는 open firmware device id 즉, dts/dtsi 내에서 search 하는 것이고,
앞서 살펴본 대로 compatible name 인 bone-pinmux-helper 를 참조하도록 설정하고 있는데 해당 pin 을 이용하여 동작할 driver 라는 것을 유추할 수 있다.
그럼 실제 등록 내용을 살펴본다.
sysfs 를 지정하는 부분이다. 앞선 포스팅에서 우려한대로 gpio 라고 하는게 크게 복잡한 interface 나 control scheme 이 필요한게 아니므로 user land 에서 file read/write 로 직접 control 할 수 있는 file 을 생성해주고 있다.
이후의 control 등은 실제 board 를 이용해야 하나, 아쉽게도 보드가 없어 제어 관련 내용은 하기를 참조!.
sysfs read(show) function,
root@beaglebone:~# cat /sys/kernel/debug/pinctrl/pinctrl_state/ocp:P9_14_pinmux/state
default
sysfs write(store) function,
root@beaglebone:~# echo pwm > /sys/kernel/debug/pinctrl/pinctrl_state/ocp:P9_14_pinmux/state
sysfs read(show) function,
root@beaglebone:~# cat /sys/kernel/debug/pinctrl/pinctrl_state/ocp:P9_14_pinmux/state
pwm
정리하는 의미로 작업 내용을 다시 한번 정리하며 되새겨 보자.
- 회로도에서 필요한 부분을 찾고
- AP datasheet 등에서 해당 블럭/pin 의 제어 내용을 찾고
- dts/dtsi 및 source code 내에서 matching 되는 내용을 찾아
- control 을 하거나, control code 를 만들면 완송!
댓글