Zygote
- 실행되면서 Dalvik 가상 머신을 초기화하고 구동시킨다.
- application이 실행되기 전에 실행된 가상 머신의 코드 및 메모리 정보를 공유 - app이 실행되는 시간을 단축.
- 특히 한정된 자원을 사용해야 하는 임베디드 기기에서 적합함

안드로이드에서 하나의 Application은 isolated 된 하나의 프로세스로 실행하게 됩니다. 안드로이드가 실행되면 zygote라는 최초의 Dalvik VM 프로세스 실행되는데 zygote는 부팅시에 많은 시스템 클래스 라이브러리들을 로드 하게 되며 새로운 Application이 실행될 때마다 fork() 함수를 통해 새로운 자식 프로세스를 생성하게 됩니다. Linux는 프로세스가 fork될 때 부모 프로세스의 주소 영역을 카피하는데 이것이 오버헤드가 심하여 빠른 fork를 위해 다른 방법들을 사용합니다. 대표적인 것이 COW(Copy On Write)인데 부모의 주소 영역을 자식 프로세스가 공유하다가 실제 자식 프로세스가 어떤 영역에 쓰기를 시작할 때 별도의 메모리(페이지)를 할당하는 식입니다. 



ZygoteInit

Dalvik VM --> ZygoteInit::main()
 
(1) registerZygoteSocket()
- 새로운 Android application의 실행 요청을 받기 위한 소켓 바인딩
- UDS (Unix Domain Socket)을 사용하며 init.rc에서 app_process를 실행할때 /dev/zygote으로 등록한 socket을 사용한다
(2) preloadClasses()
           preloadResources()
- Android Application Framework에서 사용할 클래스들과 리소스의 로딩
(3) startSystemServer()
- System Server 시작 - Android platform에 필요한 주요 네이티브 서비스를 실행한다
(SurfaceFlinger, AudioFlinger, MediaPlayerService, CameraService)
(4) runSelectLoopMode()
- 새로운 Android application 실행 요청에 대한 처리

'Android' 카테고리의 다른 글

Android GestureDetector  (0) 2012.06.12
Monkey Test 옵션 정리  (0) 2012.02.20
인사이드 안드로이드 Chapter4  (0) 2012.02.02
인사이드 안드로이드 Chapter3 (1)  (0) 2011.12.08
인사이드 안드로이드 Chapter3  (0) 2011.12.08
블로그 이미지

민둥

,

JNI (Java Native Interface) 
 

- Java와 C/C++간의 인터페이스를 가능하게 해주는 매개체

- Java class에서 C언어로 작성된 라이브러리에 포함된 함수를 사용하고 싶다거나, 반대로 C에서 자바 클래스 라이브러리를 사용하고 싶은 경우

(1) 빠른 처리 속도를 요구하는 루틴 작성

(2) 하드웨어 제어

(3) 기존 C/C++ 프로그램의 재사용

JNI 개발 순서
 

(1) Java 코드 작성

- method 선언은 Java에서, 선언된 method의 실제 구현은 C/C++에서 이루어 진다.

- native keyword로 native method 선언

- System.loadLibrary()에서 C 라이브러리를 로딩

  (윈도우: hellojni.dll / 리눅스: libhellojni.so) 

(2) Java 코드 컴파일

(3) C header 파일 생성

(4) C 코드 작성

(5) C shared library 생성

(6) Java 프로그램 실행


 

Camera

frameworks/base/core/jni/android/graphics/Camera.cpp

frameworks/base/graphics/java/android/graphics/Camera.java


AlarmManagerServie

frameworks/base/services/jni/com_android_server_AlarmManagerService.cpp



frameworks/base/services/java/com/android/server/AlarmManagerService.java




참고: http://blog.naver.com/PostView.nhn?blogId=iflowerpot&logNo=80119729013 

http://www.kandroid.org/board/board.php?board=androidsource&command=body&no=20 

http://blog.naver.com/PostView.nhn?blogId=oh4zzang&logNo=40111762322 



'Android' 카테고리의 다른 글

Monkey Test 옵션 정리  (0) 2012.02.20
인사이드 안드로이드 Chapter5  (0) 2012.02.02
인사이드 안드로이드 Chapter3 (1)  (0) 2011.12.08
인사이드 안드로이드 Chapter3  (0) 2011.12.08
인사이드 안드로이드 Chapter1-2  (0) 2011.12.08
블로그 이미지

민둥

,

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
블로그 이미지

민둥

,

Chapter 01

안드로이드 프레임워크 개요

Chapter 02

안드로이드 개발 환경 구축

 
 

p.14 이클립스 개발 환경 구축

 

 

p.20 HelloWorld application 작성

  • Android Project 생성
  • Android SDK and AVD Manager: 안드로이드 가상 머신 생성

 


 

 

'Android' 카테고리의 다른 글

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

민둥

,