4. 시작점
● Anatomy & Physiology of an Android (2008 Google IO)
○ Patrick Brady (Google)
● Inside the Android Application Framework (2008 GIO)
○ Dan Morill (Google)
9. Timed GPIO(generic purpose I/O)
● Mike Lockwood (Google)
● 일정 시간동안 사용자영역에서 GPIO에 접근하기 위해 열어
둔 인터페이스
● 바이브레이터 등에 사용됨.
● drivers/staging/android/
○ timed_output.[h|c]
○ timed_gpio.[h|c]
10. Power Management
● 작성자: Google (iSad...)
● Suspend 전에 애플리케이션의 종료 기회 제공.
● kernel/power/ 디렉토리에 위치
○ suspend.c
○ userwakelock.c
○ earlysuspend.c
○ consoleearlysuspend.c
○ fbearlysuspend.c
11.
12. Ashmem (Anonymous shared memory)
● Robert Love (Google, Ex-Noveller)
○ Linux Kernel Developmen의 저자
○ Android의 Logger도 작성.
● 여러 프로세스 간의 데이터 공유를 위함.
● pmem과의 차이점은 "익명"이라는 점.
● mm/ashmem.c
16. Low memory killer
● Arve Hjønnevåg (Google, Ex-BeOSer)
● 리눅스 메모리관리
○ 사용량이 많은 프로세스 희생.
○ 다수 프로세스를 살리는 데 있음.
● 안드로이드 - 포그라운드 앱 우선
○ 프로세스마다 현재 상태 기록.
● driver/staging/android
○ lowmemorykiller.c
17. Low memory killer example (init.rc)
# 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.SECONDARY_SERVER_ADJ 2
setprop ro.HIDDEN_APP_MIN_ADJ 7
setprop ro.CONTENT_PROVIDER_ADJ 14
setprop ro.EMPTY_APP_ADJ 15
# Define the memory thresholds at which the above process classes will
# be killed. These numbers are in pages (4k).
setprop ro.FOREGROUND_APP_MEM 1536
setprop ro.VISIBLE_APP_MEM 2048
setprop ro.SECONDARY_SERVER_MEM 4096
setprop ro.HIDDEN_APP_MEM 5120
setprop ro.CONTENT_PROVIDER_MEM 5632
setprop ro.EMPTY_APP_MEM 6144
19. HAL (Hardware Abstraction Layer)
● 리눅스 커널 디바이스를 안드로이드로 부터 분리하기 위함
● 라이선스 문제
○ 리눅스 커널은 GPL - 공개해야 함.
○ 커널만 공개하고 하드웨어 드라이버 로직을 HAL로 분리
○ Google과 Apple은 자신들이 원하는 내용만 공개.
● 호환성 문제
○ 안드로이드는 리눅스 커널 드라이버 구조를 몰라도 됨.
23. Libraries
● Bionic C (Shinichiro Kwasaki-Hitachi)
○ Non-GPL Lib C, Very small
● WebKit (Don Melton-Apple, Martin Jones, Torben Weis)
○ KDE (KHTML) -> Apple (Webkit)
● Media Framework (StageFright)
○ OpenCore (PV) -> StageFright (Google, 보다 단순함)
● SQLite (D. Richard Hipp-Hipp, Wyrick & Company, Inc.)
○ 경량 DB (앱에 내장 되는 형태)
○ 최근에는 LevelDB로 대체 움직임
● Native Servers
○ SurfaceFlinger, AudioFlinger
39. Hardware Services
● Telephony Service
● Location Service
● Bluetooth Service
● WiFi Service
● USB Service
● Sensor Service
● NFC Service (Android 2.3.3)
41. Layer Interaction
There are 3 main flavors of Android layer cake:
● App -> Runtime Service -> Lib
● App -> Runtime Service -> Native Service -> Lib
● App -> Runtime Service -> Native Daemon -> Lib
42.
43.
44. Layer Interaction
There are 3 main flavors of Android layer cake:
● App -> Runtime Service -> Lib
● App -> Runtime Service -> Native Service -> Lib
● App -> Runtime Service -> Native Daemon -> Lib
45.
46.
47. Layer Interaction
There are 3 main flavors of Android layer cake:
● App -> Runtime Service -> Lib
● App -> Runtime Service -> Native Service -> Lib
● App -> Runtime Service -> Native Daemon -> Lib
48.
49.
50. Make world
● Official
○ AOSP (Android Open Source Project)
■ http://source.android.com/
● Custom
○ CyanogenMod (CM)
■ http://www.cyanogenmod.com/
○ CodeAuroraForum (CAF)
■ https://www.codeaurora.org/
● Groups
○ http://groups.google.com/group/android-contrib
○ http://groups.google.com/group/android-platform
○ http://groups.google.com/group/android-building