-
Rotary Phone Dial Linux Kernel Driver는 오래된 다이얼식 전화기를 리눅스의 evdev 입력 장치로 변환해주는 커널 모듈임
- 해당 프로젝트는 단순한 예제 드라이버와 가상머신 기반 개발 환경을 제공해 교육 및 테스트 목적으로도 매우 유용함
- 실제 하드웨어 없이도 개발 및 테스트가 가능하며, GPIO 시뮬레이션을 지원함
- 거의 모든 키매핑 설정을 지원하며, 각국의 다양한 펄스 부호화 방식에도 대응 가능함
- 표준 커널 모듈이기 때문에 손쉽게 리눅스 시스템에 확장 및 통합 가능함
Rotary Phone Dial Linux Kernel Driver 개요
- 이 프로젝트는 오래된 회전식(로터리) 전화기의 다이얼을 리눅스 시스템의 표준 입력장치(예: 숫자패드)로 변환하는 커널 모듈임
- 다음과 같은 사람이 사용을 고려할 만함
- 느린 속도의 다이얼링을 통해 숫자를 입력하고 싶은 경우
- 예전 아날로그 전화기를 디지털 시대로 가져오고자 하는 사용자
- 실제 하드웨어 없이 예제 커널 드라이버와 가상 개발/테스트 환경이 필요한 교육자
- 기타 창의적 실험 목적 등
회로 연결법
- 회전 다이얼은 기본적으로 BUSY(열림 상태) 와 PULSE(닫힘 상태) 두 개의 스위치로 구성됨
- 이 두 스위치는 임베디드 리눅스가 가능한 시스템의 GPIO 핀에 풀업저항과 함께 연결됨
- 다이얼을 돌리면 BUSY 스위치가 닫힘 상태로 바뀌며, 다이얼이 원위치로 돌아오는 동안 PULSE 스위치가 반복적으로 열림/닫힘을 반복함
- 연결 및 핀 배치는 국가나 제작사에 따라 다르므로, 멀티미터로 스위치 반응을 테스트하는 것이 권장됨
- 펄스 신호의 듀티 싸이클(열림/닫힘 시간) 과 디코딩 방식도 각 국가 및 제조사별로 상이함
- 예: 독일은 펄스당 열림 62ms, 닫힘 38ms
- 보통 한 번~아홉 번 펄스는 1~9, 열 번 펄스는 0 (스웨덴 등 예외 있음)
- 불확실 시, 다이얼의 레이블을 확인하거나 테스트 필요함
사용법
- 이 드라이버는 표준 커널 외부 모듈(out-of-tree kernel module) 임
- 단계를 요약하면
- 장치 트리에 rotary-dial 노드 추가, pulse-gpios 및 busy-gpios를 실제 핀에 맵핑
- 필요 시 linux,keycodes 속성으로 키코드 맵 변경
- 커널 소스 경로(KDIR)를 환경 변수로 지정 후 빌드 및 설치, 모듈 적재
- 커널 모듈이 로드되면 입력장치가 생성되어 숫자패드 동작을 하게 됨
-
evemu 도구로 입력 장치 속성 및 다이얼 이벤트 모니터링 가능
개발 및 테스트용 가상머신(VM)
- 드라이버 개발 및 엔드 투 엔드 테스트를 위한 가상머신 환경을 제공함
- 이 VM은 gpio-sim으로 시뮬레이션되는 busy/pulse GPIO를 devicetree에 패치하여 제공함
- 사용자 공간에서 GPIO를 제어해 테스트 시나리오 구현 가능
- Nix 패키지 매니저와 flakes 기능 활성화 후 VM 빌드 및 실행 가능
- VM 내부에서는 바로 개발 셸에 로그인됨
- 드라이버를 빌드한 후 모듈 로딩/언로딩도 지원됨
-
rotary_dialer 도구로 특정 펄스 수를 시뮬레이션해 다이얼 입력 테스트 가능
- (스웨덴식 코딩 환경에서 3 펄스는 숫자 2로 인식됨 등)
테스트
- 드라이버는 포괄적 테스트 수트를 함께 제공함
- VM 환경에서 make test로 자동화된 케이스 실행 가능
- 입력장치 동작 검증, 다이얼 숫자 입력 시 올바른 키코드 방출 확인, 잘못된 입력 처리 등 다양한 상황 점검 가능
메인라인 등록 여부
- 개발자는 로터리 다이얼의 미래를 긍정적으로 보고 있지만, Linus Torvalds는 동의하지 않을 수 있음을 유머러스하게 언급함