실력이 너무 좋다.
플랫폼 구조
소프트웨어 플랫폼이란 ? 소프트웨어의 주요구성요소, 구성요소간의 인터페이스, 중요동작방식 등의 주요 특징들을 결정짓는 모든 설계 구조
소프트웨어 플랫폼은 소프트웨어 개발에 있어 가장 영향력
소프트웨어 플랫폼 종류 : 윈도우, 리눅스, 닷넷, 자바
런타임(runtime) 이란?
안드로이드 소프트웨어 플랫폼?
모바일 장치를 위한 소프트웨어 집합체
계층적 구조 : 커널, 라이브러리,
런타임라이브러리,애플리케이션 프레임워크,
애플리케이션으로 적층
자바 플랫폼이라고 하지 않음
안드로이드 파일시스템 구조
일반 리눅스 파일시스템 구조와 다르다.
안드로이드 파일시스템 구조
일반 리눅스 파일시스템에 안드로이드 플랫폼 위한 파일 저장 폴더 추가
/data, /system 폴더 추가
/recovery 추가 : 안드로이드 2.2 버전
각각의 추가된 폴더에 어떤 내용이 들어있는지 확인 필요
커널 특징
Open source
리눅스 커널 2.6.x 에 안드로이드 커널 패치
내부 메모리관리, 프로세스 관리, 네트워킹, 운영체계
상위층 : 라이브러리, 달빅 런타임
하위층: 하드웨어 (기본장치 외의 하드웨어릏 모듈형식으로 동작)
사용자 모드로 동작하면 커널 버전이 갱신될 때마다
플러그인 방식으로 배포/사용이 편리
속도 느려지는 단점
라이선스
안정성 향상
우분투 리눅스 + 안드로이드 기능추가
Debian GNU/Linux 기본
무료로 다운로드
GPL, LGPL 라이선스
레드햇 리눅스 상업화 이후 독보적 마켓쉐어
커널 설정에서 다음 기능 추가
Alarm 기능,
공유메모리 (ashmem),
low memory-killer,
전력관리 (Power management),
바인더,
logger 등
커널 빌드 도구 변경
기존 임베디드 시스템은 ARM 사의 ABI (Application Binary Interface)
기반 gcc 컴파일러 사용
안드로이드에서는 ARM EABI (Embedded Application Binary Interface)
기반의 툴체인 사용
EABI?
안드로이드 일반 라이브러리
라이브러리 : C/C++로 제작
C/C++ 라이브러리 변경 : glibc -> BSD Unix의 libc->Bionic C
라이브러리가 동적 라이브러리 확장자(so)/system/lib 폴더에 위치
surface manager, media framework, sqlite, webkit, libc등으로 구성
안드로이드 일반 라이브러리 : surface manager
애플리케이션 생성화면 -> 프레임버퍼 저장(RAM) -> LCD 화면표시
LCD와 CPU 데이터 처리속도 차이: 프레임버퍼 저장후 일시에 LCD 출력
2D, 3D 표현
화면합성, 결합, 반투명 효과
안드로이드 일반 라이브러리 :
미디어 프레임워크 : PocketVideo OpenCORE 기반, MPEG4, H264, AAC
Sqlite : 개방형 관계형 데이터베이스
WebKit : 웹브라우저 기반 엔진, 화면 웹 내용, 오픈소스, 웹 관련 클래스 제공
glibc : GPL, 소스공개의무
libc : BSD, 공개의무 없음,
코드 경량,
libc를 플랫폼에 맞게 수정한 Bionic C lib,
프로세스마다 동적으로 적재, libc.so: 226KB의 경량 쓰레드
모든 라이브러리 코드가 bionic과 함께 컴파일
LibWebCore
OpenGL ES
FreeType
Audio Manager
안드로이드 런타임 라이브러리 :
컴퓨터 프로그램을 실행하는 동안의 기능을 추가하기 위하여 사용되는 특별한
프로그램 라이브러리
입출력, 메모리 관리, 산술함수 기능
일반 라이브러리와 차이는 컴파일러 제조사에 따라 다름
런타임 라이브러리는 컴파일러와 플랫폼에 종속
달빅(Dalvik) 가상머신의 지원으로 하드웨어 종속성 해결,
달빅은 405KB의 livdvm.so 라이브러리로 지원
안드로이드 런타임 라이브러리 : DalVik VM
달빅 가상머신
가장 신비스러운 곳 :미공개 소스
Interpreter, register based, 적은 메모리에 최적화된 가상머신,
banked 레지스터 기반 데이터 이동으로 속도가 빠름
일반자바 가상머신: stack based(PUSH, POP 사용)
자바 언어 사용하지만 선마이크로시스템스의 자바와는 다름(특허문제 때문)
선 마이크로시스템스 Java : 1-2바이트 길이 코드
안드로이드 Java : 4 바이트 코드, ARM 프로세서에 최적화,
4바이트 레지스터로 명령수행, 빠른 성능
안드로이드 런타임 라이브러리 : Dalvik VM
일반 자바 : 소스코드(.java) -> 자바 컴파일러 -> 클래스생성 (.class)
-> 가상머신에서 실행
안드로이드 자바 : 소스코드(.java) -> 자바 컴파일러 -> 클래스생성 (.class)
-> dx 사용 -> dex (최소 메모리로 최적화 )
-> Dalvik 가상머신에서 실행
tools> dexdump -d classes.dex
1. cmd 명령으로 명령창 띄운다.
2. D 드라이버로 이동하기 위하여 d:을 입력한다.
3. 안드로이드 SDK에 대한 환경 변수 설정이 되어 있지 않다면 “cd android\android-sdk\platforms\android-3\tools” 명령을 실행한다.
4. “dexdump -f D:\android\workspace\android\bin\classes.dex” 명령을 실행
<코드 11-1> 네이티브 서비스 초기화 코드
extern "C" status_t system_init()
{
LOGI("Entered system_init()");
sp
sp
LOGI("ServiceManager: %p\n", sm.get());
sp
sm->asBinder()->linkToDeath(grim, grim.get(), 0);
char propBuf[PROPERTY_VALUE_MAX];
property_get("system_init.startsurfaceflinger", propBuf, "1");
if (strcmp(propBuf, "1") == 0) {
// Start the SurfaceFlinger
SurfaceFlinger::instantiate();
}
// On the simulator, audioflinger et al don't get started the
// same way as on the device, and we need to start them here
if (!proc->supportsProcesses()) {
// Start the AudioFlinger
AudioFlinger::instantiate();
// Start the media playback service
MediaPlayerService::instantiate();
// Start the camera service
CameraService::instantiate();
안드로이드 플랫폼 부팅
안드로이드 부팅이 후 자바 서비스 시작 : 시스템 서버
/frameworks/base/services/java/com/ android/server/SystemServer.java
시스템 서버는 Native 서비스 외에도 다양한 서비스 지원
<코드 11-2> 시스템 서버에서 init2()와 스레드를 호출하는 코드
// And now start the Android runtime.
LOGI("System server: starting Android runtime.\n");
AndroidRuntime* runtime = AndroidRuntime::getRuntime();
LOGI("System server: starting Android services.\n");
runtime->callStatic("com/android/server/SystemServer", "init2");
// If running in our own process, just go into the thread
// pool. Otherwise, call the initialization finished
// func to let this process continue its initilization.
if (proc->supportsProcesses()) {
LOGI("System server: entering thread pool.\n");
ProcessState::self()->startThreadPool();
IPCThreadState::self()->joinThreadPool();
LOGI("System server: exiting thread pool.\n");
}
return NO_ERROR;
}
시스템 서버의 기타 서비스 목록
네트워크 상태 서비스NetStat Service,
연결 서비스Connectivity Service,
노티피케이션 매니저Notification Manager,
마운트 서비스Mount Service,
디바이스 스토리지 모니터 서비스
Device Storage Monitor Service,
위치 매니저Location Manager,
탐색 매니저 서비스Search Manager Service,
폴백 체크인 서비스Fallback Checkin Service,
배경화면 서비스Wallpaper Service,
오디오 서비스Audio Service,
핸드셋 옵저버Headset Observer 등
댓글 없음:
댓글 쓰기
국정원의 댓글 공작을 지탄합니다.