리눅스 커널 부팅이 끝난 후, Android의 부팅 및 초기화 절차에 대해 설명해 드리고자 합니다.
Init 동작 절차:
Init은 리눅스 커널이 시작된 후 처음으로 동작하는 프로세스 입니다.
Init에 대한 소스코드는 안드로이드 소스의 device/system/init에 위치해 있습니다.
그리고, Init에서는 다음 순서대로, 초기화 절차를 진행 합니다.
1) Log 시스템 초기화
2) 안드로이드 RFS의 /init.rc 및 init.%hardware.rc 파일들을 파싱
3) 2번 절차에서 파싱된 파일의 내용 중 Early-init에 해당하는 부분을 수행
(2,3 번 절차는 하나의 절차로 보셔도 될 듯 합니다.)
4) 디바이스 노드 생성 절차 수행
(aESOP S3C6410의 리눅스 부팅 초기에 mdev에서 노드 생성하는 것과 비슷하다고 생각하시면 될 것 같습니다.)
5) 소유권 정책 초기화
6) 2번 절차에서 파싱된 파일의 내용 중 Init에 해당하는 부분을 수행
7) 소유권 정책 적용
8) 2번 절차에서 파싱된 파일의 내용 중 Early-Boot와 Boot에 해당하는 부분을 수행
9) 2번 절차에서 파싱된 파일의 내용 중 우선 순위 및 소유권 정책을 적용
10) 기타 작업 들을 수행
(SD Card 삽입 시, 디바이스 노드 자동 생성, 및 각종 중요 프로세스들을 fork() 등)
.rc 파일의 경우, Android에서 정의된 스크립트 파일 입니다. 이 파일은 안드로이드 RFS에서 / 디렉터리 또는
device/system/rootdir/init.rc 형태로 위치해 있습니다.
이 .rc 스크립트 파일 포멧은 안드로이드 소스의 device/system/init/readme.txt에 기술되어 있습니다.