안드로이드 바인더(Android Binder) 강의

android-logo안드로이드 바인더에 대한 짤막한 강의를 준비했습니다. 오는 10월 23일 “제4회 Korea Android 세미나“에서 1시간 정도 발표할 예정입니다. 혹시 참가하시는 분들은 나중에 피드백 부탁 드립니다. 강의에 포함되었으면 하는 내용이 있으면 미리 알려주셔도 좋습니다.

 안드로이드의 서비스들이 기초하고 있는 RPC(Remote Procedure Call) 에 대한 이해를 제공하는 것이 목적입니다. 이 번 강의는 다섯 꼭지로 구성됩니다.

  1. 바인더의 탄생 – 바인더의 역사적 맥락과 이름의 의미를 정리합니다. 오픈바인더(OpenBinder)를 짚고 가야지요. 하지만 이번 강의는 오픈바인더가 아니라 안드로이드 바인더입니다.
  2. 바인더 IPC – 커널 모듈인 바인더 IPC(Inter-process Communication) 드라이버(Driver)의 사용법을 요약하고, RPC 와 관련된 신호의 흐름과 쓰레드 관련 이슈들을 설명합니다.
  3. 바인더의 데이터 전달 – 함수 인자와 리턴 값이 전달되는 과정을 분석합니다. 드라이버가 인터페이스(Interface)를 매핑(Mapping)하는 방법을 소개합니다.
  4. 서비스 관리자(Service Manager) - 인터페이스를 등록하고 발견하는 기작(Mechanism)을 설명합니다. 컨텍스트 관리자(Context Manager)에 대한 설명과 함께, service 명령행 도구의 사용법을 예시합니다. C++ 구현, AIDL, Parcel 프로토콜이 간단히 언급됩니다.
  5. 바인더의 한계와 전망 – 바인더의 부족한 부분들을 정리하고, 향후 어떤 과제들이 남아있는지 진단합니다.

 모든 강의 내용은 안드로이드 1.6 (Donut) 을 기준으로 합니다. 액티비티 관리자(Activity Manager), Java 구현, 사용자 서비스 등의 고수준 영역에 대한 내용은 다음 기회로 미룹니다.

관련 포스트:

8 comments to 안드로이드 바인더(Android Binder) 강의

  • 안녕하세요 플로우다스님..^^ IPC(Inter Process Communication)를 위해 사용된 안드로이드 플랫폼의 Dbus(Display Message Bus) VS. Binder(Android IPC Subsystem) 의 차이점에 대해서도 지식을 공유해주시면 개인적으로 감사할것 같습니다.

  • 인베인님 오래간만입니다. 언제 한번 봐야지요?
    답장이 좀 늦었습니다. 어제 보기는 했는데, 술 한잔 한 후라… 음주 블로깅은 피하는 것이 좋을 것 같아서요.
    먼저 Free Desktop 의 D-Bus 를 뜻하시는 것으로 가정하고 답변 드리겠습니다. 제가 아는 ‘D’ 는 ‘Desktop’ 에서 온 것인데, ‘Display’ 라는 뜻이 있는 줄은 몰랐네요.
    올해 6월경에 D-Bus 와 Binder 에 대한 온라인상의 논쟁이 있었던 것으로 알고 있습니다. 마지막에는 인베인님도 의견을 내비치셨지요? 그래서 이 때 논란이 된 문제들과 연관 지어서 부탁하신 것으로 이해하고 있습니다. 제 통박이 대충 맞나요?
    그런데 이 논란에는 몇몇 오해와 신념이 포함되어 있다는 것이 제 생각입니다. 그래서 본 강의에는 포함시키지 않고, 강의 끝에 시간을 조금 내어 설명 드리려고 합니다. 혹 시간 조절에 실패한다면 이 블로그에 글을 올리는 것으로 해결하는 것이 좋을 듯 합니다. 인베인님이 질문하신 의도가 개인적인 의견교환보다, 세미나 참석자들에게 들려주고 싶은 것에 있는 듯 해서 이렇게 계획을 잡아보았습니다.

    제 이름이 잘못되어 질문을 살짝 고쳤습니다. 물론 양해해 주시리라 믿습니다. :)

  • 눈작은나

    3G 통신 모듈과 안드로이드 탑재 AP 를 EBI2(퀄컴 칩) 버스로 연결하여 사용하고자 할 때,
    Android Binder를 통한 RPC 구현을 할 수 있을 것 같은 데요, 관련하여 정보를 주셨으면 합니다.

    참고 사이트라 든가, 간단한 예시 같은 거 없을까요 ?

  • 일반적으로 안드로이드에서 RPC를 구현하는 표준적인 방법은 AIDL 을 사용하여 Service 를 만드는 것입니다. 안드로이드 SDK 에 따라오는 문서에 자세히 설명되어 있고 예제도 포함되어 있으리라 생각됩니다. SDK 사이트는 알고 계시리라고 생각됩니다. 이번 강의는 이런 방법의 뒤 편에서 일어나고 있는 근본적인 메커니즘을 파악하고 싶거나, Java 를 사용하지 못하는 경우를 위한 것입니다. 혹 강의 자료가 필요하시면 위의 후기 링크를 따라가셔서 다운로드 하실 수 있습니다.
    “3G 통신 모듈과 안드로이드 탑재 AP 를 EBI2(퀄컴 칩) 버스로 연결하여 사용하고자 할 때” 만으로는 의도하시는 바를 충분히 정확히 파악하기가 힘드네요. 큰 도움을 못 드려 죄송합니다.

  • 눈작은나

    안드로이드 Binder에 대한 개념이 덜 잡혀 있어서 제대로 질문을 못 드린 것 같습니다.

    상세하게 쓰면, 퀄컴의 3G 모뎀 칩을 삼성의 C100 등의 Application Process 와 메모리 버스로(퀄컴 칩의 EBI2 버스 사용) 연결하여 스마트폰을 설계하는 것을 기준으로 했을 때 두 개의 서로 다른 칩 간에 CPU 통신을 해야 하는 데요, 이 경우에 3G 모뎀 칩 파트의 SW를 안드로이드 Binder에서 제공되는 인터페이스를 기준으로 설계를 해야 하는 것인 지요 ?

    안드로이드의 GSM 폰 관련 된 RIL 과 안드로이드 Binder와의 상관관계 등이 이러한 의문과도 관련이 있는 것인 지 개념을 좀 잡아 주셨으면 합니다.

    질문의 기본 취지는 만일 안드로이드 릴리즈 버전에 이러한 경우에 대한 표준이 있다면 퀄컴의 3G 모뎀 칩에 이런 표준에 해당하는 알고리즘을 구현해야 할 것으로 판단이 되는 데, 안드로이드 초보인 지라 개념이 잡히지 않아 답답한 마음에 적어 봅니다. ^^

  • 현재 퀄컴의 3G 모뎀 칩의 소프트웨어가 동작하는 환경에서 바인더가 사용 가능할 것으로 보이지는 않습니다. 제 추측이 맞는지요? 뭔가 호환 프로토콜을 3G 모뎁 칩 쪽에 구현해서 RPC 를 사용하고 싶다는 뜻으로 들립니다. 역시 추측이 맞는지요? 여기까지 추측이 맞는다면 너무 어려운 길로 가고 계신 거라는 답변을 드릴 수밖에 없습니다. 강의의 끝에 시간이 부족해서 건너뛴 “안드로이드의 한계와 전망” 부분을 보면 Networking 에 관한 언급이 나옵니다. 서로 다른 호스트가 네트워크로 연결되어 있는 경우로 (이 경우는 EBI2) RPC 를 확장하는 것인데, 아직 해야 할 일이 많습니다. 당분간은 같은 CPU를 사용하는 안드로이드 내부에서만 사용하시는 것이 답이라고 생각됩니다.

  • 눈작은나

    네 답변 감사 드립니다.
    가정하신 부분은 모두 맞습니다.
    퀄컴사의 듀얼CPU 모뎀칩에 안드로이드 탑재된 경우에 안드로이드 바인더를 그대로
    사용해서 구현했을 거라 생각되어서 질문 드렸던 건 데.. 좀 더 많이 파악을 해 봐야 할 듯 합니다.

Leave a Reply

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>