오늘 알아볼 것
- 안드로이드 부팅과정에 대해 알아보기.
안드로이드 부팅과정
- 모든 기계는 켜지는 과정이 있다. 안드로이드도 기계 안에 들어가는 소프트웨어이기 때문에 켜지는 과정이 있다.
1st. boot ROM
- 모든 기계는 물리적으로 누르거나 전기적 신호를 흘려주는 무언가로부터 작동이 시작된다.
- 이 boot ROM이 물리적 버튼을 누르면 작동되면서 bootloader가 실행되게 된다.
2nd. bootloader를 이용한 리눅스 커널 시작.
- 일단 안드로이드는 '리눅스 기반'이다. 그래서, boot ROM에 의해 로드되서 bootloader가 켜지고 리눅스가 시작된다.
- bootloader는 OS 시작 전 실행되는 코드로써, 장치가 어떻게 시작되는지 알려주고, kernel을 찾는 명령어를 가진 저급언어 코드다.
++ bootloader의 경로 - <android source>/bootable/bootloader/legacy/usbloader
bootloader가 하는일
- 메모리(RAM) 초기화
- Kernel 로드.
2-1 android kernel
- 커널이 로드가 되면, 여러가지(캐시, 예약, 인터럽트 컨트롤러, 스케줄링)를 설정하고 드라이버를 로드한다고한다.
인터럽트 컨트롤러 -
스캐줄링 -
- kernel이 시스템 세팅을 끝내면, 시스템 파일 안에서 "init"을 찾는다.
3rd. init 프로세스 시작
- 첫 번째로 실행되는 프로세스.
- 모든 프로세스들의 루트 프로세스.(=조상 프로세스)
- init.rc 스크립트를 파싱해서 실행한다.
init.rc의 경로 - <android source>/system/core/rootdir/
init process의 경로 - <android source>/system/core/init
- Zygote 와 System Process를 실행하는 역할을 한다.
- 각종 디바이스를 초기화해주고 안드로이드 프레임워크 동작에 필요한 각종 데몬, 컨택스트 매니져등을 실행하는 역할을 해준다.
데몬?(daemon?) : 유닉스 커널에 의해 실행되는 프로세스로, 특정 서비스를 제공해주는 역할을 하는 무언가.
init에서 로드되는 데몬프로세스
- USB 데몬 : usbd
- 안드로이드 디버그 브릿지 데몬 : adbd(이래서 nox_adb라고 했던것을 알 수 있었다.)
- 디버그데몬 : debuggerd
- 무선 인터페이스 레이어 데몬 : rild
4th. 컨텍스트 매니져 시작
- 안드로이드의 시스템 서비스를 관리하는 중요한 프로세서.
- 카메라, 오디오, 비디오 처리 ~ 어플리케이션 제작에 필요한 API를 제공해주는 프로세서.
5th. 미디어 서버 동작.
- 오디오출력, 카메라 서비스와 같이 C, C++기반으로 작성되어있는 네이티브 시스템 서비스를 실행하는 역할을 한다.
- 미디어 서버가 실행되야만 소리가 실행될 수 있다.
6th. Zygote, Dalvik동작.
fork()? - 이 함수를 호출한 프로세스를 복사하는 기능을 가진 함수.
https://code-lab1.tistory.com/38
[운영체제] 프로세스란? 프로세스 메모리 구조, 상태, 스케줄링
프로세스(Process)란? 프로세스는 실행 중인 프로그램(program)을 뜻한다. 그렇다면 프로그램은 무엇인가? 프로그램은 명령어들의 모음을 포함한 디스크에 저장된 파일이다. 프로그램이 실행되면 이
code-lab1.tistory.com
여기서 2번째 '상태'에 대해서 참고해야할 것 같다..
- 가상머신에서 어플리케이션을 실행하기 위한 모든 준비를 마치고, 어플리케이션을 실행할 때는 fork()를 통해 복제된 Zygote 프로세스 위, Dalvik VM에서 어플리케이션이 실행된다.
- COW(Copy on Write)방식을 사용한다고 한다.
7th. 시스템 서버(system server)
- 자이고트에서 최초로 포크(fork()=복사)되어 실행되는 안드로이드 어플리케이션 프로세서다.
- location매니져와 같은 자바서비스를 실행한다. (=위치추적)
++ 바인더 IPC를 통해 자바 시스템서비스를 C언어 기반의 서비스매니저에 등록하기 위해서, 자바와 C언어 간의 인터페이스 역할을 하는 JNI를 추가로 이용한다고 한다.
바인더 IPC? - 서로 다른 프로세스간의 통신을 하기 위한 방법이라고 한다.
++ 서로간의 프로세스에서의 통신에는 시그널, 파이프, 메시지 큐, 세마포어 , Memory Mapped file과 같은 방법이 사용한다고 한다.

결론 및 느낀점
안드로이드가 시작되는 과정이 참 요란하다고 생각하게 되었다.
그리고 저 시작하는 과정에서 뭔가 변조를 하게 된다면, 내가 의도한 바대로 익스플로잇 할 수 있는곳이 몇몇곳이 보이기도 하였다.
가령, 미디어 서버가 동작할때 의도적으로 C파일에 악성코드 집어넣어서 무언가를 한다는 망상이라던가..
(CVE-2015-?????에서 비슷한게 있었는데..)
여하튼 저 부팅과정에서 무언가를 할 수 있는지 알아봐야겠다는 생각을 하게 되었다.
참고 및 출처 -
https://source.android.com/docs/devices/automotive/power/boot_time?hl=ko
부팅 시간 관리 | Android 오픈소스 프로젝트 | Android Open Source Project
<!-- Copyright 2021 The Android Open Source Project Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICE
source.android.com
https://koharinn.tistory.com/463
Android Booting Sequence 안드로이드 부팅 과정
1. Boot ROM POWER 버튼을 누르면, ROM 내부의 Boot ROM 코드가 실행된다. RAM으로 Bootloader의 첫 번째 단계를 로드한다. 2. Boot Loader OS 시작 전 실행되는 코드이다. 장치가 어떻게 시작하는지 알려주고 kernel
koharinn.tistory.com
https://rjswn0315.tistory.com/47
안드로이드 OS 부팅과정
이번엔 안드로이드 OS 부팅과정에 대해서 포스팅해보려고한다. 안드로이드 운영체제만큼 중요하다고 생각하는 것이 안드로이드 OS 부팅과정이다. 전체적인 그림은 다음과 같다. 1. 커널(Kernel) 부
rjswn0315.tistory.com
1. Init 시스템이란
같은 카테고리의 글 보기 www.kernelpanic.kr/category/%EC%98%A4%ED%94%88%EC%86%8C%EC%8A%A4%20%EC%9D%BD%EA%B8%B0/Init%20%EC%8B%9C%EC%8A%A4%ED%85%9C%20-%20Systemd '오픈소스 읽기/Init 시스템 - Systemd' 카테고리의 글 목록 www.kernelpan
www.kernelpanic.kr
https://code-lab1.tistory.com/39
[운영체제] fork() 함수란? , fork() 함수 예제 , 부모 자식 프로세스
fork() 함수란? Unix 환경에서 fork() 함수는 함수를 호출한 프로세스를 복사하는 기능을 한다. 이때 부모 프로세스와 자식 프로세스가 나뉘어 실행되는데, 원래 진행되던 프로세스는 부모 프로세스(
code-lab1.tistory.com
https://www.oss.kr/info_techtip/show/32d5f561-b998-496c-a328-a58a5555e2c6
[안드로이드] (4)안드로이드 바인더(Binder)의 이해 - 공개SW 포털
글: 라영호 | ratharn@naver.com / 2012-05-07[연재 차례]1. 안드로이드 시스템의 역사 및 동향 2. 안드로이드 시스템과 리눅스 3. 안드로이드...
www.oss.kr
'Android' 카테고리의 다른 글
JNI와 NDK에 대한 간단한 고찰. (0) | 2023.03.15 |
---|---|
안드로이드에서 사용하는 자바는 뭐가 다를까? (0) | 2023.03.15 |
apk tool이란 무엇일까? (0) | 2023.03.15 |
Android에 대한 간단한 고찰. (0) | 2023.03.11 |