본문 바로가기
3. 개발 관련/임베디드 :: 괴발개발주절주절이야기보따리

Embedded Software 개발 : `schematic to source code` - 3

by kyuho.choi 2023. 5. 1.
728x90
반응형

Embedded Software 개발 : `schematic to source code` - 1/2 편에 이어서...

 

Embedded Software 개발 : `schematic to source code` - 1

일이 일이다 보니 회로도를 열어 볼 일이 종종 있는데, 가끔 뉴비분들과 이야기해보면 본적이 없어 모르시는 경우가 있다. 어찌보면 당연하기도 하다. IT가 대세인지 오래고 임베디드/제조는 기

chlrbgh0.tistory.com

 

 

Embedded Software 개발 : `schematic to source code` - 2

Embedded Software 개발 : `schematic to source code` - 1 편에 이어서... Embedded Software 개발 : `schematic to source code` - 1 일이 일이다 보니 회로도를 열어 볼 일이 종종 있는데, 가끔 뉴비분들과 이야기해보면 본

chlrbgh0.tistory.com

 

마지막으로 확인한 내용은 gpio 관련 dts/dtsi 의 define 내용이었다.

 

beagle gpio dtsi 내용

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

 

pinmux-helper driver

 

해당 platform driver 가 어떠한 dts/dtsi 를 참조하는 지 찾아보면 아래와 같다.

bone-pinmux-helper compatible 을 지정하는 것을 찾을 수 있다

 of_device_id 는 open firmware device id 즉, dts/dtsi 내에서 search 하는 것이고,

앞서 살펴본 대로 compatible name 인 bone-pinmux-helper 를 참조하도록 설정하고 있는데 해당 pin 을 이용하여 동작할 driver 라는 것을 유추할 수 있다.

 

그럼 실제 등록 내용을 살펴본다.

 

sysfs attribute define, 최근에는 sysfs_emit 으로 변경하고 있다

 

sysfs 를 지정하는 부분이다. 앞선 포스팅에서 우려한대로 gpio 라고 하는게 크게 복잡한 interface 나 control scheme 이 필요한게 아니므로 user land 에서 file read/write 로 직접 control 할 수 있는 file 을 생성해주고 있다.

 

probe:sysfs_create

 

이후의 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

 


정리하는 의미로 작업 내용을 다시 한번 정리하며 되새겨 보자.

  1. 회로도에서 필요한 부분을 찾고
  2. AP datasheet 등에서 해당 블럭/pin 의 제어 내용을 찾고
  3. dts/dtsi 및 source code 내에서 matching 되는 내용을 찾아
  4. control 을 하거나, control code 를 만들면 완송!

요러한 순서로 해보자


 

728x90
반응형

댓글