260 likes | 500 Views
구글 안드로이드 개요. Naver linuxkernel26 운영자 : 박 철 (e2g1234@naver.com). Android. Software platform developed by Google for mobile phone Free of charge Open source (Apache License except for kernel) Packaging OS to upper layer applications such as browser http://code.google.com/android/
E N D
구글 안드로이드 개요 Naver linuxkernel26 운영자 : 박 철 (e2g1234@naver.com)
Android Software platform developed by Google for mobile phone Free of charge Open source (Apache License except for kernel) Packaging OS to upper layer applications such as browser http://code.google.com/android/ http://www.openhandsetalliance.com/ Initial screen Browser Map
Android SW platform • 구글의 전략 가시화 • 모든 하드웨어에 들어갈 수 있는 개방형 플랫폼 '안드로이드'를 무기로 웹 세상을 장악하려는 구글의 전략 • Smart phone 시장의 도래 • 현재 구글은 안드로이드 스마트폰에만 적용해 상용화 한 상태 • 2차 타깃 넷북 겨냥 • PC 업체들과 협력 중 • 셋톱박스 및 다양한 기기 • 올해 10월 열릴 일본 최대 전자 전시회 '씨텍 2009(CEATEC 2009)'에서 안드로이드를 탑재한 셋톱를 전시할 예정 • MS 의 폐쇄용 SW platform대비됨 • 개방형 오픈 SW platform • 안드로이드를 채택하는 기기가 무한 늘어날 수 있는 가장 큰 이유 • 핸드폰 시장 흐름의 재편 • 전반적인 임베디드 시스템의 변화 • 휴대폰 뿐 아니라 TV, 셋톱박스, VoIP단말, 디지털액자 등 다양한 기기에 탑재돼 시판될 전망이다. • 최근 미국의 주요 통신사는 안드로이드를 탑재한 집전화 서비스를 준비하고 있다고 밝히기도 했다.
SW platform 별 smart phone 출처 : omokomok.tistory.com
SW platform별 비교 출처 : omokomok.tistory.com
Program model CPU(S3C6410) Memory(DDR) loading Excute #include <stdio.h> int main() { printf(“Hello~ \n”); return 0; } Write back “Stack” Section hello.c (Source) Memory access “BSS” Section Reg arm-gcc (Compiler) “Data” Section excute Decode “Text” Section fetch PC runtime hello (ELF)
Smart phone이 등장하기 까지 전화 삐삐 Smart phone 핸드폰 무선전화
임베디드 시스템의 프로그램 모델의 특징 • Firm ware • 단일 프로세스 • Multi thread(MicroC/OS-II) • 멀티 프로세스 • OS영역과 Application 영역이 분리되지않음 • OS의 기능이 단순 schedule 기능제공 • 프로세스간 메모리보호가 되지 않는 시스템 • Multi process(linux) • 멀티 프로세스 • OS영역과 Application 영역이 분리됨 • OS의 기능이 schedule 기능 여러 가지 기능제공 • Multi process(Android) • Application의 기능 강화 • 자바 V M 및 프레임워크 기능 강화 • JAVA로 application 구현됨
Program model – firmware/muti-thread Multi-Thread(RTOS) Firmware Stack Stack Stack “Stack” Section ……………………………… ……… BSS “BSS” Section “Data” Section “Data” Section Text Text Text “Text” Section scheduler
Program model – Multi-process Multi-Process(linux) Multi-Process(android) application application application application application application Framework & VM middleware & Library Library scheduler scheduler kernel kernel
안드로이드 시스템의 구조 Application Area App1 App2 App3 Appn Application framework JAVA Core library Dalvik VM Middle ware Area C/C++ library bionic libc SW Interrupt System Call Interface Virture File System(VFS) Device file system General file system Socket file system Kernel Area Inet(AF_INET) Buffer Cache Network Subsystem Transport(TCP,UDP) Network(IP) Character Device Driver Block Device Driver Network Device Driver Device Interface Device Hardware
기존 커널의 확장 • S3C6410용 Kernel 2.6.27 안드로이드를 지원할 수 있도록 하기 위한 커널 확장관련 패치를 제공 • 커널 관련한 확장들은 다음과 같다. • Alarm • Low Memory Killer • Ashmem • Kernel Debugger • Binder • Power Management • Logger • Binder • IPC의 프로세싱 오버헤드와 보안 헛점을 해결하기 위해 Binder를 채택 • Power Management • 모바일 디바이스가 배터리 기반에서 동작한다는 사실과 해당 배터리의 용량제약이라는 상황에 대응하기 위한 구조
bionic libc • 독자적으로 만들어진 linker와 libc 사용 • 스탠다드 glibc, uclibc를 사용하지 않음 • C++ STL(Standard Templete Library) 지원하지 않음 • bionic libc의 장점 • 라이센스: user application에서 GPL문제 회피 • size: 약 200k, glibc(GNU version of libc)의 절반크기 • speed: 제한된 CPU power에서 동작
Android runtime • java runtime과 동등 레벨 • 프로세스가 동작되면서 library 호출할 때 사용 • 자바 어플리케이션에서 호출할 때 libc 기반의 C/C++ library를 호출할 때 runtime library를 호출 • dex.( Dalvik Executables (DEX)) 실행파일의 구조를 가지게 된다. 실행파일이 symbloic resolution을 통하여 함수를 가지고 있다가 library를 호출한다. • Android Runtime은 Dalvik VM과 Core libraries로 구성 • Android의 개발은 Eclipse의 ADT Plug-in을 통해서 Java로 컴파일 되고 class와 resource가 Dx 컨버터를 통해서 Android App(.apk)로 만들어지며 이 apk가 Dalvik VM위에서 동작하게 된다. • Dalvik VM은 작은 메모리에서도 최적화 되는 Dalvik Executable (.dex) 포멧 파일을 실행한다. • VM은 register-based이고, 'DX' 툴로 부터 .dex 포맷으로 변환된 자바 컴파일러로 부터 컴파일 된 클래스를 구동한다. • Dalvik VM은 쓰레딩과 저수준의 메모리 관리와 같은 기능을 위해 리눅스 커널에 기초한다.
Zygote(수정란) • Zygote를 통한 프로세스 관리 • 어플리케이션을 빠르게 구동하기 위해서 미리 fork 되어 있는 프로세스이다. • 시스템에서 exec() 호출을 통해 특정 애플리케이션을 실행하고자 하기 전까지는 중립적인 상태, 즉 특정 애플리케이션과 합체되지 않는 상태를 유지한다 • 안드로이드에서 프로세스를 생성하는 방식 • fork()와 execve()를 통하여 프로세스를 생성하는데 zygote를 통하여 프로세스가 생성되고 메모리를 공유하는 형식을 취는 것 같다.
Memory Map of User Space 0x00000000 0x00008000 app_process 0x40000000 Java apps and resource data etc.; *.apk,*.jar,*.ttf etc. No memory with execution attribute File mapping direction Shared libraries in native code; libc and libwecore etc. *.so files Some memory are of execution attribute File mapping direction 0xB0000000 /system/bin/linker Stack 0xBEFFFFFF
프로세스의 메모리 구조 • 통상적인 리눅스 • .so 모듈이 논리 메모리 공간의 저위 어드레스에서 고위 쪽으로 할당된다. • 이 할당을 실행하는 것은 ‘ld.so’프로그램이 일반적이다. • 40000000번지부터 공유 라이브러리나 파일을 순서대로 배치. • 안드로이드 • 공유 라이브러리가 논리 어드레스 공간의 고위 어드레스에서 저위 방향으로 확보 • 파일을 40000000번지부터 순방향으로, 라이브러리를 B0000000번지부터 역방향으로 배치 • 라이브러리를 로드하는 역할을 하는 것은 ‘linker’라는 명칭의 프로그램이다. • Dalvik VM용 영역을 별도로 확보 • 모든 애플리케이션 프로그램을 Dalvik VM으로 동작시키기 때문에 소비하는 메모리의 양이 늘어나기 때문
안드로이드 파일시스템 / var tmp system proc sys sbin etc data root system,dalvik,cache drm,logs,download data,app등 작업용 파일군 bin app frame- work lib usr,fonts,media etc,sounds lost+found 저작권 관리정보 로그 다운로드 결과 어플리케이션 데이터 Linux로써 사용 할 때의 shell 등의 커맨드군 어플리케이션 프로그램 Java의 라이브러리군 네이티브 코드 라이브러리군
안드로이드 파일시스템 • system, data가 추가 됨 • Dalvik VM 본체 • system/bin 디렉토리 있음 • 프로그램 resource • 일반적인 리눅스 usr/bin/ 저장 • 안드로이드 system/ bin/ 저장 • 쉘(Shell) 명령어 • 임베디드 리눅스 : BusyBox 통해 사용및 관리됨 • 안드로이드 : toolbox 통해 사용및 관리됨
안드로이드 개발자 분류 및 필요기술 • 1. 안드로이드를 탑재하는 시스템 계층 개발자 • ARM 프로세서 • 리눅스 커널 2.6 • 리눅스 디바이스 드라이버 • 기타 펌웨어 레벨 개발능력 • 2. 안드로이드가 탑재된 제품의 응용 개발자 • Java Programming Language • Eclipse • Dalvik JavaVM • WebKit • 기타 응용 개발 능력 • 3. 안드로이드를 이용한 웹 서비스 개발자 • 기존 웹 서비스 개발 능력 • 안드로이드 플랫폼에 대한 이해
감사합니다. http://cafe.naver.com/linuxkernel26