레거시 다이얼 전화기를 리눅스 입력장치로 만드는 커널 드라이버

6 hours ago 1

  • 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는 동의하지 않을 수 있음을 유머러스하게 언급함

Read Entire Article