'init 프로세스'에 해당되는 글 2건

p.46 init.rc 분석 실행

 

  • system/core/init/init.c

 

--> int main(int argc, char **argv)
 


(1) init.rc 파일 파싱: 안드로이드가 동작하는데 공통적으로 필요한 환경 설정

(2) init.{hardware}.rc 파일 파싱: 플랫폼 특화된 환경 설정

(3) early-init 액션 리스트 실행:

(4) init 액션 리스트 실행

 

p.47 액션리스트

 

  • 'on' 키워드로 시작하는 액션 리스트
    • on init: 환경변수를 등록하고 파일 디렉터리 생성/마운트, 퍼미션을 조작한다.
    • on boot: application 종료 조건 설정, 구동에 필요한 디렉터리 파일 퍼미션 등을 설정한다.
  • 'service' 키워드로 시작하는 서비스 리스트
    • init 프로세스가 실행시킬 프로세스들을 기술.
    • service들은 모두 service list 등록되고, init 프로세스는 이를 순차적으로 실행한다.

 

  • init.rc 예제 (linaro-android 파일에서 가져옴)

 

on early-init

    start ueventd

 

on init

 

sysclktz 0

 

loglevel 3

 

# setup the global environment

    export PATH /sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin

    export LD_LIBRARY_PATH /vendor/lib:/system/lib

    export ANDROID_BOOTLOGO 1

    export ANDROID_ROOT /system

    export ANDROID_ASSETS /system/app

   

...

 

on boot

# basic network init

    ifup lo

    hostname localhost

    domainname localdomain

 

# set RLIMIT_NICE to allow priorities from 19 to -20

    setrlimit 13 40 40

 

# Define the oom_adj values for the classes of processes that can be

# killed by the kernel.  These are used in ActivityManagerService.

    setprop ro.FOREGROUND_APP_ADJ 0

    setprop ro.VISIBLE_APP_ADJ 1

    setprop ro.PERCEPTIBLE_APP_ADJ 2

    setprop ro.HEAVY_WEIGHT_APP_ADJ 3

    setprop ro.SECONDARY_SERVER_ADJ 4

...

 

# adbd on at boot in emulator

on property:ro.kernel.qemu=1

    start adbd

 

on property:persist.service.adb.enable=1

    start adbd

 

on property:persist.service.adb.enable=0

    stop adbd

 

service servicemanager /system/bin/servicemanager

    user system

    critical

    onrestart restart zygote

    onrestart restart media

 

service vold /system/bin/vold

    socket vold stream 0660 root mount

    ioprio be 2

...

 

 

p.55 액션 리스트 서비스 리스트의 실행

 

  • 액션 리스트와 서비스 리스트의 실행
    • 책에서는 drain_action_queue() 함수라고 소개되어 있지만 (p.55) 바뀐듯.
    • drain_action_queue() --> for + execute_one_command() 같은 역할을 한다.

 


  • 리스트의 명령어를 실행한 , 이벤트에 대한 파일 디스크립트 설정한다.
  • POLL 등록된 fd 이벤트를 기다리게 되고, 이벤트 발생시에 poll() 함수를 통해 이벤트를 처리한다. (p.45~46)


     

'Android' 카테고리의 다른 글

인사이드 안드로이드 Chapter5  (0) 2012.02.02
인사이드 안드로이드 Chapter4  (0) 2012.02.02
인사이드 안드로이드 Chapter3  (0) 2011.12.08
인사이드 안드로이드 Chapter1-2  (0) 2011.12.08
Linaro  (0) 2011.11.28
블로그 이미지

민둥

,

Chapter 03

init 프로세스

$ head Makefile

VERSION = 2

PATCHLEVEL = 6

SUBLEVEL = 39

EXTRAVERSION = .4

 

p.33 init 프로세스의 실행과정

 

  • kernel/init/main.c

 

--> asmlinkage void __init start_kernel(void)

--> static noinline void __init_refok rest_init(void)

--> static int __init kernel_init(void * unused)
 


(init=/init  같이 최상위 디렉토리에서 init 찾고)
 

--> static noinline int init_post(void)
 

(최상위 디렉토리에 없는 경우 /sbin, /etc, /bin 차례로 찾는다.)
 

 

  • system/core/init/init.c

 

--> int main(int argc, char **argv)
 


(부팅에 필요한 디렉토리들 생성 + 마운트)

 

 

p.36 init 프로세스의 주요 역할
 

  • 디바이스 드라이버 노드 생성
  • 자식 프로세스 종료 처리
  • 프로퍼티 서비스

 

'Android' 카테고리의 다른 글

인사이드 안드로이드 Chapter4  (0) 2012.02.02
인사이드 안드로이드 Chapter3 (1)  (0) 2011.12.08
인사이드 안드로이드 Chapter1-2  (0) 2011.12.08
Linaro  (0) 2011.11.28
Porting Android to x86  (0) 2011.11.23
블로그 이미지

민둥

,