본문 바로가기
Android

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

by OKOK 2021. 5. 19.

저자 서문

기본 지식을 잘 이해하는 사림이 더 좋은 성적을 얻을 수 있음. 안드로이드의 깊은 이해를 가진 엔지니어가 실제로 엔지니어 10명 이상의 몫을 한다고 믿음. 

 

01 안드로이드 하드웨어 서비스

모바일 디바이스용 소프트웨어 플랫폼으로 다양한 하드웨어를 지원하며 하드웨어 제어를 위한 상위 수준의 API를 지원함. 안드로이드의 데몬 프로세스는 IPC를 위해 .. 자바프로세스는 ITC를 위해 구현된 메시지 통신 방법을 사용함. 자바를 앱 작성 언어로 채택하면 특정 아키텍처용 앱을 만들 필요없이 하나의 앱으로 멀티 플랫폼에서 실행시킬 수 있는 이점이 있음. 컴파일된 자바바이트코드는 자바 VM이 아닌 구글에서 자체 개발한 Dalvik VM에 의해 실행됨. 

 

1.1 안드로이드 하드웨어 서비스의 소개

아파치 v2라이선스로 배포하고 있어 모든 칩셋 벤더들이 참여할 수 있는 길을 열어둠. 리눅스 커널의 경우 GPL 라이선스를 따르므로 모든 개발 업체가 리눅스 커널 소스를 공개해야 할 의무가 있음. 하지만 안드로이드 플랫폼 코드는 개발 코드를 공개할 의무가 없으며 안드로이드를 사용하기 위해 라이선스 비용을 지불할 필요가 없기 때문에 칩셋 벤더와 휴대폰 제조사가 쉽게 안드로이드 디바이스를 만드는데 진입할 수 있다. 안드는 기존의 리눅스 커널이 지원하지 않는 모바일 디바이스를 위한 파워 매니지먼트 Low Moemory Killer, 알람, 커널 디버거/로거, 바인더 등을 새로 구현하여 추가함. 이러한 안드의 최신 하드웨어에 대한 지원은 개발자에게 다양한 UX 및 최신 기능의 앱을 개발할 수 있는 토양을 제공함. 

 

1.1.1 안드로이드의 등장

공통 개발 환경의 부재 및 개발자들을 위한 생태계를 만들어 플랫폼을 지속적으로 발전시키기 위한 시도가 실패하였기 때문. 안드로이드를 둘러싼 에코 시스템을 토대로 모바일 OS 경쟁에서 우위를 점령할 수 있었음. 오픈 소스로 개방되어 많은 칩셋 벤더와 OEM 업체가 참여할 수 있도록 유도함. 표준 HAL들을 정의하여 배포함. 

 

1.1.2 모바일 디바이스의 하드웨어 구조

스마트폰 플랫폼이 등장하면서 음성통화나 SMS와 같은 전통적인 기능보다 컴퓨터로서의 기능이 더 강조되면서 하나의 프로세서가 모뎀과 AP 역할을 동시에 담당할 수 없는 수준의 고성능 컴퓨팅 파워를 필요로 하게됨. 칩셋 벤더는 멀티 코어에서 해법을 모색하고 있음 멀티 코어란 여러 개의 코어에 작업처리를 효율적으로 분산시켜 싱글 코어에 비해 저전력을 구현하면서도 동영상과 음악 컨텐츠 감상, 앱 실행 등 다양한 작업 수행을 빠르게 처리하는 기술임. AP는 모뎀 칩셋에 비해 성능의 발전속도가 빠름. Discrete AP 구조는 모뎀이 분리되어 있으므로 스마트폰 제조사가 다양한 벤더의 모뎀을 사용할 수 있는 유연성을 제공함. Integrated AP 구조는 모바일 디바이스 내부의 공간을 적게 차지하므로 제품을 소형화하거나 늘어난 여유공간을 배터리 용량을 위한 공간으로 사용하여 좀 더 대용량의 배터리를 장착할 수 있는 등 다양한 방면에서 활용됨. 

 

1.1.3 안드로에드 하드웨어 서비스의 개요

안드로이드 앱은 동작 중에 자주 하드웨어를 제어해야 하는 경우가 발생함. 안드로이드의 텔레포니 프레임워크는 모뎀제어를 위한 표준화된 API를 제공하여 Phone 앱 개발자는 모뎀 제어에 대한 깊은 지식이 없어도 모뎀 제어를 위한 API를 호출하여 모뎀을 제어할 수 있음. 앱이 하드웨어를 직접 제어하는 것이 아니라 서비스 프레임워크가 제공하는 API를 통해서만 하드웨어를 제어하도록 하여 잘못된 하드웨어 제어로 인한 시스템 크래쉬 및 특정 앱이 하드웨어를 독점하는 일을 미연에 방지할 수 있음. 안드로이드는 하드웨어에 따른 의존성을 최소화하기 위해 하부 할 레벨의 인터페이스를 정의함으로써 하드웨어으 변경에 따라 안드로이드 플랫폼 또는 앱이 수정되어야 하는 문제를 해결함. 네이티브 데몬은 C/C++ 언어로 작성된 프로그램으로 안드로이드가 실행될 때부터 실행되어 백그라운드에서 클라이언트 프로세스로부터 서비스 요청을 처리함. 

 

1. 네이티브 데몬의 생성

init 프로세스가 실행되면 init.rc로부터 서비스 섹션을 읽어 네이티브 데몬을 실행함. adbd : 안드로이드의 디버거는 안드로이드 상에서 실행되는 파일전송 agent로 pc상의 adb 프로그램에 시작되는 adb 서버와 통신하며 사용자가 안드로이드를 디버깅할 수 있는 환경을 제공함. rild는 텔레포니 스택의 근간이 되는 네이티브 데몬으로 phone 앱이나 그 밖으 클라이언트 프로그램으로부터 모뎀 제어 요청을 받아 모뎀에 전달함. 하드웨어 서비스와 코어 플랫폼 서비스는 시스템 서버 프로세스에 의해 생성되며 쓰레드 형태로 실행됨. Telephony : 네이티브 데몬인 rild와 통신하면서 Call, SS, 데이터 서비스, 네트워크 서비스, UICC, SMS 서비스 등을 phone 앱에 제공함. 텔레포니 서비스는 하드웨어 서비스임에도 불구하고 시스템 서버가 아닌 폰 앱 프로세스에 의해 시작됨. 다른 하드웨어 서비스와 달리 폰 앱에 의해 생성되고 폰 앱 내에서 실행됨. 텔레포니 서비스와 폰 앱이 하나의 프로세스에서 실행되는 이유는 네트워크로부터의 응답을 예측할 수 없기 때문. 따라서 폰 앱과 텔레포니 서비스 간의 비동기 통신을 지원하기 위해 루퍼를 이용한 메시지 통신을 사용함. 메시지 통신은 같은 프로세스 안에서만 가능하므로 안드로이드는 텔레포니 서비스를 폰 앱과 결합한 형태로 디자인 함.

 

1장 : RIL데몬과 텔레포니 프레임워크는 서로 다른 프로세스에서 실행되고 있으므로 프로세스 간 통신을 위한 IPC가 필요함. RIL 데몬과 텔레포니 프레임워크 간의 통신을 위해 유닉스 도메인 소켓을 사용함. 쓰레드 간 비동기 통신을 지원하기 위해 제공되는 메시지, 핸들러, 루퍼, 메시지 큐 등에 대해서 소개함

 

2장 : RIL은 모뎀을 안드로이드로 부터 추상화시키는 일종의 할로 안드로이드 릴은 다양한 모뎀 벤더를 지원하기 위해 모뎀제어를 위한 표준 방법을 정의함. 릴은 릴 데몬과 벤더 릴로 크게 구분할 수 있음. 릴 초기화시 릴 데몬은 벤더 릴을 동적으로 로딩함. 릴 이벤트 스케줄러가 릴 이벤트를 스케줄링 하는 메커니즘과 모뎀으로부터 전달된 릴 resp와 릴 ind를 릴 데몬이 처리하는 방법에 대해 소개함

 

3장 텔레포니 프레임워크 : 자바 앱 프레임워크로 상위 폰 앱에 텔레포니 관련 API를 제공함. 폰에 의해서 프레임워크가 초기화되고, 실행 됨. 네트워크의 특성상 네트워크로부터 전달되는 응답이 올 시점을 예측하기 어려우므로 비동기 방식의 통신 방법이 필요함. 폰앱은 텔레포니 프레임워크에 서비스 req를 보낸 후 서비스 resp를 받기까지 대기하는 것은 비효율적이므로 루퍼를 기반으로 메시지 통신을 사용함.

 

4장 USIM : 가입자 정보를 저장하고 이를 제공하는 독립적인 시스템. 휴대 전화는 USIM과 통신을 통해 필요한 정보를 요청하거나 저장함. 휴대 전화는 유심과의 통신을 통해 필요한 정보를 요청하거나 저장함. 유심이 무엇인지 그리고 유심과 휴대 전화와의 통신은 어떤 방식으로 진행되는지 살펴봄. 더불어 USAT이라 불리는 USIM과 함께 UIC에 설치되어 동작하는 시스템에 대해 알아보도록 함

댓글