포럼 회원으로 등록하신분만 다운로드가 가능합니다. 최대 업로드 가능한 용량은 20MB 입니다.

안녕하세요.

 

고도리입니다.

 

binder 관련 자료를 보강할 겸 다시 올립니다.

 

책의 그림들이 좀 부실한데다가 틀린 그림이 올라간 듯 해서요.

 

====================================================================

0. servicemanager란????

 

binder 서버 중 특수한 서버라고 생각하시면 됩니다.

binder관련해서 가장 먼저 실행되는 서버로 context manager라고 불립니다.

 

context manager라는 것은 한마디로, 바인더의 등록 부분들을 "관리"한다는 뜻입니다.

 

주로 하는 일은

 

- binder서버의 등록

- 등록된 바인더 서버에 접속하기 위한 client로부터의 요청을 받고, 등록된 바인더 서버로의 접속 포인트를

가르쳐 주는겁니다.

 

저는 보통 "번호표" 뽑아주는 녀석이라 얘기합니다...^^

 

1. servicemanager의 실행

 

binder의 시작은 안드로이드 init가 동작하면서  init.rc의 내용을 parsing 한 후 시작됩니다.

다음은 init.rc의 내용을 발췌한 것입니다.

 

service servicemanager /system/bin/servicemanager
    user system
    critical
    onrestart restart zygote
    onrestart restart media

 

여기의 내용을 보면 servicemanager 서비스를 실행할 때 system 사용자로(AID_SYSTEM) 시작을 시키도록 되어 있고, 재미있는 것은

 

    onrestart restart zygote
    onrestart restart media

 

이 문법인데, 이 것은

 

"servicemanager 서비스가 restart 할 때 zygote와 media service를 restart 하라"라는 문법입니다.

 

2. servicemanager의 동작

 

 

1> servicemanager는 부팅시 Binder driver의 내부 서비스 노드의 Node 0로 등록을 합니다.

Node 0는 특권을 갖는 녀석이라고 보시면 됩니다.

 

 binder001.jpg

 

 

2> 다음의 그림은 servicemanager에 AudioFlinger 서비스가 등록되는 그림입니다.

 

순서는 번호를 보시면 됩니다.....

 

binder002.jpg

 

servicemanager는 부팅시 Node 0로 등록, 등록은 servicemanager로 요청이 됩니다. 왜 servicemanager가 node 0를 차지하냐 하면 AudioFlinger는 servicemanager가 어디에 있는지 찾을 방법이 없습니다. 왜냐고요????

 

서로 다른 process 이기 때문에 전혀 메모리 영역이 겹치지 않습니다. AudioFlinger입장에서는 servicemanager가 실제로 어디있는지 찾을 방법이 없습니다. 단, 커널만이 알고 있을 뿐입니다.

 

해서 servicemanager가 등록이 된 후 AudioFlinger는 servicemanager가 어디 있는지 찾기 위해서는 binder library를 통해서 드라이버의 Node 0로만 메세지를 보내게 되면 자동으로 servicemanager가 알아채는 겁니다.

 

내용이야 어떻든 가장 중요한 것은 "process가 다르기 때문에 다른 프로세스의 위치를 찾기 힘들다" 입니다.

 

 

3> 자 그럼..........이제는 client가 AudioFlinger로 접속하기 위한 방법을 보도록 하겠습니다.

 

client는 audio쪽을 사용하는 mp3 player로 정했습니다.

 

binder003.jpg

 mp3 player는 AudioFlinger로 접속하기 위해서는 한가지 일을 처리해야합니다.
"AudioFlinger는 어디있을까????" 라는 문제를요.

왜냐하면 mp3 player와 AudioFlinger는 서로 다른 process이기 때문에 실제로는 AudioFlinger로 접속할 방법이
없습니다. 즉, 어디에 있는지 있는지 조차도 모르는 것이지요.

해서 mp3 player, 즉, binder client는 AudioFlinger로 접속하기 위하여 servicemanager에 물어봐야 합니다.
왜냐? 원래 servicemanager의 역할이 이런 것이거든요. 해서 mp3 player는 Node 0로 AudioFlinger의 Node 위치를
물어보게 되는 것입니다.

4> mp3 player가 AudioFlinger로 접속

mp3 player는 servicemanager의 도움으로 AudioFlinger와 통신할 수 있는 Node n을 얻어냅니다.
그 후로부터는 AudioFlinger로 접속해서 mp3 play를 할 수 있게 됩니다.


binder004.jpg



ps> 여기 사용하는 글과 그림은 마음대로 쓰셔도 됩니다.......This contents are free





소나무

2011.06.30 01:37:42
*.50.20.41

어제 책이 도착해서 잠깐 보았는데.... 잘 정리되어 있더군요. 보드가 없어서 안타까울 따름.... 언제 추가 안하시나요? ^^ 올리신 글은 참고 하겠습니다.

고도리

2011.06.30 01:54:14
*.200.239.234

조만간 다시 공지 올릴까 하고 있습니다....^^

뽕다르

2011.07.01 01:49:34
*.246.71.74

훨신 이해하기가 쉽네요. 감사합니다.

꿈속의호수

2011.07.14 02:49:58
*.50.21.20

굿 정보입니다.

이해가 확 되는군요..

저도 다른 직원이 산것을 조금 봤는데..

저도 조만간 책을 구매해야 겠더군요. ㅎㅎ

애플파이

2011.07.16 00:22:55
*.152.11.28

좋은 자료 감사합니다.

산타클로스

2011.07.16 23:05:11
*.140.215.252

좋은 자료 감사합니다. 책보고 공부하고 있는데 좀 어렵네요...^^; 처음 접하는 분야라서 고도리님 책 보다가 리눅스 커널 심층분석으로 다시 돌아왔어요....;;  고도리님이 추천해준 책 보고 이번에 내신 책 다시 보려구요~~

정보 공유하며 열심히 하시는 모습 정말 아름답습니다.

고도리

2011.07.19 04:07:46
*.200.239.234

말씀 감사드립니다.

 

책내는 것과 정보 공유는 많이 다르다는 것을 요즘 느끼고 있습니다.

 

조금씩 관련 자료들을 정리해서 올리는데, 시간이 많이 없네요.

List of Articles
번호 제목 글쓴이 날짜 조회 수
84 [android] mouse right button을 back key 처럼 동작시키는 방법 [1] 고도리 2017-05-28 183
83 [android] hello android application 작성법 관리자 2013-12-11 2340
82 DRM(Digital Rights Management) on Android file [1] 고도리 2012-07-06 5412
81 [자료] Android build system(안드로이드 빌드 시스템) for ICS file [7] 고도리 2012-04-16 7352
80 [추가 업데이트]안드로이드 플랫폼 공부를 시작할 수 있는 실습형 ... [17] 이제현 2012-04-11 8830
79 [펌] Android Device driver 정리 - 슬로우부트님 자료 file [3] 고도리 2011-12-01 8679
78 [펌] Android Device Driver 정리 문서 및 Stagefright 개념 ... file [5] 고도리 2011-11-22 9046
77 odroid7에서 KGDB를 이용한 커널 디버깅 방법 [6] 경주현 2011-10-06 7430
76 android boot시 shell script 실행시키기(혹은 binary) [1] 고도리 2011-09-30 7609
75 Android 2.3 멀티미디어(Multimedia) framework 구조자료 file [12] 고도리 2011-09-14 9499
74 Android Gingerbread Multimedia Framework 분석 - 1 file [7] 고도리 2011-08-08 10495
73 [안드로이드 책] Input관련 간단자료 및 PhoneWindowManager 연동 file [2] 고도리 2011-08-02 22229
72 [안드로이드 포팅 책] 1쇄 binder관련 그림 교체와 수정사항 file 고도리 2011-07-23 12737
71 [안드로이드 분석및포팅 교안] 1장 안드로이드 개요 및 구조 file [2] 고도리 2011-07-19 9453
70 [Android 분석 및 포팅] Binder의 동작원리 - #2 IPC/RPC file 고도리 2011-06-30 40744
» [Android 분석 및 포팅] Binder의 동작원리 - #1 servicemanage... file [7] 고도리 2011-06-30 11872
68 Android 2.3 GingerBread Multimedia Framework 분석 - 1 [26] 고도리 2011-05-23 25970
67 [안드로이드] screen power save로 들어가는거 막는 부분 [2] 고도리 2010-10-28 12217
66 CodeViser 활용 aESOP-C100 보드 Android 디버깅 가이드 file pottery 2010-09-16 12819
65 Android 2.1 source tree 설명 file [20] 고도리 2010-09-02 15878

사용자 로그인