안녕하세요 돼지왕왕돼지입니다.
오늘은 안드로이드의 부팅과 커널 폴더 구조에 대한 기초자료들을 함께 보고자 합니다.
안드로이드 부팅과 커널 폴더 구조를 왜 알아야 하는가?
프레임워크의 구조에 익숙하고 그것의 동작 원리를 제대로 파악하면, 어떤 개발 시나리오라도 주눅들지 않을 수 있습니다.
게다가 안드로이드 프레임워크를 잘 알면 최적화된 S/W 설계를 하는 데 도움도 됩니다.
물론 여기서 다루는 간단한 소개정도로는 의도가 정확히 이루어지지 않지만, 출발점이 되겠습니다.
안드로이드 소스 폴더 구조
kernel: Linux 2.6
bionic : 표준 C lib
bootloader : 참고용 부트 로더
build : 빌드 시스템
cts : 호환성 테스트 관련 소스
dalvic : 가상 머신
external : 오픈 소스들
frameworks : 프레임워크
hardware : HAL( Hardware Abstraction Layer ) 소스
packages : 기본 어플, 컨텐트 프로바이더 등
system : init 프로세스, 블루투스 도구 모음 등
여기서 우리가 집중해서 봐야 할 녀석들은, 분홍색으로 표시된 녀석인데요.
App. 개발입장에서는 특히 frameworks 와 packages 를 집중해서 봐야 하겠습니다.
안드로이드의 부팅 순서
이미지 출처 : http://greenweblog.tistory.com/82
1. 리눅스 커널
커널 초기화를 마친 후 init 프로세스 호출
2. init
안드로이드 init 프로세스는 각종 디바이스를 초기화, 프레임워크 동작에 필요한 각종 데몬, 컨텍스트 매니저 ( Context Manager ), 미디어 서버( Media Server ), Zygote 등을 실행한다.
init 프로세스가 실행하는 데몬 프로세스
- USB 데몬 ( usbd ) : USB 연결 관리
- 안드로이드 디버그 브릿지 데몬 ( adbd ) : ADB 연결 관리
- 디버거 데몬 ( debuggerd) : 디버그 시스템 시작
- 무선 인터페이스 레이어 데몬 ( rild ) : 무선 통신 연결 관리
3. 컨텍스트 매니저 ( Context Manager )
시스템 서비스를 관리하는 중요한 프로세스.
카메라, 오디오, 비디오 처리 등 각종 app 제작에 필요한 중요 API 제공.
안드로이드 내에서 동작하는 각종 시스템 서비스에 대한 정보는 컨텍스트 매니저로부터 얻을 수 있다.
App. 이나 Framework에서 해당 서비스를 사용하려면, service를 얻고, binder를 이용해서 IPC 통해 통신.
이를 위해 안드로이드의 모든 시스템 서비스는 부팅 시 자신의 핸들 정보를 컨텍스트 매니저에 등록해야 함.
( 이 등록 과정도 IPC 이용 )
4. 미디어 서버 ( media Server )
Audio Flinger ( 오디오 출력 담당 ) 과 Camera 서비스와 같이 C/C++ 기반으로 작성돼 있는
네이티브 시스템 서비스를 실행하는 역할.
5. Zygote
안드로이드 어플리케이션 로딩 시간을 단축하기 위한 프로세스로, 모든 자바 기반 안드로이드 앱은
Zygote를 통해 포크(fork)된 프로세스 상에서 동작.
6. 시스템 서버 ( System Server )
Zygote에서 최초로 포크되어 실행되는 안드로이드 App. 이다.
시스템 서버는 앱 생명 주기를 제어하는 액티비티 매니저 서비스 ( Activity Manager Service) 나
단말기의 위치 정보를 제공하는 로케이션 매니저 서비스 ( Location Manager Service ) 와 같은 자바 시스템 서비스를 실행
자바 시스템 서비스도 컨텍스트 매니저에 등록돼 있어야 한다.
< 참고 사항 >
이후에 자바 시스템 서비스가 모두 로딩되고 나면 액티비티 매니저 서비스 ( Activity Manager Service ) 가
HOME 어플을 실행하면서 계속 부팅 과정 진행한다.
이상입니다. 더 자세한 사항은 추후 포스팅 혹은 스스로 공부하도록 합시다용~
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[android/안드로이드] boot.img 와 system.img 의 정체 (0) | 2012.02.07 |
---|---|
[android/안드로이드] managedQuery 와 일반 query 의 차이점 (0) | 2012.02.07 |
[android/안드로이드] framework source eclipse 에 import 하기. (0) | 2012.02.07 |
[android/안드로이드] 죽지 않는 service 만들기 ( 사실은.. 지속적인 부활 ) (2) | 2012.02.07 |
[android/안드로이드] Font 에 대해 알아보아요. (0) | 2012.02.07 |
댓글