본문 바로가기
Android

안드로이드 하드웨어 서비스 02 RIL (1)

by OKOK 2021. 5. 19.

RIL은 크게 릴 데몬과 벤더 릴 라이브러리로 구성되어 있음. 릴 데몬은 벤더 릴을 동적으로 로딩하여 모뎀을 제어하고 모뎀으로부터 응답을 수신함. 안드로이드 릴 구조, 릴 데몬의 초기화, 릴 이벤트 스케줄러의 릴 이벤트 처리 메커니즘에 대해서 소개함. 안드로이드 RIL은 텔레포니 프레임워크와 모뎀 간의 HAL을 제공함. 모뎀의 프로토콜 스택 관련 구현 사항은 모뎀 벤더에 따라 다르며 모뎀 벤더의 고유 자산이므로 공개되지 않는다.

 

2.1.3 AP와 모뎀 간의 통신 : RIL 명령

RIL은 AP가 모뎀을 제어하기 위해 RIL 명령을 제공함. 초장기 버전인 컵케익의 경우 Solicited RIL 명령은 103개, Unsolicited RIL 명령은 29개임. 텔레포니 프레임워크는 모뎀에 서비스를 요청할 때 위와 같은 ID로 각 서비스를 구별함. 3gpp의 GSM, WCDMA 및 LTE 프로토콜을 구현한 모뎀은 기본적으로 AT 명령어를 지원해야 함. 안드로이드는 모뎀 제어를 위해 RIL 명령을 정의함. AT 명령에 대응하는 RIL 명령만 정의함. 각 모뎀 벤더는 안드로이드 RIL 명령에 대응하는 벤더 RIL을 제공함. 안드가 릴 명령, 모뎀 동작, 요청 및 응답 포맷을 정의하면 물리적으로 모뎀이 바뀌거나 모뎀의 구현이 수정되더라도 벤더 릴에서 해당 명령만을 추가 또는 수정한다면 모뎀에 따라 안드로이드 플랫폼의 수정이 필요없음. 

 

2.2 RIL의 구조

릴은 릴 데몬과 벤더 릴 2개의 모듈로 구성되어 있음. 텔레포님 프레임워크는 앱에 텔레포니 에피아이를 제공함. 앱의 서비스 요청은 결국 모뎀으로 전달됨. 모뎀은 서비스 요청에 대한 응답을 텔레포니 프레임워크를 통해서 앱에 전달함. 

 

2.2.1 안드로이드 텔로포니 스택

안드로이드 텔레포니 스택은 총 4개의 레이어 앱, 프레임워크, 릴, 벤더릴로 이루어져 있음. 프레임워크는 자바 프로세스이고 릴 데몬과 통신하기 위해 아피씨 방법으로 유닉스 도메인 소켓을 이용함. 모뎀 의존적인 벤더 릴을 분리하여 물리적인 모뎀의 변경으로 인해 안드로이드 플랫폼이 변경되는 일이 없도록 함. SDK로 작성된 앱은 TelephonyManager를 통해서 안드로이드의 텔레포니 프레임워크에 접근이 가능함. 프레임워크는 소켓을 통해서 릴이 정의한 릴 req를 RIL 데몬에 전달함. 벤더 릴은 모뎀을 제어하는 스포트웨어로 모뎀 벤더에서 제공함. 벤더 릴은 모뎀 벤더에 따라 벤더 의존적인 아피씨 방법을 이용하여 모뎀과 실제로 통신하는 역할을 함. 

 

2.2.2 안드로이드 RIL의 모뎀 제어 모델

다중의 프로세스로부터 모뎀 제어 요청을 처리할 수 있어야 함

다양한 벤더의 모뎀을 지원하며 벤더의 구현에 관계없이 공통 인터페이스를 제공해야 함

안정적인 에이피와 모뎀 간의 통신을 보장해야 함

RIL 데몬은 텔레포니 프레임워크와 벤더 릴에 의해 발생되는 릴이벤트를 수신함. 릴 데몬은 리눅스에서 제공하는 유닉스 도메인 소켓을 프로세스 간 IPC 방식으로 채택함.

벤더 RIL은 *.so 형태의 공유 라이브러리로 존재함.  RIL 데몬은 안드가 부팅할 시점에 실행되어 데몬 프로세스화됨. 릴 데몬이 가장 먼저 수행하는 동작은 벤더 릴을 동적 로딩하고 벤더 릴을 초기화하는 것임. 이렇게 동적 로딩된 벤더 릴은 모뎀과 통신을 통해 모뎀을 제어할 수 있음. 안드릴은 릴데몬과 벤더 릴간의 레디오 제어 인터페이스와 레디오 응답 인터페이스를 정의하고 있음

댓글