안드로이드 OS 레벨에서 하드웨어를 제어한다는 것은 결국 두 가지 세계의 경계를 넘나드는 일입니다. 하나는 자바 프레임워크의 명령을 받아 구동되는 유저 스페이스(User Space)의 HAL이고, 다른 하나는 하드웨어 레지스터와 물리적인 신호를 직접 주고받는 커널 스페이스(Kernel Space)의 리눅스 커널 드라이버입니다.아무리 화려한 최신 AIDL HAL 인터페이스를 설계하더라도, 결국 최하단의 커널 드라이버가 열어둔 디바이스 노드에 제대로 데이터를 찔러 넣어주지 못하면 하드웨어는 꼼짝도 하지 않는데요. 이번 포스팅에서는 안드로이드 시스템 엔지니어링의 핵심인 HAL과 커널 드라이버의 상호작용 메커니즘을 알아보고, AOSP 진동(Vibrator) 모듈 코드를 예시로 삼아 유저 영역과 커널 영역이 물리..