핸드폰을 할 때에는 먼저 핸드폰을 켜야한다. 핸드폰을 안키면 뭔가를 할 수가 없으니까 0.<
부팅이 되는 과정은 아래와 같다
(1) 리눅스 커널
커널 초기화를 마친 후 init 프로세스를 호출
(2) init
안드로이드 init 프로세스는 각종 디바이스를 초기화, 프레임 워크 동작에 필요한 각 데몬,컨텍스트 매니저, 미디어 서버, Zyhote 등을 실행 한다.
init 프로세스가 실행하는 데몬 프로세스
- USB 데몬 ( usbd ) : USB 연결 관리
- 안드로이드 디버그 브릿지 데몬 ( adbd ) : ADB 연결 관리
- 디버거 데몬 ( debuggerd) : 디버그 시스템 시작
- 무선 인터페이스 레이어 데몬 ( rild ) : 무선 통신 연결 관리
여기서 데몬은 init.rc 소스 코드에 정의 된 것이고 부팅 시점에서 바로 실행되는 데몬들이다.
실행하고 싶은 daemon을 등록할 때는 당연히 ini.rc 파일의 수정이 필요하고 이 때 SELinux 정책에 영향을 받게 된다.
(3) 컨텍스트 메니저 ( Context Manager )
시스템 서비스를 관리하는 중요한 프로세스.
카메라, 오디오,비디오 처리 등 각종 app 제작에 필요한 중요 API 제공
안드로이드 내에서 동작하는 각종 시스템 서비스에 대한 정보는 컨텍스트 매니저로부터 얻을 수 있다.
APP, 이나 Framework에서 해당 서비스를 사용하려면, service를 얻고 binder 를 이용해서 IPC 통해 통신
이를 위해 안드로이드의 모든 시스템 서비스는 부팅 시 자신의 핸들 정보를 컨텍스트 매니저에 등록해야한다.
(4) 미디어 서버
Audio Flinger과 Camera 서비스와 같이 C/C++ 기반으로 작성돼 있는 네이티브 시스템 서비스를 실행하는 역할이다.
(5) Zygote
안드로이드 어플리케이션 로딩 시간을 단축하기 위한 프로세스로, 모든 자바 기반 안드로이드 앱은
Zygote를 통해 포크(fork)된 프로세스 상에서 동작. (달빅만 있는 작업 인줄 알았는데 AOT에서도 있다고 합니다)
*포크(fork)란 현재 실행중인 process를 복사하여 다른 process를 생성 하는 것이다. 복사 해서 생성 하기 때문에, 가지고 있던 메모리등의 시스템 자원을 모두 원래의 process와 공유 하게 된다.
(6) 시스템 서버
Zygote에서 최초로 포크되어 실행되는 안드로이드 App 이다.
시스템 서버는 앱 생명 주기를 제어하는 액티비티 매니저 서비스 ( Activity Manager Service) 나
단말기의 위치 정보를 제공하는 로케이션 매니저 서비스 ( Location Manager Service ) 와 같은 자바 시스템 서비스를 실행 한다. 자바 시스템 서비스도 컨텍스트 매니저에 등록돼 있어야 한다
진행 과정을 step으로 바꾸면 이렇다.
'안드로이드에 관하여 > 안드로이드 공부' 카테고리의 다른 글
what is Smali code? (0) | 2021.01.02 |
---|---|
Dex 파일 구조는 어떻게 되어 있는가 (2) | 2020.12.24 |
Android framework Study[1] (2) | 2020.12.03 |
안드로이드 리버스 엔지니어링 공부 체크 리스트 (0) | 2020.08.30 |
adb 가 외안댄데?(adb unauthorized , device offline) (0) | 2020.02.08 |