Bulldozer™
11.08.10
조회 수 3950
추천 수 5
댓글 10

안녕하세요~^^


Bulldozer 입니다 ^^



어제 JNI & Zygote process 에 대한 글을 올렸었는데


오늘은 Android booting process 에 대한 글을 올립니다 ^^



사실 제가 제 개인 블로그에 안드로이드에 대한 공부를 하면서 적은 글들 중에서는


거의 처음에 적은 글에 해당합니다.


그렇기 때문에 사실 이 전에 올려드린 4개의 노하우 글 보다 이번 글을 먼저 읽고 다른 글을


읽으시는게 사실상 더 도움이 됩니다 ^^



booting process -> init process-1 -> init process-2 -> Android file system -> JNI & Zygote process 인 셈이죠 ^^



아무쪼록 이번 글도


관심있으신 분들께 도움이 되고, 이 글을 통해서 관심을 갖게 되시는 분이 계시기를 바랍니다 ^^



다른 글들 처럼 역시 이번 글도 제 개인 블로그의 글을 바로 퍼온곳이라...


반말입니다 ^^;;


이해해 주세요 ^^;;



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



지금 공부를 하며 참고하고 있는 책은 안드로이드 관련, Java 관련 하여 보고 있으며 리눅스 관련하여 몇권을 더
구매할까 생각 중이다. 리눅스 쉘 스크립트와 기본 명령어와 관련된 서적쪽으로 생각을 하고 있다.
관련 서적이외에 추가적으로 기술적인 부분에 대한 보충 참고로 맛클 자양님(갤럭시 튜너의 개발자)의 블로그인
자양이네(http://blog.naver.com/dowkim10/)에서 궁금증이 있는 부분 중 읽었던 기억이 있는 부분을 찾아서 읽고 있다.
(자양이네의 안드로이드 카테고리의 글은 모두 2번 이상씩 읽었지만 전문적인 지식이 부족하다보니 계속 다시 보게된다...)

공부하고 있는 내용에 대해 하나하나 적는것이 나 자신에게 도움이 되고 좀 더 채찍질이 될 수도 있을것 같아 블로깅을 하려고
마음먹었다. 전문적인 내용을 충분히 적고 싶지만 분명 한계가 있을것이다. 하지만 최대한 노력해서 적어야겠다.
나중에 시간이 흘러 이 글을 다시 읽었을 때 도움이 될 수 있을 정도의 수준은 되도록 만들어야 하니... +_+

안드로이드 플랫폼의 구조는
Linux kernel (display driver, camera driver, usb driver, wifi driver, power management, etc,.)
Libraries (surface manager, media framework, SQLite, etc,.)
Android runtime (dalvik virtual machine, core libraries)
Application framework (activity manager, window manager, view system, package manager, etc,.)
Applications (home, dialer, browser, camera, alarm, calculator, email, albums, clock, etc,.)
위 5 가지로 구분된다고 보면된다.

안드로이드의 소스 코드는
kernel, bionic, bootloader, build, cts, dalvik, external, frameworks, hardware, packages, system 으로 구성되어 있다.
(소스 코드 부분은 아직 명확히 공부하지 못한 부분이라 추후에 이 부분까지 완벽히 이해가 되었을 때 별도로 적을 생각이다.)

기본 공부의 틀을 인사이드 안드로이드 라는 서적을 바탕으로 하다보니 우선 공부하게 된것이 안드로이드의 부팅 프로세스 이다.
관련 서적에서는 부팅 프로세스를 기준으로 소스코드를 분석하는 방식을 이용하여 안드로이드에 대해 정리를 하였다.

간단히 안드로이드의 부팅 프로세스를 적어보면

1. linux kernel
-> 부팅 시 bootloader 를 통해 linux kernel 이 시작된다. 이 과정에서는 커널 초기화가 이루어 지고 마지막 과정에서
init process 가 호출되어 진다.

2. init
-> init process 는 각 device 를 초기화 하며, framework 동작에 필요한 각 daemon, context manager, media server,
zygote 등을 실행한다.

2-1. daemon
-> init process 에서 실행하는 daemon process 는 다음과 같다.
* adbd = Android Debug Bridge 연결관리
* usbd = USB 연결관리
* debuggerd = debug system 의 시작관리
* rild = 무선 통신 연결관리

2-2. context manager
-> 안드로이드의 system service 를 관리하는 process 이다. 여기에서 system service 는 framework 를 구성하는
component 이며, 각종 application 제작에 필요한 API 를 제공하는 등의 역할을 한다.

2-3. media server
-> audio flinger 나 camera service 와 같이 C/C++ 기반으로 작성된 native system service 를 실행하는 역할을 한다.

2-4. zygote
-> android application 의 loading time 을 단축하기 위한 process 이다. Java 기반의 android application 은 모두
zygote 를 통해 fork 된 process 상에서 동작되어 진다.

2-4-1. system server
-> zygote 에서 최초로 fork 되어 실행되는 android application process 이다. 주로 activity manager, location manager service 와 같은 Java system service 를 실행하는 역할을 한다.

여기까지의 과정이 부팅의 시작부터 framework 가 초기화 되는 부분까지이다.
더 자세한 사항은 아직 좀더 공부를 해야지 상세내용을 적을 수 있을것 같다. 어느 정도는 머릿속에 정리가 되어가고 있지만
아직 끝까지 공부를 한것이 아니기 때문에 상호관계가 완벽히 잡히지 않는다. 그래서인지 당장은 좀더 기술적이고 세부적인
내용을 적기에는 많이 부족하다.
일단은 이번 글에서는 간략히 process 의 진행 과정이 나타날 수 있도록만 정리를 한것이며,
이후에 적게될 세부 타이틀을 가진 글들에서는 작은 범위 에서 깊이를 더할 수 있는 글이 될 수 있도록 할 것이다.

위 2-4-1 까지의 과정이 지나가고 나면(Java system service 까지 loading) activity manager service 가 Home application 을
실행하면서 연속적인 부팅 process 를 진행한다.
하지만 책을 보면 Java system serivce loading 까지가 android 부팅 process 의 주요 내용으로 생각된다.

그리고 위에서 글을 쓰다보니 의문점이 생겼다.
usbd 와 adbd 가 실행되어지는 시점에 대해서는 알 수 있으나 안드로이드 운영체재를 사용하는 갤럭시 S 의 경우
리커버리 모드와 다운로드 모드가 존재하는데 두 모드와 부팅 프로세스의 시점에 대한 의문이다.

리커버리 모드의 경우는 adb shell 접속이 가능하여 여러가지 작업이 가능하지만
다운로드 모드의 경우는 adb shell 접속이 안된다.
그렇다면 두 모드 간에 시점의 차이가 발생한다는 것인데...

다운로드 모드의 경우는 init process 에서 adbd 를 실행시키기 전에 진입되는 모드이고
리커버리 모드의 경우는 init process 에서 adbd 를 실행시키고 난 후에 진입되는 모드인듯 하다.
하지만 다운로드 모드나 리커버리 모드 모두 USB 연결에 대한 인식을 한다.
그렇다면 init process 에서 daemon 실행 과정 중에 usbd 의 실행과정 이후에 adbd 가 실행이 되는 것이며,
그 전, 후에 다운로드 모드와 리커버리 모드의 시점이 구분되는듯 하다.

그리고 위 init process 의 진행과정을 보면 각 process 간에 부모/자식 관계와 같은 생성 관계가 존재한다.
이런 process 간의 관계를 알아보는 것은 adb 를 이용하면 아주 간단하게 확인할 수 있다.
adb shell
$ps
를 이용하여 PID 와 PPID 를 확인하면 간단히 알 수 있다.
PPID 번호가 1 인 process 는 PID 번호가 1인 process 가 생성한 process 이다.
이 관계를 보면 init process 가 zygote 를 생성하였고 zygote process 가 수많은 seveice 와 process 를 실행한 것을
눈으로 확인할 수 있다. 단순히 terminal emulator 에서 ps 옵션으로도 확인이 가능하다.

init process 에 대한 좀더 상세히 공부한 내용은 다음 글에 적을 생각이다.
지금 시간이 11시가 되어가는데 눈이 침침하다. @_@





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



예전에 관련된 android booting process 등의 먼저 올린 글들 링크 입니다 ^^



첫 번째 글 init process-1


http://matcl.com/index.php?mid=freeboard&category=9003&document_srl=2580601





두 번째 글 init process-2


http://matcl.com/index.php?mid=freeboard&category=9003&document_srl=2643307




세 번째 글 Android file system



네 번째 글 JNI & Zytoge process


http://matcl.com/index.php?mid=usrkn&document_srl=3923407



감사합니다 ^^


좋은 하루 보내세요 ^^

댓글 10
댓글 쓰기 권한이 없습니다.
분류 정렬 목록 검색 쓰기
List of Articles
제목 글쓴이 추천 조회 날짜
떡님 뮤플 실행시 미니멀텍스트가 실행되는점 극복하기 4 God 3 3216 2011.08.16
SKT 스팸결제 방지 TIP 3 KeRoro 3395 2011.08.15
웹 바이러스체이서 9 미라클_S 12 3286 2011.08.12
난 순정 어플서랍을 폴더로쓴다??? 7 file HID™ 1 4504 2011.08.12
카카오톡도~다이렉트콜 처럼~ 상대방 바로가기 10 file LINUX™ 3 5329 2011.08.11
스맛폰 관심도 넓히기~ Android booting process 10 Bulldozer™ 5 3950 2011.08.10
[갤K] 팁하나~! 8 맛싸이어 2281 2011.08.10
스맛폰 관심도 넓히기~ JNI & Zygote process in Android 11 Bulldozer™ 5 3952 2011.08.09
모바일로 작성시 팁 9 꿈이있는 1 2157 2011.08.08
와이파이신호를 강하게 하는법 5 미쳐버린 7728 2011.08.08
프로그램 설치 용량 확보 Tip 14 벼리 7 6101 2011.08.08
연락처에서 슬라이딩으로 전화 문자보내기 5 까망기타 3014 2011.08.06
원낸드 + 벼리님 핵펀치 사용자용 백업/복구 Script (8/6 수정) 22 file Bulldozer™ 10 4255 2011.08.05
배터리 절약법이에영 ㅎㅎ (눈팅미워할 꼬얏 ㅎㅎ) 42 맛싸이어 23 15785 2011.08.05
컴퓨터 키보드로 안드로이드폰에 직접 문자를 입력하는 방법 12 file 야미 9 5537 2011.08.04
혹시라도 아직 순정 상태로 캡춰하는 방법을 모르실까봐.. 5 알씨포스 1 3382 2011.08.03
마켓에 댓글 안달리신다던 분들!! 3 Flash-★ 2675 2011.08.01
setcpu 설정과 테그얼티밋 전압설정에 관하여 6 남순이 8 8342 2011.07.31
인터넷 종료시키기 4 라퓨타25 1 3982 2011.07.27
강좌 커스텀 락 - 이중락 뜨는 현상 없애는 방법 7 iou 5 5181 2011.07.26
Start G+ : 구글플러스, 트위터, 페이스북 연동 13 file 볼튼원더 7 4119 2011.07.25
OTG가 지원 되시는 모든 기종을 가지고 계신분들은 꼭한번 읽어 주시길.. 10 순딩이폰 4 4714 2011.07.25
상태바 꼼수^^;; 6 짬타이거 1 4068 2011.07.24
(요청)심플한 허니컴락 만들기 7 file KaRAME 3 3210 2011.07.23
만들어진 DVR 위젯 수정하는 방법 24 짱구삼촌 10 3296 2011.07.22
티타늄 백업 사용법 총정리... 20 꼼하슈 11 7531 2011.07.21
구글플러스에 작성하는 글을 동시에 페이스북에 올리는 방법 6 짱구삼촌 2 2627 2011.07.21
미니멀리스틱 텍스트 입니다^^ 23 file Leche™ 12 9792 2011.07.21
네이트온톡 쪽지 관련 팁 7 까망기타 3052 2011.07.21
핵펀치 for 테그라크 리스토어 실수 복구 3 옥상윤 2900 2011.07.21
1 - 106 - 135