RIL이란??

  • RIL은 Radio Interface Layer의 약자로, AP(Application Processor)가 Modem을 제어할 수 있도록 Radio Interface를 제공하는 HAL(Hardware Abstraction Layer)의 역할을 한다.
  • 안드로이드 RIL은 Telepony Framework와 Modem간의 HAL의 역할을 수행한다.
  • RIL은 Modem을 추상화(다양한 Modem들의 기능을 직접적으로 안드로이드 내에 구현하지 않고 공통의 인터페이스로 제어)시켜 안드로이드 Platform이 Modem에 따라 변경되는 것을 최소화한다.
  • 즉, 안드로이드 Platform과 Modem을 분리하여 두 사이의 의존성을 줄여, 다양한 Modem을 손쉽게 안드로이드 Platform에 Porting 할 수 있도록 한다.
  • 안드로이드는 이를 지원하기 위해, Modem(GSM, LTE, CDMA, TDMA )에 관계없이 공통적인 인터페이스인 RIL을 제공한다.

 

  • Modem 추상화의 예)
    • 안드로이드 기반의 한 모바일 Platform(ex. 갤럭시 )에서 특정 모바일 Model이 출시되고 난 뒤, Network 기능만이 업그레이드되며 출시되는 경우가 있을 것이다.
    • 예를 들어, 3G 기반의 모바일 기기가 4G, LTE 기반으로 재출시되는 경우가 한 예이다.
    • 이러한 경우에는 HW적으로 AP(Application Processor)는 변경되지 않고 Modem 쪽만 변경이 이루어졌을 것이다.
    • 만약, 안드로이드 Platform에 Modem 쪽 소스를 가지고있다면 새로운 Network 기능을 지원하기 위해 많은 수정이 이루어져야 할 것이다.
    • 하지만, 안드로이드 Platform에서는 이를 방지하기 위해 Modem 쪽 소스는 Modem Vendor가 지원할 수 있도록 설계를 진행하였다.
    • 즉, 안드로이드 Platform에서는 Modem 쪽 영역을 추상화하여 관련 Network 기능을 공통된 인터페이스로 제공할 수 있도록 설계하였다.
    • 그러한 인터페이스에 맞추어 데이터를 알맞게 부착시키는 역할을 Modem Vendor 사에서 제공하는 RIL에서 진행하게 되는 것이다.

 

안드로이드 Telepony Stack

  • 안드로이드의 Telepony Stack은 다음과 같은 구조로 이루어져 있다.
  • 안드로이드 Platform은 AP위에서 동작하며, AP와 Modem 간의 통신은 Modem에 의존적인 IPC(UART, SPI, I2C, SMEM )를 통해 이루어진다.
  • 이 Telepony Stack은 각종 App에게 Cellular 통신 서비스를 제공한다.
  • 즉, Telepony Stack에 존재하는 Framework는 특정 App이 Cellular 통신 서비스를 이용할 수 있도록 Telepony API를 제공하며,
    이 API가 RIL에게 명령을 전달해 최종적으로 Modem이 특정 통신 기능을 수행하게끔 한다.
  • 여기서 Modem Vendor가 제공해야하는 Vendor RIL 또한, 안드로이드 Platform에 속하는 구성요소이다.
  • 안드로이드는 Modem 제어를 위한 인터페이스인 RIL 명령만을 정의하고, GSM, TDMA, LTE 등의 네트워크와 통신하기 위한 Protocol Stack은 Modem 내에 구현된다.

 

RIL 명령

  • RIL 명령(이하 cmd)에는 2가지가 존재한다.

 

1. Solicited  cmd

  • AP에서 시작되어 Modem으로 특정한 Nework 동작을 요청하는 명령
  • RIL req가 RIL Layer를 통해서 AT 커맨드로 변경되고 응답을 받는 RIL cmd 방식  

 

2. Unsolicited cmd

  • Modem에서 시작되어 현재 Modem의 상태를 Noti 받을 때 사용되는 명령
  • AT noti가 RIL Layer를 통해 RIL ind로 변경되고 noti를 받는 RIL cmd 방식

 

  • RIL cmd는 안드로이드의 /hardware/ril/intclude/telepony/ril.h에 정의되어있다.
    • Solicited cmd의 경우에는 RIL_REQUEST_*라는 이름으로 정의되어있다.
    • Unsolicited cmd의 경우에는 RIL_UNSOL_*이라는 이름으로 정의되어 있다.

 

  • RIL 명령은 AT 커맨드로 매핑되어 동작하며, 특정 RIL 명령을 AT 커맨드로 변환하는 역할은 Vendor RIL에서 진행한다.

 

안드로이드 Telepony Stack 동작과정

  • 앞서 설명한 안드로이드의 Telepony Stack은 위 그림과 같은 Data Flow를 가진다.
  • Java App에서 시작된 Service Request(using Telepony API)가 Telepony Framework를 거쳐서 Event(RIL Req)로 변환된다.
  • 그 후 Event는 UNIX Socket IPC를 통해 RIL Daemon으로 전달되고, RIL Daemon은 전달받은 Event를 Vendor RIL로 포워딩시킨다.
  • 그리고 최종적으로 Vendor RIL은 Event 즉, RIL Req를 Modem에 맞는 AT 명령으로 변환시켜 Modem에게 전달한다.
  • 반대의 과정(ex. RIL Res & Ind)도 이와 유사하게 진행된다.

 

RIL의 구조

  • RIL은 "RIL Daemon"과 "Vendor RIL"로 이루어져있다.

 

  • RIL Daemon
    • RIL Daemon은 Telepony Framework로부터 RIL Req를 받아 Vendor RIL로 포워딩하여 최종적으로 Modem을 제어한다.
    • 즉, RIL Daemon은 Telepony Framework로부터 전달받은 Event는 Modem으로 전달하고 / Vendor RIL로부터 전달받은 Event는 특정 App으로 전달하는 다리역할을 한다.
    • RIL Daemon은 다음과 같은 요구사항이 존재한다.
      1. 다중의 Process로부터 Modem 제어 요청(RIL Req)를 처리할 수 있어야 한다.
      2. 다양한 Vendor의 Modem을 지원하기 위해, Vendor에 관계없이 공통된 인터페이스를 Telepony Framework에 제공해야 한다.
      3. 안정적인 AP와 Modem간의 통신을 보장해야 한다.
    • RIL Daemon은 1.의 요구사항을 충족시키기 위해 IPC로 Unix Domain Socket을 사용한다.
      • Unix Domain Socket을 통해 여러 Process로부터 발생되는 Event를 수신한다.
      • 또한, RIL Daemon에는 동시다발적으로 수신되는 Event를 관리하기 위한 Event Scheduling 기능도 내장되어 있다.
    • RIL Daemon은 2.의 요구사항을 충족시키기 위해 Vendor RIL을 자신의 Under Layer에 둔다.
      • Vendor RIL은 *.so 형태의 공유 라이브러리로 존재한다.
      • 즉, Vendor RIL은 Vendor Modem 사에서 제공하는 바이너리이다.
      • 다시 말해, Vendor 사는 RIL 명령을 AT 명령으로 매핑시키기 위한 Vendor RIL을 직접 제작해야하는 것이다.
      • RIL Daemon은 오로지 현재 안드로이드 버전에서 제공가능한 통신 기능을 공통된 RIL 명령으로 제공한다.
      • 이말은 즉슨, Vendor RIL에서 특정 기능을 하는 RIL 명령에 따라 알아서 Modem에 맞는 AT 명령으로 변환시켜야 한다는 뜻이다.

 

  • Vendor RIL
    • RIL Daemon이 Process화 될 때, 가장 먼저 진행하는 동작은 Vendor RIL을 동적 로딩하고 초기화시키는 것이다.
    • Vendor RIL에 대한 간략한 설명은 위 RIL Daemon 요구사항 중 2.를 참조하면 된다.
    • Vendor 사에서 관여하는 Vendor RIL의 부분은 아래 그림의 빨간색 부분과 같다.
      그 후, Modem의 처리 결과를 반환받아 이것을 다시 RIL 명령으로 변환시킨 뒤, 다시 RIL Daemon으로 전달한다.

 

References

김대우, 박재영, 문병원. "안드로이드 하드웨어 서비스". 개발자가행복한세상. 2013.

 

'Network > Embedded' 카테고리의 다른 글

Auto-Nego(Auto-Negotiation) 란?  (0) 2023.04.01
PTP(Precision Time Protocol) 란?  (0) 2023.04.01
WOL(Wake On Lan) 이란?  (0) 2023.04.01
MII(Media Independent Interface) 란?  (0) 2023.04.01
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기