2GSM 발전방향

Similar documents
Microsoft PowerPoint - Mobile SW Platform And Service Talk pptx

모바일 안드로이드 아키텍처

(Microsoft PowerPoint - AndroG3\306\367\306\303\(ICB\).pptx)

HTML5* Web Development to the next level HTML5 ~= HTML + CSS + JS API

ESP1ºÎ-04

¨ìÃÊÁ¡2

서현수

Special Theme _ 모바일웹과 스마트폰 본 고에서는 모바일웹에서의 단말 API인 W3C DAP (Device API and Policy) 의 표준 개발 현황에 대해서 살펴보고 관 련하여 개발 중인 사례를 통하여 이해를 돕고자 한다. 2. 웹 애플리케이션과 네이

보안공학연구회

THE TITLE

1부

Microsoft PowerPoint Android-구조.애플리케이션 기초(1.0h).pptx

AGENDA 모바일 산업의 환경변화 모바일 클라우드 서비스의 등장 모바일 클라우드 서비스 융합사례

PCServerMgmt7

Microsoft PowerPoint - 01.Android-개요 done.pptx

Microsoft PowerPoint - chap01-C언어개요.pptx

임베디드시스템설계강의자료 4 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

PowerPoint 프레젠테이션

Microsoft PowerPoint - 13-em14-안드로이드.ppt [호환 모드]

KDTÁ¾ÇÕ-2-07/03

Mango220 Android How to compile and Transfer image to Target

untitled

Microsoft PowerPoint App Fundamentals[Part1](1.0h).pptx

PowerPoint 프레젠테이션

DE1-SoC Board

Microsoft PowerPoint SDK설치.HelloAndroid(1.5h).pptx

Mango-IMX6Q mfgtool을 이용한 이미지 Write하기

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

KDTÁ¾ÇÕ-1-07/03

Windows Embedded Compact 2013 [그림 1]은 Windows CE 로 알려진 Microsoft의 Windows Embedded Compact OS의 history를 보여주고 있다. [표 1] 은 각 Windows CE 버전들의 주요 특징들을 담고

이도경, 최덕재 Dokyeong Lee, Deokjai Choi 1. 서론

슬라이드 1

PowerPoint Presentation

Microsoft PowerPoint App Fundamentals[Part1].pptx

[Brochure] KOR_TunA

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx

안전을 위한 주의사항 제품을 올바르게 사용하여 위험이나 재산상의 피해를 미리 막기 위한 내용이므로 반드시 지켜 주시기 바랍니다. 2 경고 설치 관련 지시사항을 위반했을 때 심각한 상해가 발생하거나 사망에 이를 가능성이 있는 경우 설치하기 전에 반드시 본 기기의 전원을

untitled

강연자소개 대외활동 동호회설립및운영자 (2004 년 12 월설립 ) 운영진 고현철, 김재훈, 유형목, 와함께국내에몇개남지않은임베디드리눅스를전문으로하는 community. 현재가입자수약만 4 천여명

을풀면된다. 2. JDK 설치 JDK 는 Sun Developer Network 의 Java( 혹은 에서 Download > JavaSE 에서 JDK 6 Update xx 를선택하면설치파일을

슬라이드 1

LEICA C-LUX

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과

PowerPoint 프레젠테이션

6주차.key

안드로이드 서비스

4S 1차년도 평가 발표자료

커알못의 커널 탐방기 이 세상의 모든 커알못을 위해서

슬라이드 1

Assign an IP Address and Access the Video Stream - Installation Guide

슬라이드 1

Microsoft PowerPoint - eSlim SV [ ]

PowerPoint 프레젠테이션

<4D F736F F D205B4354BDC9C3FEB8AEC6F7C6AE5D3131C8A35FC5ACB6F3BFECB5E520C4C4C7BBC6C320B1E2BCFA20B5BFC7E2>

..,. Job Flow,. PC,.., (Drag & Drop),.,. PC,, Windows PC Mac,.,.,. NAS(Network Attached Storage),,,., Amazon Web Services*.,, (redundancy), SSL.,. * A

Secure Programming Lecture1 : Introduction

슬라이드 1

스마트폰 애플리케이션 시장 동향 및 전망 그림 1. 스마트폰 플랫폼 빅6 스마트폰들이 출시되기 시작하여 현재는 팜의 웹OS를 탑재한 스마트폰을 제외하고는 모두 국내 시장에도 출 시된 상황이다. 이들 스마트폰 플랫폼이 처해있는 상황 과 애플리케이션 시장에 대해 살펴보자.

<C7D1B1B9C1A4BAB8BBEABEF7BFACC7D5C8B82D535720C7C3B7A7C6FB20C7D8B9FD20536F4320C0B6C7D5C0B8B7CE2DB3BBC1F62E687770>

Agenda 오픈소스 트렌드 전망 Red Hat Enterprise Virtualization Red Hat Enterprise Linux OpenStack Platform Open Hybrid Cloud

슬라이드 제목 없음

Microsoft Word - 김완석.doc

Service-Oriented Architecture Copyright Tmax Soft 2005

PowerPoint 프레젠테이션

Microsoft PowerPoint - 11주차_Android_GoogleMap.ppt [호환 모드]

PowerPoint 프레젠테이션

±èÇö¿í Ãâ·Â

歯J PDF

Raspbian 설치 라즈비안 OS (Raspbian OS) 라즈베리파이 3 Model B USB 마우스 USB 키보드 마이크로 SD 카드 마이크로 SD 카드리더기 HDM I 케이블모니터

FMX M JPG 15MB 320x240 30fps, 160Kbps 11MB View operation,, seek seek Random Access Average Read Sequential Read 12 FMX () 2

Copyright 2012, Oracle and/or its affiliates. All rights reserved.,.,,,,,,,,,,,,.,...,. U.S. GOVERNMENT END USERS. Oracle programs, including any oper

<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D D382E687770>


Unix & Linux 개요 Company 서울대학교통계학과 2010년 2학기컴퓨터의개념및실습 ( Thanks to: cancho & facewhite from SPARC/KAIST, Bruce La Plante fro

( )부록

05Àå

스마트월드캠퍼스 교육교제

Microsoft Word - 임베디드월드_WindowsEmbeddedCompact7_rev

1217 WebTrafMon II

SQL Developer Connect to TimesTen 유니원아이앤씨 DB 기술지원팀 2010 년 07 월 28 일 문서정보 프로젝트명 SQL Developer Connect to TimesTen 서브시스템명 버전 1.0 문서명 작성일 작성자

KEY 디바이스 드라이버

ConnectCore i.mx53 / Wi-i.MX53 Freescale i.mx53 Cortex A8 system-on-module 네트워크가가능한 i.mx53 ConnectCore는새로운프리스케일 i.mx53 Application 프로세서기반인고성능 32-bit S

I What is Syrup Store? 1. Syrup Store 2. Syrup Store Component 3.

Adobe Flash 취약점 분석 (CVE )

Eclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 11 년 10 월 26 일수요일

Microsoft PowerPoint - Windows CE Programming_2008 [호환 모드]

Microsoft Word - ICT Report

WinCE 실험실습 #1

Microsoft Word - Armjtag_문서1.doc

User Guide

ODS-FM1

Intro to Servlet, EJB, JSP, WS

Solaris Express Developer Edition

Microsoft PowerPoint - eSlim SV [080116]

vm-웨어-01장


기술 이력서 2.0


Voice Portal using Oracle 9i AS Wireless

HTML5가 웹 환경에 미치는 영향 고 있어 웹 플랫폼 환경과는 차이가 있다. HTML5는 기존 HTML 기반 웹 브라우저와의 호환성을 유지하면서도, 구조적인 마크업(mark-up) 및 편리한 웹 폼(web form) 기능을 제공하고, 리치웹 애플리케이 션(RIA)을

Transcription:

1 st AESOP Embedded Forum Google Android Seminar 2009.10.31 서강대학교김대건관 K202 호 주최 : 이솝임베디드포럼 (http://www.aesop.or.kr) 후원 : 서강대학교 CAD & Embedded Systems Lab, 황선영교수 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 1

1 st AESOP Embedded Forum Google Android Seminar 이솝임베디드포럼소개및세미나개요 Track 1 : 10:00 ~ 10:50 고현철 ( 고도리, 이솝임베디드포럼운영진 )

이솝임베디드포럼소개 AESOP - An Entertainment Solution On a Platform 의약자 표준화된임베디드시스템 H/W, S/W 통합플랫폼제시를목표로설립된, 비영리단체 운영진및회원간의자발적참여로 H/W 및 S/W 플랫폼개발 모바일엔터테인먼트기기를위한표준플랫폼을추구 개발분야 Reference Platform Board Embedded Linux S/W Platform Windows CE RTOS 이솝임베디드포럼연혁 2005 년 표준화된임베디드시스템보드설계 / 개발을목표 로설립 2005 년이솝프로젝트설립후최초의 S/W, H/W 통합솔루션인 aesop S3C2440 프로젝트릴리즈 2006 년 aesop-lx800 프로젝트릴리즈, Embedded Linux 및 WinCE BSP 개발및배포 2007 년 aesop-mp2530f 프로젝트릴리즈, Embedded Linux 및 WinCE, RTOS BSP 개발및배포 2009 년 aesop-s3c6410 프로젝트릴리즈, GPE X-Windows RFS, WinCE BSP 개발및배포 2009 년 ODROID 공동구매추진 개발리소스공개정책 프로젝트에서발생하는모든 H/W 및 S/W 리소스는기본적으로공개를원칙 향후활동계획 차기 aesop 프로젝트용 H/W 및 S/W 플랫폼개발 2009 년말또는 2010 년초 aesop Embedded Forum 소스배포용 GIT 및 SVN / FTP 서버개설 버그트래킹시스템을구축하여 S/W Source 의체계적인관리예정 Google Android 관련독립사이트를개설 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 3

이솝임베디드포럼소개 2005( 설립 ) ~2008 년 회원약 2000 명 월간누적방문자 : 약 5,000 명 2009 년상반기 회원약 3000 명 월간누적방문자 : 약 10,000 명 2009 년하반기 회원약 5000 명 월간누적방문자 : 약 20,000 명이상 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 4

이솝임베디드포럼세미나소개 이솝임베디드포럼서버업그레이드및신규도입을위한기금모금목적으로개최 기존이솝임베디드포럼서버확장 프로젝트용 GIT, SVN, FTP 신규서버도입비용일부충당 그간연구되어온 Google Android 관련개발결과에대한공유 세미나진행준비비용 모금된기금은향후이솝임베디드포럼홈페이지를통해사용내역공개예정 세미나정보 서강대학교 Cad & Embedded System Labs의황선영교수님장소협찬 세미나일시 : 2009년 10월 31일 서강대학교김대건관 K202호 세미나참가예정인원 : 약 270명 강사진및운영진 : 약 5명내외 세미나개최시간 : 오전 10:00 ~ 오후 06:00 까지 세미나관련문의 고현철 ( 이솝임베디드포럼운영진, ghcstop@gmail.com) 김재훈 ( 이솝임베디드포럼운영진, jhoon_kim@nate.com) AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 5

세미나목차 10:00 ~ 10:50 : 오프닝 / Smartphone OS 의현황과 Android 의특징 강사 : 고현철 ( 이솝임베디드포럼운영진 ) 11:00 ~ 11:50 : Android 의 Application 개발 강사 : 박정님 ( 안드로이드 Application / JAVA 전문강사 ) 11:50 ~ 13:00 : 점심시간 13:00 ~ 13:50 : Android 구성요소및구조 / Linux kernel 과의관계 (Kernel Device Model 관련 ) 강사 : 고현철 ( 이솝임베디드포럼운영진 ) 14:00 ~ 14:50 : Android 의실제 Target 으로의 Kernel 포팅구조 강사 : 김재훈 ( 이솝임베디드포럼운영진 ) 15:00 ~ 15:50 : Android 의 Application 과미들웨어의동작구조 #1 (Audio/HAL 관련및 Binder 구조 ) 강사 : 고현철 ( 이솝임베디드포럼운영진 ) 16:00 ~ 16:50 : Android 의 Application 과미들웨어의동작구조 #2 (Camera/Surface 관련및실제 Camera code flow) 강사 : 고현철 ( 이솝임베디드포럼운영진 ) 17:00 ~ 17:50 : Android Power Management 기법 강사 : 최종환 (Linux/Android Porting 전문가 - Linux DVR/Qualcomm MSM7xxx Android Porting) AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 6

1 st AESOP Embedded Forum Google Android Seminar Smart Phone 의동향과 Google Android Track 1 : 10:00 ~ 10:50 고현철 ( 고도리, 이솝임베디드포럼운영진 )

1 st AESOP Embedded Forum Google Android Seminar SmartPhone 의개요 Track 1 : 10:00 ~ 10:50 고현철 ( 고도리, 이솝임베디드포럼운영진 )

Smart Phone 의개요 Smartphone = PDA + Cell phone 최근 (2005 년후반 ), 많은제조사들이 PDA 와휴대폰의경계가모호한제품들을생산하기시작 이러한제품을 Smart Phone 으로부르기시작함 = + AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 9

Smart Phone 의개요 Smartphone 의특징 기존의휴대폰과는다른 PC 와유사한향상된기능을제공하는휴대단말이다 (PC-mobile Handset convergence) Smartphone 에대한산업적인정의는없음 완전한체계적인표준인터페이스를제공하는운영체제와응용프로그램개발자를위한 platform 을제공하는업체도있지만 간단하게 phone 기능에 e-mail, Internet, e-book 등과같은기능을추가한업체도있다. 이경우내장형키보드를지원하거나, 외부키보드와 VGA connector 를제공하는경우도있다. 근래의추세 (2007~2009) 더욱강력한 SoC(System on Chip) 이등장 ex> ARM11 메모리단가가낮아짐 큰 LCD 등과표준화된 Open operating system 이등장하게됨 위와같은영향들때문에 smartphone 에대한요구사항이늘어나게됨. AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 10

Smartphone Market 전세계스마트폰의사용률증가현황 WW Smartphone OS Share 80% 60% 40% 20% 0% 2008 년 5 월 2008 년 6 월 2008 년 7 월 2008 년 8 월 2008 년 9 월 Symbian Window s Mobile RIM Palm iphone AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 11

Smart phone 수요증가의이유? 휴대단말의가격이싸지고기능이증가 SoC 발전속도가가속도가붙기시작함 칩벤더의기능가격경쟁때문에기능의향상이근래 (2007~2009) 폭발적으로증가함 (ex> Samsung S5PC100 / TI OMAP 3530) 스마트폰의시장점유율은 2012 년에 21% 정도가될것으로예상 (Sources: Jupiter Research 2007) Internet 의발달 네트워크를통한인터넷접속량의증가 WIFI와같은기존의통신망의발달 인터넷서비스의발전 화려한 Multimedia 에기초를둔 web 기반서비스의발전 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 12

1 st AESOP Embedded Forum Google Android Seminar Smartphone Hardware Platform Track 1 : 10:00 ~ 10:50 고현철 ( 고도리, 이솝임베디드포럼운영진 )

Smartphone Hardware 의구성 일반적인 Smartphone 의하드웨어는다음과같은구성을갖는다. CPU 주로 ARM Core 를사용한다 TI OMAP, Marvel PXA 계열, Samsung 의 S3C64XX, S5PCXX, Qualcomm Clock speed 는대략 300Mhz ~ 1GHz 까지 Memory 데이터전송량이늘어남에따라 Mobile DDR 과 DDR2 SDRAM 을주로사용하기시작함 Display 구성목적과용도에따라다양한 LCD 를사용하나, 근래에는 3.5 (320x480) LCD panel 을많이사용 보조저장장치 가장많이사용되는저장장치는 SD card AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 14

Smartphone Hardware 의구성 휴대폰통신을위한통신모뎀모듈 CDMA, GSM 무선인터넷사용을위한 WIFI 모듈 Camera GPS 등등 스마트폰하드웨어구성에서중요한점 기능과소비전력의균형 (ex> WIFI) AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 15

ARM Based Smart Phones iphone 620Mhz ARM1176, underclocked to 412 Mhz Palm Treo 750 300Mhz Samsung S3C2442A Nokia N Series TI OMAP 2420 Picture source: http://onlyumpc.com/, http://nokia.com AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 16

Smart Phone Hardware 의예 (iphone) AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 17

Smart Phone Hardware 의예 (HTC G1) AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 18

1 st AESOP Embedded Forum Google Android Seminar Smartphone Software Platform Track 1 : 10:00 ~ 10:50 고현철 ( 고도리, 이솝임베디드포럼운영진 )

Smart Phone Software Platform 일반적으로 Smartphone 에서제공해야할 Software Platform 의기능들은다음과같다. System platform 을개발하기위한 BSP 가제공되어야함 Mobile Device 를위한 kernel/device driver 등의코드들 ex> ARM CPU 를위한 platform 관련코드들 Application 개발에대한 solution Application Programming Interfaces(APIs) Software development libraries Programming tools 부가적으로실제하드웨어와유사하게동작시켜볼수있는개발환경 Emulator ex> Android 의 QEMU 기반의 Goldfish platform ex> Nokia N series 의개발환경인 Maemo AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 20

스마트폰운영체제의점유율 iphone OS, 7% Linux, 5% RIM BlackBerry, 11% Symbian OS, 65% Windows Mobile, 12% Source: wikipedia AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 21

스마트폰운영체제의종류와특징 iphone OS (Apple) BlackBerry OS (RIM) Window Mobile (Microsoft) Android (Google) Platform Closed Closed Open Open Open Symbian (Nokia) Source Code Closed Closed Closed Open Open (in future) Q2 WW Market Share (Gartner) Smartphone traffic share (AdMob) Pros 2.8% (1) 17.4% 12.0% n/a 57.1% WW: 4% US: 16% Early momentum Data hungry early adopters Powerful distribution channel WW: 11% US: 31% Strong reach (particularly in US) Issues Apple dependant BB dependent Distribution Application ecosystem >3K apps (~20% free) More than 1M installs in only a few months Fewer free apps BB Application Center being developed for Storm WW: 13% US: 29% Manufacturer / carrier agnostic Distribution >18K apps Skymarket to launch in 2009 n/a WW: 64% US: 2% Manufacturer / carrier agnostic Open source innovation Late to market Uncertain consumer demand Android Market announced $3.8MM awarded in Developer Challenge Massive global reach Open source innovation Limited reach in US Distribution >10K apps Claims >90MM installs over last 2 years AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 22

iphone OS (Apple) Pros: 고정적인매니아계층과얼리아답터기반 1000 만대이상의아이폰이판매 전체스마트폰시장의 3.8% 점유 ) 성공적인오픈마켓시스템을구축 3000 개이상의어플리케이션 1000 만회이상의다운로드기록 앞선테크놀러지를적용 Issues: 개발자에게있어서시스템에접근이제한적 오픈마켓의운영정책에따라다운로드조회수가민감하게반응 오픈마켓이애플의정책에매우의존적 애플의하드웨어플랫폼에서만동작 Recent news / developments: 애플은 iphone 기반의응용프로그램및 H/W 개발에 NDA 를요구 Development resources: http://developer.apple.com/iphone/index.action http://iphoneincubator.com/blog/ AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 23

Windows Mobile Pros 수많은사용자들이존재 전체미국스마트폰트래픽의 30% 를차지 전세계스마트폰트래픽의 13% 를차지 제조업체에의존적 >18000개이상의응용프로그램들이존재 IssuesRecent news / developments: 마이크로소프트는 09 년 2 분기에 Windows Mobile 7 런칭예정 Windows 7 은멀티터치인터페이스등신기술지원예정 Developer resources: http://www.microsoft.com/windowsmobile/enus/business/developers.mspx AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 24

Google Android Pros: 오픈소스 제조업체에의존적이지않음 다양한신기술들을지원 (e.g., touchscreen, GPS, accelerometer, video and still cameras) Issues: iphone 에비해늦은시장출시 iphone 의발전절차를답습해가는상태 근래 (2009 년 3 분기 ) 에들어 Application store 에많은 application software 가등장하기시작함 ( 약 2000 개정도 ) 폭발적인성장세지만, 아직은시장장악력이약함 (Embedded Linux 의다양성이문제 ) Recent news / developments: 1 st Android phone (T-Mobile G1) to go on sale on Oct. 22 Sept. 08: Officially released v1.0 of SDK in Sept Aug 08: Awarded $3.75MM to 20 developers in the Android Developer Challenge Developer resources: http://android-developers.blogspot.com/ http://code.google.com/android/documentation.html AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 25

Symbian (Nokia) Pros 전세계시장에서통용 전체스마트폰트래픽의 62% 를점유 전제스마트폰판매량의 57% 에 Symbian OS 가탑재 안드로이드와비슷한오픈소스정책으로선회 Issues 미국시장에최적화되어있음 iphone 에비해응용프로그램의개발이어려움 Recent news / developments: 2009 년 Symbian 의오픈소스프로젝트진행 Developer resources: http://www.forum.nokia.com/main/resources/technologies/symbian/ AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 26

Maemo (Nokia) Picture source: http://www.gnuton.org AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 27

Maemo (Nokia) Pros Internet Tablet 전용 OS platform 으로개발됨 Linux 기반 (Debian linux & GNOME framework 기반 ) : X-windows 시스템기반 2005 년 Nokia Internet Tablet N770 Model 개발시개발 (Version 1.1) 2007 년 N810 출시 2009 년 Nokia N900 에적용되면서 Internet appliance 와 Smart Phone 으로적용 주요개발사로영국의 OpenHanded (Matchbox windows manager 개발사, 2008 년하반기에 Intel 에인수됨 ) 사와 Mozilla 재단 (Mini-Mozilla 가 Nokia 의후원으로개발 ) 이있음 Maemo operating system 과 Maemo SDK 로구성되어있음 안드로이드와비슷한오픈소스정책 Issues Android 에대한대항마가될가능성이가장높음 X-Windows System 기반이므로기존의 PC 용의 Application 이거의수정없이동작함 QEMU 를이용한개발환경지원 ( 예전의 Scratchbox 시스템이 Maemo 개발환경으로변경 ) AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 28

Openmoko (Openmoko Inc.) Pros Linux based mobile telephone operating system open source mobile phone 을목표로탄생한오픈소스단체서부터시작 하드웨어도생산을하기시작함 : Neo 1973, Neo Freerunner Linux 기반 (GTK+/Matchbox framework 기반 ) : X-windows 시스템기반 주로 OpenEmbedded 의시스템을적용하였음. 100% 오픈소스정책 Issues Phone 하드웨어가대략 1 만대정도판매가됨 유럽에서의호응도는좋은편이었지만, 여러가지문제로현재는하드웨어생산에어려움이생김 (2008 년도말의금융위기에직격탄을맞은형태 ) X-windows 개발환경이므로개발에거의어려움이없이개발할수있는환경임 몇가지심각한문제등을해결하면 ( 부팅속도느린부분, 하드웨어 3D 가속기등등 ) 가장이상적인 Linux Mobile Phone OS 에근접한형태를보여줌 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 29

Mobile Software Platform 의비교 독점적인비공개시스템 Microsoft Smartphone, Palm OS, BREW 등은많은부분에제약을갖는 API 를제공 시스템내부는공개되지않음 Open Platform( 주로 Linux) 다양한하드웨어에다양한형태로적용이가능한시스템 기존의 Embedded Linux 가적용이된시스템의메인 GUI system 으로적용이가능 단점으로는다양한하드웨어에적용이되는경우가많으므로 Application Store 에서다운로드받은 Application 이특정하드웨어에서만동작하는경우가생김 ex> HTC hero phone 에서게임에뮬레이터가동작할경우의방향키문제? AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 30

1 st AESOP Embedded Forum Google Android Seminar Android 의 Application 개발 Track 2 : 11:00 ~ 11:50 박정님 (Android Application / JAVA 전문강사 )

세부목차 Android Architecture Android Application 실행구조 Activity Service ContentProvider BroadcastReceiver Web Communications AIDL & Binder JNI AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 32

Android Architecture AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 33

Android Architecture SW 의흐름 구조적프로그램기법 기능 ( 함수 ) 단위의프로그램으로 SW를활성화시키는데기여 C언어 정보공학프로그램기법 구조적프로그램으로 SW가활성화되어지자, 많이 Data가발생되게된다. Data에대한처리를중심으로구현하는기법 DBMS가발달하게된다. 객체지향프로그램기법 기능과 Data 를분리하여작업을하다보니 Coupling 이많아지게되고, 유지보수성의심각한문제를가져오게된다. Object= 속성 (Data)+ 기능 (Method) Object 와그들의관계로 SW 를구성하는기법 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 34

Android Architecture SW 의흐름 ( 계속 ) CBD 프로그램기법 재사용성의증가를위해실행가능한물리적묶음단위인 Component 중심개발 Framework 기반의프로그램기법 품질좋은 SW 개발을위한 SW 기본 Architecture 를미리프로그래밍하여제공 개발기간단축, 재사용성증가, 유지보수성증가, 리스크감소 Pattern 기반의프로그램기법 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 35

Android Architecture 용어정리 Component Framework Object-Oriented Encapsulation Inheritance Polymorphism 설계지침 Cohesion Coupling AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 36

Android Architecture AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 37

Android Architecture Android Platform 관련기술 Linux Java XML Tool : Eclipse AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 38

Android Architecture AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 39

Android Application 실행구조 MyActvity.java ~.xml MyActvity.clas s classes.dex R.java R.class resources.ap_ MyActivityApp. apk AndroidFamework Core Lib Libraries Dalvik VM Linux Any Board MyActvityApp.ap k AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 40

Activity 사용자와의 interaction 을수행할수있는한장의화면 View 를상속받은 UI Component 를이용하여화면을설계한다. Android Framework ActivityManager Context oncreate() onstart() Activity MyActivity oncreate() onstart() AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 41

Activity Life Cycle AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 42

Service 시간이정해져있지않고 background 로실행되는애플리케이션컴포넌트 사용자와의 interaction 이없다. AndroidManifest.xml 패키지에 <service> 로등록되어있어야한다. Context.startService() 와 Context.bindService() 를통해실행된다. 리소스를많이사용하거나, 네트워크를사용하는경우별도의 Thread 를통해동작할수있다. 파일다운로드애플리케이션 Media Player 애플리케이션 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 43

Service Android Framework ActivityManager Activity Context ContextWrapper Service oncreate() onstart() ondestroy() // ServiceClient intent.setcomponent( MyService ); startservice(intent); stropservice(intent); MyService oncreate() onstart() ondestroy() AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 44

Service AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 45

ContentProvider ContentProvider 를이용하여공유할데이터베이스를접근하도록한다. <<abstract>> ContentProvider Application C Application B Application A ContentResolver ContentResolver ContentResolver NotesDbAdapter DatabaseHelpe r <<abstract>> SQLiteOpenHelp er SQLiteDatabas e Notes 공유데이터 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 46

BroadcastReceiver Broadcast 의경우 System 에서제공하는 broadcast Timezone 변경 Battery 소모상태통지등 애플리케이션에서사용하는 broadcast 경우 Data download 완료, 내용업데이트, 서비스실행, Activity UI 업데이트등 BroadcastReceiver A componet that does nothing but receive and react to broadcast announcement. UI 를표시하지않지만, 정보를받는 Activity 를실행하거나 NotificationManager 를사용 ( 백라이트, 진동, 음악등 ) BroadcastReceiver 의구현 BroadcastReceiver 클래스를상속 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 47

BroadcastReceiver Android Framework AlarmManager BroadcastReceiver onreceive() MyReceiver onreceive() AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 48

Web Communications Browser HTML XML JavaScri pt Web Container Android Application HTML XML JavaScrip t Android AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 49

AIDL & Binder ServiceClient bindservice (Intent, ServiceConnection) +conn: ServiceConnection ServiceConnection -myservice : IMyService onserviceconnected (ComponentName, IBinder) onservicedisconnected (ComponentName) IMyService getstatus():int Process A Service MyService oncreate() ondestroy() -servicestub:imyservice.stub oncreate() ondestroy() onbind(intent) : IBinder IBinder Binder IMyService IMyService.Stub getstatus() : int Process B getstatus():int MyServiceStubImpl getstatus() : int AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 50

AIDL & Binder (Callback) AIDLClient bindservice (Intent, ServiceConnection) +conn: ServiceConnection ServiceConnection -myservice : IService onserviceconnected (ComponentName, IBinder) onservicedisconnected (ComponentName) IBinder Binder valuechanged() ICallback.Stub RealCallback ICallback valuechanged() Service AIDLService -servicestub:iservice.stub oncreate() - RemoteCallbackList ondestroy() <ICallback> oncreate() ondestroy() onbind(intent) : IBinder IBinder Binder getvalue() : int getvalue() : int IService.Stub RealService IService getvalue():int valuechanged() Process A IService.aidl ICallback.aidl IService.aidl ICallback.aidl Process B AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 51

JNI Java Application 에서는 C, C++ 로구현된 function 이호출가능하다. // JNIClient.java public native String callnative(); // Imp.c jstring Java_JNIClient_ callnative( JNIEnv* env, jobject thiz ) { } //. AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 52

JNI (Java Native Interface) 구현된 C function 을사용하기위해서는컴파일되고, 실행가능한형태의실행라이브러리필요 Android NDK 가제공 java 클래스생성 native 로 method 구현 사용 So 라이브러리파일생성 javac 이용 compile Cygwin 이용컴파일 javah 이용 Header file 생성 Header file 이용 C 함수구현 구현된 header file 구현된 C 라이브러리 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 53

1 st AESOP Embedded Forum Google Android Seminar 점심시간 점심시간 : 12:00 ~ 12:50 이솝임베디드포럼

교내및교외스넥코너위치 현재위치 ( 김대건관 ) 후문 대흥역방향으로 100m 직진식당가 곤자가프라자 햄버거및김밥, 편의점등 학교정문앞식당및스넥 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 55

1 st AESOP Embedded Forum Google Android Seminar Android 구성요소및구조 / Linux 와의관계 Track 3 : 13:00 ~ 13:50 고현철 ( 고도리, 이솝임베디드포럼운영진 )

1 st AESOP Embedded Forum Google Android Seminar Introduction to Android Track 3 : 13:00 ~ 13:50 고현철 ( 고도리, 이솝임베디드포럼운영진 )

Android 소개 모바일소프트웨어개발을위한공개개발환경 OS, 미들웨어, 어플리케이션이완전히분리된구조 Open Handset Alliance (OHA) 프로젝트 리눅스운영체제기반 Linux kernel v2.6.25 이후버전지원 자바기반의손쉽고빠른개발환경지원 Emulator 환경지원 Mac, Windows, Linux Apache 2 라이선스기반 License 부분에서다시설명 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 58

Android 역사 2008 년 T-Mobile 는 Android 기반첫 Smartphone 을발표 2008 년 8 월 T-Mobile 은 Google Android 를사용한 HTC Dream 의 Android Phone 을발표 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 59

Android 특징 #1 Application framework. 어플리케이션의재사용과교체가가능 Dalvik Virtual Machine 모바일장치를위해최적화된 JAVA 기반 Virtual Machine Integrated Browser WebKit 엔진기반의웹브라우저탑재 Optimized Graphics 2D 그래픽라이브러리및 OpelGL ES 1.0 기반의 3D 그래픽엔진라이브러리제공 SQLite SQLite 기반의데이터베이스엔진제공 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 60

Android 특징 #2 Media Support 다양한오디오, 비디오및이미지포멧지원 (MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF 등 ) GSM 통신모뎀, 블루투스, EDGE, 3G and Wifi 및 GPS 등을지원 리눅스커널및하드웨어에의존적 유용한개발환경을지원 디버깅을위한 Eclipse IDE 기반의디바이스애뮬레이터를지원 메모리및성능프로파일링기능지원 Eclipse IDE 에기반한 x86 기반의크로스개발환경지원 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 61

안드로이드오픈마켓 안드로이드개발자는 Google 의오픈마켓에서제작한어플리케이션을공개및판매가능 Google 의 YouTube 와비슷한인터페이스제공 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 62

iphone 과 Android 의 App. Market 의비교 사용현황 2009/08/27 미국 AdMob 조사결과 iphone App Store: 약 1억 9800만달러 iphone의경우 : 1억 2500만달러추정 ipod touch: 7300만달러추정 Android Market: 약 500만달러 조사 user수 Android: 390 명, iphone: 380 명, ipod touch: 347 명 유료 application 다운로드비율 Android: 19%, iphone: 50%, ipod touch: 40% 1 달평균지불금액 Android: 8.63 $, iphone: 9.49 $, ipod touch: 9.79 $ AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 63

iphone 과 Android 의 App. Market 의비교 iphone App Store iphone과 ipod touch를위한 Application store 15000개이상의 application과 500만번이상의다운로드횟수기록 고정된 Hardware와 Android에비해오래된역사 Android App. Market 현재사용할수있는 Hardware 가한정되어있음 초기에는빈약한 application 개수였으나, 현재는 2~3000 개정도의 Application 존재 인기상위 application 은고전게임 Emulator 리눅스의장점 하드웨어가고정적이지않으므로, 앞으로는제품별 application market 으로발전될가능성이높음 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 64

Open source License 널리사용되는 Open source license 는다음과같다. GPL v2 v3 LGPL(Lesser GPL) Library GPL BSD, Apache license MPL(Mozilla Public License) AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 65

1 st AESOP Embedded Forum Google Android Seminar Android 구성요소및구조 Track 3 : 13:00 ~ 13:50 고현철 ( 고도리, 이솝임베디드포럼운영진 )

Android : Kernel and Frameworks Android 는 GNU/Linux 가아니 Android/Linux 를사용 Kernel Linux Kernel 2.6.27 + Patches Patches : ashmem, binder, power manager, low memory Killer, Kernel Debugger ARM EABI 지원 Source : http://git.android.com Frameworks HAL(Hardware Abstraction Library) Android 가하드웨어에접근하기위한인터페이스제공 Android core framework Binder & Ashmem 사용에대한부분 Libraries & JVM 등등 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 67

Android 의전체구조 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 68

Android Kernel Android 에맞게수정된리눅스커널 Android 에서 HAL 과인터페이스 하드웨어를구동하기위한디바이스드라이버 메모리관리 프로세스관리 네트워크관리 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 69

Android kernel 의특징 일반리눅스커널에추가된부분 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 70

Low memory killer Android system 의 resource 부족시동작 Process 그룹당우선순위를주어, 우선순위가낮은그룹의프로세스를한꺼번에해제 메모리부족시 process 들을강제로종료시키는역할을한다 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 71

Android Libraries C/C++ Libraries Java 와인터페이스를하기위해존재 Surface Manager UI Windows 제어를담당 2D/3D 그래픽라이브러리를포함 멀티미디어코덱, SQLite DB 엔진, WWW 엔진을포함 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 72

Surfaceflinger/Audioflinger AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 73

Android : Display & Multimedia SurfaceFlinger 어플리케이션의 2D/3D Surfaces들을 Framebuffer에서의구현을제공 2D/3D Hardware 가속기를사용하여, blit, rotate, scale, blend 등의표현이가능 OpenGL ES Library Hardware 기반의 OpenGL 가속기능을사용할수있다. OpenCORE 기반의 Media Framework 오디오및비디오와이미지코덱을지원 Hardware / Software 코덱과결합하여사용 OpenMAX IL 인터페이스를사용 AudioFlinger 어플리케이션에서오디오기능을제공 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 74

Android Runtime JAVA Runtime 과동등한레벨 프로세스가동작되면서 Library 를호출할때사용 JAVA 어플리케이션에서 Libc 기반의 C/C++ Library 를호출할때 Runtime Library 를호출 Android 는 Dex.(Dalvik Executables (DEX)) 실행파일의구조를사용, 실행파일이 Symbolic Resolution 을통하여함수를가지고있다가 Library 를호출 Android Runtime 은 Dalvik VM 과 Core Libraries 로구성 Android 의개발은 Eclipse 의 ADT Plug-in 을통해서 JAVA 로컴파일되고, Class 와 Resource 가 Dx 컨버터를통해 Android App(.apk) 로변환되어 Dalvik VM 위에서동작 Dalvik VM 은작은메모리에서도최적화되는 Dalvik Executable(.dex) 포멧파일의실행을지원 Dalvik VM 은스레딩과저수준의메모리관리지원을위해리눅스커널을이용 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 75

Android Runtime Android JAVA Runtime 의구조 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 76

Android Runtime Dalvik VM 소개 비표준 JAVA Virtual Machine Android SDK 로는 Java 소스를 Dalvik 용 bytecode 로직접컴파일이불가능 DEX File 포멧의 Application 을수행 DX 툴을사용하여자바의.class 파일을 Dalvik 용 bytecode 로변한하여실행코드를생성 C++ 기반의 Class 보다작고, 호환성이좋음 SUN 의라이선스정책에따른라이선스비용을회피하기위하여개발 JAVA 는 GPLv2 하의배포된오픈소스였으나 Java ME 에서예외가발생, 핸드셋에 JAVA 를탑재하기위해서는라이선스비용발생 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 77

Application Framework API 기반의인터페이스를제공 Activity Manager 경우 Android 어플리케이션의수명주기를관리 View system 표준 widget 담당 Window Manager 모든응용프로그램과관련된화면담당 Package Manager 시스템에서동작중인응용프로그램들의정보담당 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 78

Applications 사용자어플리케이션을 Android 에빌트인가능 용도에따라교체사용가능 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 79

Android 개발환경 Eclipse, Emulator, Target Device 로구성 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 80

The RIL Shim Layer Radio Interface Layer(RIL) HAL은 Android TelephonyManager와 baseband modem 간의인터페이스를제공 Voice, Data, SMS, SIM, SIMToolkit Android는 RIL 기반에서표준 AT 커멘드를지원 RIL API 75개의표준커맨드와 17개의추가커맨드를지원 Android는 GSM TS 27.007 표준을반영 AT 커맨드기반의다른프로토콜도이용가능 RIL 의개발예정사항 특수한 AT 커맨드추가제공 ( 예 :JCDMA, O2 Homezone) Qulcomm 에서는 CDMA 및 CDMA-GSM Multi-mode 지원을위해작업중 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 81

1 st AESOP Embedded Forum Google Android Seminar Linux Operating System 개요 Track 3 : 13:00 ~ 13:50 고현철 ( 고도리, 이솝임베디드포럼운영진 )

리눅스시스템의분화 MULTICS(Multiplexed Information & Computing Service) (1960, Bell 연구소 /AT&T, 속도가느림 ) Ken Thomson, C 언어와어셈블리어, Dennis Ritche AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 83

Linux 의시작과인물 리누스토발즈 (Linus Torvalds) - 최초의리눅스커널을만듦 - 리눅스소스코드를 GNU 의 GPL 에따라인터넷에공개 리차드스톨만 (Richard Stallman) -GNU 프로젝트의리더로 FSF (Free Software Foundation) 를설립. - 카피레프트 (CopyLeft) 주장 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 84

리눅스와 GNU GNU (GNU s not Unix) 80 년대초반리차드스톨만 (Richard Stallman) 에의하여시작 GPL (GNU Public License) GPL 에의거한모든소프트웨어는무료 변경사항을포함해서재판매하는것은허용하나소스는공개해야함 프로그래머는자신의소프트웨어로발생하는어떤위험이나손해에대한법률적책임이없음 Linux 에 gcc( 컴파일러 ), emacs( 편집기 ) 등을이식 BSD 의많은유용한유틸리티를포함하게하는계기가됨 리눅스는 GPLv2 에의거하여배포 License 의종류 : GPL, LGPL, BSD, MPL 등등 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 85

리눅스특징 모놀리틱커널구조 (monolithic) 다양한컴포넌트로구성된거대하고복잡한프로그램 마이크로커널구조와설계철학이상이함 모듈지원 전통적인유닉스커널은정적 (statically) 으로컴파일및링크 동적로딩및제거가가능한커널코드제공 커널스레드제공 주기적으로수행되는커널함수를지원 다중프로세서지원 SMP(symmetric multiprocessing) 지원 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 86

리눅스 Kernel Architecture AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 87

리눅스 Kernel Merge 기간 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 88

리눅스의장점 목적에맞게컴포넌트커스터마이징가능 GPL 에따라서소스코드의수정및배포가가능 저가의하드웨어플랫폼에서수행 4MB 의 Intel 80386 시스템에서네트워크서버구축가능 다른운영체제와호환성이뛰어남 에뮬레이터를통한윈도우애플리케이션수행 POSIX 준수에따른유닉스애플리케이션의포팅이용이 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 89

리눅스의단점 표준화되어있지않음. 근래는각회사에서참여하고있어서, 단일화되는경향이있음 (ex> IBM) 현재도개발되고있는운영체제이며, 따라서운영교육이나업그레이드등의사후관리가어려움 복잡해지고, 버전별 Documentation 이잘되지않음 ) Linux 는컴퓨터에대한많은지식을요구함으로써자발적정신으로만들어지는성격을가지므로단순한문제는사용자스스로해결해야함 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 90

임베디드리눅스를선택하는이유 코드품질과신뢰성 모듈성과구조, 수정편의성, 확장성 코드가용성 리눅스의컴포넌트대부분은 GNU 일반공개라이센스로배포 소스코드에문제가있다면자유소프트웨어커뮤니티에서해결 하드웨어지원 폭넓은하드웨어를지원하지만최신디바이스에대해서는늦음 근래에는가장최신디바이스가먼저포팅됨 (SoC 회사의입장변화 ) 통신프로토콜과소프트웨어표준 다른 OS 보다풍부한통신네트워크기능을지원과표준을따름 대부분의임베디드 OS 에서의네트워크부분은지원이극히제한적 사용할수있는툴 커뮤니티지원 가격 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 91

임베디드리눅스시스템구성 타깃용임베디드리눅스시스템만들기 Toolchain 결정 Bootloader System Peripheral에따른 software지원문제 Kernel version결정 루트파일시스템을빌드 Embedded Linux booting 의 3 가지조건 Bootloader( 통상 arm/ppc는 u-boot) Kernel Root FileSystem AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 92

1 st AESOP Embedded Forum Google Android Seminar Linux Kernel 2.6 Track 3 : 13:00 ~ 13:50 고현철 ( 고도리, 이솝임베디드포럼운영진 )

Kernel 2.4 vs Kernel 2.6 Core (1/3) Core module-init-tools 모듈파일의확장자가.o.ko 로변경 (kernel object) Module 형식에의변화 모듈컴파일방식이바뀌었음 (2.6 은커널의환경을이용해서컴파일 ) 향상된스케줄러 O(1) scheduler Preemptive Scheduler Anticipatory Scheduler 32 bit dev node Earlier version: 16bit Kernel 2.6: 32bit 로확장 (major: 12bit, minor: 20bit) 안드로이드로 Device driver 포팅시주의사항 Major, Minor number 가 255 를넘으면안된다 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 94

Kernel 2.4 vs Kernel 2.6 Core (2/3) Core 향상된 Thread 지원 (NPTL-Native POSIX Thread Library) 새로운드라이버모델 (Kernel Device Model) Android 에서는 kernel device model 대로작성하지않으면사용할수없는형태의드라이버가된다. Kconfig 커널설정및빌드도구 make dep 없어짐 make gconfig 추가 allsysconfig 모든기능을커널에넣는기능 allmodconfig 모든기능을모듈로만드는기능 allnoconfig 모든기능을빼버리는기능 빌드메시지숨기기기능 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 95

Kernel 2.4 vs Kernel 2.6 Hardware (1/2) Hardware support 새로운아키텍처지원 (Embedded 를기본지원 ) PPC64, X86-64, UML(User Mode Linux) ALSA 여러가지고급기능을제공하는새로운사운드장치 OSS 와호환 ALSA OSS Emulation 모듈포함 CPU Frequency Scaling 지원 전원절약을위해각종 CPU 의 Frequency Scaling 지원이추가 DVB 지원 디지털방송장비를위한 DVB(Digital Video Broadcasting) 기능이추가 리눅스에서디지털 TV 시청가능 Video4Linux 재작성 카메라및이를기반으로하는비디오관련장비지원 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 96

Kernel 2.4 vs Kernel 2.6 Hardware (2/2) Hardware support ACPI Support 시스템에연결된각종장치의상태를 BIOS 와연계해서알수있는 ACPI 드라이버포함 Console & Input Devices 콘솔계층및입력장치드라이버가재작성되어완전히모듈화시킬수있음. Android 에서는기본입력장치를반드시 Input device 로작성하도록하고있다 ex> HTC G1 phone 의 Landscape mode EV_SW driver 로인식 Serial ATA Support Bluetooth Support AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 97

Kernel 2.4 vs Kernel 2.6 File system File System XFS Support SGI 의 XFS 가리눅스에기본포함됨. ACL Support 파일에여러가지속성을줄수있는 ACL 기능포함 Ext2, ext3, jfs, xfs 에서지원 Plugin 을지원하는새로운 Quota 시스템 Ntfs-ng 추가 Sysfs 새로운 ntfs 드라이버인 ntfs-ng 가리눅스에기본으로포함 현재각종장치의상태를보여주는가상파일시스템인 sysfs 가추가 Linux kernel device model 과관련이깊고, Android 의경우도 sysfs 를시스템관리에기본적으로사용하고있다 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 98

1 st AESOP Embedded Forum Google Android Seminar Linux 부팅과정 Track 3 : 13:00 ~ 13:50 고현철 ( 고도리, 이솝임베디드포럼운영진 )

Linux Boot process (1/2) Boot loader Kernel kernel 은 kernel command line boot argument 의내용에따라 Root filesystem 이저장되어있는 block device 를 mount mount 하고나면 /sbin/init 실행화일을찾고실행시킨다 이때서부터 Root Filesystem 영역으로동작하게된다 Root Filesystem /sbin/init 가 /etc/inittab 파일을찾아서내용대로스크립트를실행 /etc/inittab 의내용대로 /sbin/getty 를실행시켜서터미널세팅 /bin/login: /etc/passwd 내용참조 login 후 /bin/sh: 이때부터리눅스를사용할수있는상태 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 100

Linux Boot process (2/2) Kernel 의 init thread 실행및 root filesystem mount 후 /sbin/init /etc/inittab 참조 Procfs, sysfs mount Udev daemon 시작 나머지 daemon 들시작 /sbin/getty 터미널세팅 /bin/login login prompt, /etc/passwd 참고 /bin/sh 명령어모드로진입 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 101

init kernel thread init kernel thread /dev/console open (file descriptor 0) dup system call 을이용하여 file descriptor 1 번과 file descriptor 2 번을똑같은 device(/dev/console) 로만듦 file descriptor 0: stdin file descriptor 1: stdout file descriptor 2: stderr 지정한 init 프로그램이있는경우 kernel argument 로전달받은프로그램을실행 지정된프로그램이없는경우 /sbin/init, /etc/init, bin/init, /bin/sh 순으로 init 프로그램실행을시도하고, 하나라도성공하면 PID 1 번으로 init 프로그램실행 init 프로그램실행에실패하면 kernel panic 발생 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 102

루트파일시스템 (root file system) 루트파일시스템이란? 루트파티션에사용될파일시스템으로, Linux/UNIX 부팅시필요한파일들을모아놓은저장장치혹은디렉토리의구성을일컽는용어 커널과루트파일시스템은반드시필요함 루트파일시스템은부팅시에항상마운트된다. 루트파일시스템이없거나구성이올바르지않으면 리눅스가구동되지않는다. AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 103

루트파일시스템의구성 / Root Directory 라고불리며, 모든디렉토리는 / 를기준으로생성된다. / 는모든디렉토리의출발점이자다른파티션의연결점. /bin, /sbin 시스템을사용하기위한기본적인명령어들이시스템관리명령어와시스템을복구할때사용하는필수명령어등이존재. /boot /dev /etc PC 전용으로일반적으로사용되는디렉토리며, 부팅에필요한커널등이존재. Device driver 관련된모든장치파일이위치한다. (2.6 서부터는 udev, sysfs 와연동 ) 시스템설정파일들이위치 ( 가장중요한 directory) AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 104

루트파일시스템의구성 /root 루트사용자의홈디렉토리 /proc 프로세스와시스템정보를제공하기위한목적으로설계된가상파일시스템을사용하는디렉토리이다. /proc 디렉토리의파일은 cat 혹은 more 명령어로읽을수있으며특정파일의경우 echo 같은명령어로내용을변경할수도있다. 주로디버깅용도로많이사용된다. AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 105

루트파일시스템의구성 /tmp 임시파일을저장하는디렉토리. 수시로파일이생성되고삭제된다. NAND 나 NOR 를이용한 root filesystem 구성일경우는조심해야하는디렉토리 /usr 전통적으로시스템부팅에반드시필요하지않은 utility 성격의파일들이존재함. 하지만, 근래는반드시필요한패키지들도존재하게됨으로써반드시구성해주어야하는디렉토리 /sys 2.6 에서새로생겨난 kernel device model 지원 ( 중요 ) AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 106

루트파일시스템구축절차 임베디드시스템의저장장치 RAM Flash memory Hard disk 파일시스템을하나의파일로만든다. 루트파일시스템의내용 ( 디렉토리, 파일 ) 을만들고 특정파일시스템의형태를가지는이미지파일로변환함 만든이미지파일을타겟의비휘발성저장장치에다운로드함 커널을알맞게수정하여컴파일하고타겟에다운로드함 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 107

1 st AESOP Embedded Forum Google Android Seminar Android 부팅과정과 Linux 와의관계 Track 3 : 13:00 ~ 13:50 고현철 ( 고도리, 이솝임베디드포럼운영진 )

Linux 와 Android 의계층구조차이 Linux Android AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 109

Android 시스템의구조 Android 시스템은기존 Linux Kernel 을기반으로 Dalvik VM 및 JAVA Core Library 를추가한형태 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 110

Android 시스템의구조 기존커널에서의확장사항 Alarm Low Memory Killer Ashmem Kernel Debugger Binder Power Management Logger Binder IPC 의프로세싱오버헤드와보안헛점을해결하기위해채택 Power Management 배터리기반에도동작하는모바일디바이스에대응하기위해채택 독자적으로만들어진 Linker 와 Libc 사용 표준 GLIBC,uCLIBC 를사용하지않음 C++ STL(Standard Template Library) 를지원하지않음 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 111

Android 시스템의구조 Bionic libc BSD의 libc를개선 라이선스 : User Application에서 GPL 문제회피 Size : 약 200k로 Glibc의절반크기 개별프로세스마다포함되어야하는부분이기때문에 제한된 CPU 파워에서빠른속도동작할수있도록하기위함 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 112

Android File System System 과 Data 디렉터리가추가됨 Dalvik VM 본체 system/bin 디렉터리에위치 프로그램 Resource 일반리눅스의경우 /usr/bin 에위치 Android의경우 /system/bin에위치 쉘 (Shell) 명령어 임베디드리눅스 : BusyBox 를통해사용및관리 Android : ToolBox 를통해사용및관리 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 113

Android boot-up sequence Android 는일반 linux 의 boot-up sequence 와거의유사한구조로되어있다 차이점은 Root filesystem 의구성이일반리눅스와다르다는것 커널의경우도 Android system 구성에알맞게수정 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 114

Kernel device model(1) 2.5.x 커널개발하면서부터커널디바이스에대한통합관리의필요성이대두됨 Device model 의목표 커널을위한통합디바이스모델 이전커널에서는시스템을체계적으로다룰수있는자료구조의부재 전원관리, hotplug 등의요구사항과이에대한시스템적인관리필요 새로운추상화된디바이스모델을구성하게됨 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 115

Kernel device model(2) 사용되는용어들 device driver bus class sysfs kobject kobj_type(aka. ktype) kset subsystem AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 116

Kernel device model 의 hotplug 구조 5> udevd 가 /sysfs 의생성내용을본후 6> /dev 에 Device file Node 생성 4> udevd 로 Event 전송 3> sysfs 가마운트된 /sys 에관련정보생성 user space 1> 장치로딩 2> sysfs 에등록 Kernel space AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 117

Linux kernel device model 의구조 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 118

Udev(1/2) Udev 란? Udev 는 A Userspace Implementation of devfs 의약자 실제로존재하는 device 에대한 file node 생성을 user space 자동화하도록구성 보통 /dev/ 디렉토리에장치노드파일들을만들거나제거한다. /dev/ 디렉토리는 udev 설정에서변경할수있다. Udev 의특징 Run in userspace 유저공간 (Userspace) 에서동작하며, 이는 hotplug + sysfs 를이용하여가능하다. Udev 는 hotplug 서브시스템의일부로서, 만일장치가시스템에추가되거나제거되면 hotplug 에의해 udev 가호출된다. udev 는 hotplug 이벤트를받아 sysfs 에서필요한정보를얻어 /dev/ 장치파일을생성한다. 뒤에설명할장치파일이름에대한정책에정책이유저공간에서설정가능하다. AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 119

Udev(2/2) Udev 의특징 ( 계속 ) Run in userspace 유저공간 (Userspace) 에서동작하며, 이는 hotplug + sysfs 를이용하여가능하다. Udev 는 hotplug 서브시스템의일부로서, 만일장치가시스템에추가되거나제거되면 hotplug 에의해 udev 가호출된다. udev 는 hotplug 이벤트를받아 sysfs 에서필요한정보를얻어 /dev/ 장치파일을생성한다. 뒤에설명할장치파일이름에대한정책에정책이유저공간에서설정가능하다. Create a dynamic /dev AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 120

Linux 에서의 device node 생성메커니즘 일반 Linux 의 init 의실행시 device node 생성관련 /sbin/init process 가 /etc/inittab 로딩후각 script 등을실행시킴 이때 sysfs 가 /sys 로 mount udev daemon 이동작 udev daemon 이실행되후시스템에서의 device node 생성 실제디바이스가 detect 되면 sysfs 에등록이되고 user space 에서는 /sys 에등록 udev daemon 으로 netlink sokcket 을이용하여새로운디바이스생성되었다는메시지전송 udev daemon 은 /sys 의디바이스내용을이용 /dev 에 device node 생성 sysfs 에등록이되어야만 device node 생성가능 반드시 kernel device model 방식으로 device driver 를작성해야등록가능 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 121

Android 의 init 의특징 Android 의 init 일반 linux 의일련의부팅과정을전부하나의 binary 인 init 에통합 udev 와관련된 device node 생성메커니즘도 init 에서처리 기본적으로모든 device node 는 Read-only 로생성 이러한부분을처리하기위해서는 init.rc 혹은 devices.c 의해당부분을직접수정해야함 init.rc 와 init.%hardware%.rc 를로딩하여처리 통합한이유 보안과실행 permission 의문제 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 122

Android 에서의 init 와보안의관계 Android 에서의보안과 permission 응용프로그램과시스템사이의대부분의보안은프로세스수준에서애플리케이션에할당된사용자와그룹 ID 등 linux 를통해서실행 추가적인세밀한보안기능은특정프로세스수행할수있는구체적인작업에대한제한을적용하는 "permission" 메커니즘과지정된데이타에 ad-hoc 접권의하가를위한 per-uri 권한을통해제공 일반리눅스와의차이 통합된 init 전통적인 /etc/passwd,/etc/group 을사용하지않음 application 권한은설치할때, 이러한 permission 이결정되고, 이후변경하지못함. 모든안드로이드어플리케이션은 AndroidManifest.xml 파일을가지고있으며이파일을통해서권한설정 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 123

Android 에서의 init 와보안의관계 Android 에서의사용자와그룹관리 system/core/include/private/android_filesystem_config.h 위파일에사용자 / 그룹 ID가지정되어있음 //--------------------------------------------------------------------------- // system/core/include/private/android_filesystem_config.h //--------------------------------------------------------------------------- /* This is the master Users and Groups config for the platform. ** DO NOT EVER RENUMBER. */ #define AID_ROOT 0 /* traditional unix root user */ #define AID_SYSTEM 1000 /* system server */ #define AID_RADIO 1001 /* telephony subsystem, RIL */ #define AID_BLUETOOTH 1002 /* bluetooth subsystem */ #define AID_GRAPHICS 1003 /* graphics devices */ #define AID_INPUT 1004 /* input devices */ #define AID_AUDIO 1005 /* audio devices */ #define AID_CAMERA 1006 /* camera devices */ AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 124

Android 에서의 init 와보안의관계 Android 에서의 device node 생성 기본적으로 read-only 로생성 각 device 별소유와접근 permission 을 source 에서처리 //--------------------------------------------------------------------------- // system/core/init/devices.c //--------------------------------------------------------------------------- static struct perms_ devperms[] = {... { "/dev/ashmem", 0666, AID_ROOT, AID_ROOT, 0 }, { "/dev/binder", 0666, AID_ROOT, AID_ROOT, 0 }, /* logger should be world writable (for logging) but not readable */ { "/dev/log/", 0662, AID_ROOT, AID_LOG, 1 }, /* these should not be world writable */ { "/dev/android_adb", 0660, AID_ADB, AID_ADB, 0 }, { "/dev/android_adb_enable", 0660, AID_ADB, AID_ADB, 0 },... { "/dev/hw3d", 0660, AID_SYSTEM, AID_GRAPHICS, 0 }, { "/dev/input/", 0660, AID_ROOT, AID_INPUT, 1 }, { "/dev/eac", 0660, AID_ROOT, AID_AUDIO, 0 },... { NULL, 0, 0, 0, 0 }, }; AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 125

Android boot-up sequence AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 126

Android 초기화절차 Android Initialization Process Init 은 Kernel 이시작된후처음으로시작되는프로세스 Android 의 Init 은 system/bin/init 에위치 Android 의 Init 은다음단계로부팅절차를수행 Log System 초기화 /init.rc 와 /init.%hardware%.rc 의내용을파싱 앞단계에서파싱된사항중 early-init 부분수행 디바이스노드생성및펌웨어다운로드 우선순위시스템및소유권초기화 앞단계에서파싱된사항중 Init 부분수행 우선순위시스템및소유권정책작용 앞단계에서파싱된사항중 Early-Boot 와 Boot 부분수행 나머지작업들을수행 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 127

Zygote ( 수정란 ) Zygote 를통한프로세스관리 어플리케이션을빠르게구동하기위해미리 fork 되어있는프로세스 시스템에서 exec() 호출을통해특정어플리케이션을실행하고자하기전까지는중립적인상태, 즉특정애플리케이션과합체되지않는상태를유지 안드로이드에서프로세스를생성하는방식 fork() 와 execve() 를통하여프로세스를생성하는데, zygote 를통하여프로세스가생성되고메모리를공유하는형식을취함 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 128

안드로이드구동과정 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 129

안드로이드구동과정 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 130

안드로이드구동과정 Zygote 가실행되면시스템서비스가활성화된다. 응용프로그램에서는 android.process.* 을가지고접근할수있다. Zygote 와시스템서버간에는 IPC 소켓으로 ( 127.0.0.x ) 통신을한다. AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 131

안드로이드구동과정 부팅완료후각프로세스들의상태 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 132

Android 계층간상호작용 App -> Runtime Service -> lib AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 133

Android 계층간상호작용 App -> Runtime Service -> Native Service -> lib AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 134

Android 계층간상호작용 App -> Runtime Service -> Native Daemon -> lib AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 135

1 st AESOP Embedded Forum Google Android Seminar Android Kernel Porting Issue Track 4 : 14:00 ~ 14:50 김재훈 ( 이솝임베디드포럼운영진 )

Android Kernel 개요 Android Kernel Linux Kernel을기반으로제작 ARM EABI(Embedded Application Binary Interface) EABI 지원커널 (Kernel 2.6.18 이상 ) 및크로스컴파일러필요 EABI는 Google Android 등장과함께본격적으로주목받기시작 기존 Linux Kernel 에 Android 를위한구성요소추가형태 Binder Pmem Allocator Logger RAM Buffer Console Timed Output Class Driver Low Memory Killer Power Management Android ADB Gadget AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 137

Android 이식방안 Android 를이식하는방법 Android 공식 Kernel은 2.6.27과 2.6.29가존재 Android 공식 Kernel을 Processor에이식 S3C6410의경우공식 2.6.28.6 Kernel을사용 S3C6410 공식 2.6.28.6 Kernel에 Android 관련사항을이식 Android 공식 Kernel 을 Processor 에이식시장 / 단점 Kernel 이식이잘된다면, Android 는안정적으로동작 Kernel Version 별차이로 Processor 에이식할때많은작업필요및동작하지않는드라이버가있을수있음 S3C6410 공식 2.6.28.6 Kernel 에 Android 관련사항을이식시장 / 단점 상대적으로몇가지의 Figure 만이식하면되기때문에작업량간소화 Android 동작시오류가발생할가능성이있음 Android 의개발시 Kernel 버전이다르기때문 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 138

ARM EABI EABI 는 ARM 의새로운 Embedded ABI FPU를쓰거나쓰지않는, 빠른실수연산성능 (floating point) Soft 및 Hardfloat 코드를환용가능 EABI 이전과달리구조체팩킹 (Packing) 이더쉬워짐 예 ) PROGRAMMA PACK 등 다른툴들과의더나은호환성 (Compatibility) 더효율적인 Syscall 관례 (Convention) http://www.arm.linux.org.uk/developer/patches/viewpatch.php?id=3105/4 long ftruncate64(unsigned int fd, loff_t length); 의예 : 기존 ABI: -put fd into r0 (fd 를 r0 로넣음 ) -- put length into r1-r2 ( 길이를 r1-r2 로넣음 ) -- 커널호출을위해서 "swi #(0x900000 + 194)" 사용. - 새로운 ARM EABI: -- put fd into r0 (fd 를 r0 로넣음 ) -- put length into r2-r3 (skipping over r1) ( 길이를 r2-r3 로넣음. r1 은무시 ) -- put 194 into r7 (194 를 r7 로넣음 ) -- use "swi 0" to call the kernel ( 커널을호출하기위해서 "swi 0" 사용 ) AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 139

Android Kernel 2.6.27,29 의차이점 Android 2.6.27 Kernel 의 Android 설정사항위치 [Device Driver] -> [Misc Devices] 에위치 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 140

Android Kernel 2.6.27,29 의차이점 Android 2.6.29 Kernel 의 Android 설정사항위치 ( 계속 ) Pmem Allocator 의경우기존과동일하게 [ Misc devices] 에위치 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 141

Android Kernel 2.6.27,29 의차이점 Android 2.6.29 Kernel 의 Android 설정사항위치 [Device Driver] -> [Staging Drivers] -> [ Android ] 에위치 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 142

Android Kernel 2.6.27,29 의차이점 Android 2.6.27 / 2.6.29 Kernel 의공통적용사항 (1/5) [Power Management Support] 부분은동일 [suspend to RAM and standby] 항목적용시 Android 의화면은일정시간이지난후 Blank 상태로돌입 Touch Screen 및 Input Device Driver 를사용하기위해 [Power Manage ment Support] 부분은반드시활성화 Power Management 기능을완전히활용하기위해서는 Android 를위한 Power Management Device Driver 의작성필요 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 143

Android Kernel 2.6.27,29 의차이점 Android 2.6.27 / 2.6.29 Kernel 의공통적용사항 (2/5) 다음은일반적인 Android Kernel 개발시적용하는 Power Management 의적용사항 [Power Management Support] 옵션은필수 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 144

Android Kernel 2.6.27,29 의차이점 Android 2.6.27 / 2.6.29 Kernel 의공통적용사항 (3/5) [General Setup] -> [Enable the Anonymous shared Memory Subsystem] Google Android를위한 Ashmem 활성화 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 145

Android Kernel 2.6.27,29 의차이점 Android 2.6.27 / 2.6.29 Kernel 의공통적용사항 (4/5) [General Setup] -> [Create deprecated sysfs files] 활성화 이것을활성화하지않을경우 SD/MMC 인식불가 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 146

Android Kernel 2.6.27,29 의차이점 Android 2.6.27 / 2.6.29 Kernel 의공통적용사항 (5/5) [Kernel Features] -> [Use the ARM EABI to compile the kernel] 활성화 Kernel의 ARM EABI 지원활성화부분 / EABI 컴파일러필요 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 147

Android Kernel SD/MMC 인식 Android 2.6.27 / 2.6.29 Kernel 에서 SD/MMC 인식 [General Setup] -> [Create deprecated sysfs files] 활성화 이것을활성화하지않을경우 SD/MMC 인식불가 Android RFS의 system/etc/vold.conf에다음의항목을추가 아래는 Samsung S5PC100 및 S3C6410의경우해당 이외의 Processor의경우 Android 부팅후 sys/ 디렉터리에서확인 ## vold configuration file for the emulator/sdk volume_sdcard { ## This is the direct uevent device path to the SD slot on the device media_path /devices/platform/s3c-sdhci.0 media_path /devices/platform/s3c-sdhci.1 emu_media_path /devices/platform/goldfish_mmc.0/mmc_host/mmc0 } media_type mount_point ums_path mmc /sdcard /devices/platform/usb_mass_storage/lun0 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 148

Android Kernel ADB USB 적용 Android 2.6.27 / 2.6.29 Kernel 에서 ADB USB 적용시필요한 Kernel 설정 Processor의 USB Device Driver Android ADB USB Gadget [Device Drivers] -> [Switch Class Support] AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 149

Android Kernel ADB USB 적용 Android 2.6.27 / 2.6.29 Kernel 에서 ADB USB 적용방법 (1/5) ADB USB는 Linux Kernel에서 Gadget 형태로제공 Linux Gadget는 Embedded Linux에서 Emulation할 USB Device의성격을정의 Android ADB USB Gadget Linux USB Gadget USB Device Driver USB Device H/W 기본 Android Kernel 에포함된 ADB Driver 는동작하지않음 다음의파일들의추가필요 ( 예 :S3C6410) AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 150

Android Kernel ADB USB 적용 Android 2.6.27 / 2.6.29 Kernel 에서 ADB USB 적용방법 (2/5) 기본 Android Kernel 에포함된 ADB Driver 는동작하지않음 다음의파일들의추가필요 (kernel/drivers/usb/gadget, 예 :S3C6410) Kconfig f_adb.c gmidi.c pxa27x_udc.h Makefile f_adb.h goku_udc.c rndis.c amd5536udc.c f_ecm.c goku_udc.h rndis.h amd5536udc.h f_loopback.c imx_udc.c s3c2410_udc.c android.c f_mass_storage.c imx_udc.h s3c2410_udc.h at91_udc.c f_mass_storage.h inode.c s3c_udc.h at91_udc.h f_obex.c lh7a40x_udc.c s3c_udc_otg.c atmel_usba_udc.c f_phonet.c lh7a40x_udc.h s3c_udc_otg.o atmel_usba_udc.h f_rndis.c 해당소스는 AESOP6410 공개용 Android Kernel 에서입수가능... Samsung S5PC100 Kernel 의경우 f_adb.c 와 f_mass_storage.c 를조합하여, USB OTG Device Driver 에 Endpoints 를각각할당하여동시에구동되도록제작 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 151

Android Kernel ADB USB 적용 Android 2.6.27 / 2.6.29 Kernel 에서 ADB USB 적용방법 (3/5) Linux Kernel 단의 ADB USB Driver 적용완료후, Windows 단의 ADB Driver 의 UID 및 PID 의수정필요 사용하는 CPU 의 USB Device Driver 에따라 UID 및 PID 가틀리기때문 WindowsConnectivity It is possible to get Windows to at least recognize the Android"Ethernet Gadget" and charge the FreeRunner using the Android USBWindows driver (http://dl.google.com/android/android_usb_windows.zip)by modifying the android_usb.inf file in that package before attempting toinstall the driver. The following modifications are required: Add the following to the [Google.NTx86] section of the android_usb.inffile: ; Neo FreeRunner %USB\VID_1457&PID_5117.DeviceDescRelease%=androidusb.Dev,USB\VID_1457&PID_5117 %USB\VID_1457&PID_5117&MI_01.DeviceDescRelease%=androidusb.Dev,USB\VID_1457&PID_5117&MI_01 and add the following to the to the [Strings] section of theandroid_usb.inf file: USB\VID_1457&PID_5117.DeviceDescRelease="Neo FreeRunner" USB\VID_1457&PID_5117&MI_01.DeviceDescRelease="Neo FreeRunnerComposite ADB Interface" The Windows version of adb does not appear to recognize the connecteddevice yet but at least the FreeRunner charges and the device driver indicatesthat "This device is working properly." 출처 : http://wiki.openmoko.org/wiki/android_porting AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 152

Android Kernel ADB USB 적용 Android 2.6.27 / 2.6.29 Kernel 에서 ADB USB 적용방법 (4/5) S3C6410에서의 ADB USB 적용사항 UID 및 PID의경우 Android Device 연결후 [ 장치관리자 ] 의속성을통해입수 Windows용표준 Android ADB USB Driver의경우 Android Source에위치 ; ; Android WinUsb driver installation. ; [Version] Signature = "$Windows NT$... [Google.NTx86] ; HTC Dream %SingleAdbInterface% = USB_Install, USB\VID_0BB4&PID_0C01 %CompositeAdbInterface% = USB_Install, USB\VID_0BB4&PID_0C02&MI_01 %SingleBootLoaderInterface% = USB_Install, USB\VID_0BB4&PID_0FFF ; HTC Magic %CompositeAdbInterface% = USB_Install, USB\VID_0BB4&PID_0C03&MI_01 ; Android USB Gadget %CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_0002&MI_01 [Google.NTamd64] ; HTC Dream %SingleAdbInterface% = USB_Install, USB\VID_0BB4&PID_0C01 %CompositeAdbInterface% = USB_Install, USB\VID_0BB4&PID_0C02&MI_01 %SingleBootLoaderInterface% = USB_Install, USB\VID_0BB4&PID_0FFF ; HTC Magic %CompositeAdbInterface% = USB_Install, USB\VID_0BB4&PID_0C03&MI_01 ; Android USB Gadget %CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_0002&MI_01 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 153

Android Kernel ADB USB 적용 Android 2.6.27 / 2.6.29 Kernel 에서 ADB USB 적용방법 (5/5) 다음항목은 Android Device를 Windows에연결시나오는이름을정의 다음항목을수정하여독자적인장치이름을정의할수있음 [Strings] ProviderName SingleAdbInterface CompositeAdbInterface SingleBootLoaderInterface WinUSB_SvcDesc DISK_NAME ClassName... = "Google, Inc." = "Android ADB Interface" = "Android Composite ADB Interface" = "Android Bootloader Interface" = "Android USB Driver" = "Android WinUsb installation disk" = "Android Phone AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 154

Android Kernel Touch Driver 이식 Android Touch Driver 의경우 Touch Screen 의절대값을입력받음 정전터치패널 -> 정전터치의좌표를 Android 에맞도록매핑하여전달 압력터치패널 -> Calibration 공식을대입하여 Android 에맞도록매핑하여전달 X : 0, Y : 0 X : 800, Y : 0 X : 400, Y : 240 X : 800, Y : 480 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 155

Android Kernel Touch Driver 이식 Touch Panel Device Driver 의동작절차 (X-Windows) Touch Device ADC Device Driver TS Lib X-Windows Touch Panel Device Driver 의동작절차 (Android) Touch Device ADC Device Driver TS Lib Android AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 156

Android Kernel Touch Driver 이식 압력식 Touch Panel Device Driver 이식절차 Touch Screen 의 Calibration 데이터를얻을필요가있음 Calibration 데이터는 TSLib 가이식된 X-Windows 또는일반 Linux 전용 RFS 에서추출 X-Windows 부팅후 xtscal 을수행하여터치스크린 Calibration /etc/ 디렉터리의 pointercal 의데이터를추출 Android 의 Touch Screen Driver 에적용 /* For ts->dev.id.version */ #define S3C_TSVERSION 0x0101 #define WAIT4INT(x) (((x)<<8) \ S3C_ADCTSC_YM_SEN S3C_ADCTSC_YP_SEN S3C_ADCTSC_XP_SEN \ S3C_ADCTSC_XY_PST(3)) #define AUTOPST (S3C_ADCTSC_YM_SEN S3C_ADCTSC_YP_SEN S3C_ADCTSC_XP_SEN \ S3C_ADCTSC_AUTO_PST S3C_ADCTSC_XY_PST(0)) #define DEBUG_LVL KERN_DEBUG #ifdef CONFIG_S3CTS_ANDROID #ifdef CONFIG_MACH_SL6410 #define ANDROID_TS_RESOLUTION_X 800 #define ANDROID_TS_RESOLUTION_Y 480 static int pointercal[7]={-5288, 16, 71025056, 11, 5245, -27357632, 65536}; #endif #endif AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 157

Android Kernel Touch Driver 이식 다음의코드는 pointercal 값을가지고절대 X 좌표와 Y 좌표를구하는공식 Touch Device를사용시 Debug Code에절대 X 좌표와 Y 좌표가나오면정상적으로구동 static void touch_timer_fire(unsigned long data) { data0 = readl(ts_base+s3c_adcdat0); data1 = readl(ts_base+s3c_adcdat1);... updown = (!(data0 & S3C_ADCDAT0_UPDOWN)) && (!(data1 & S3C_ADCDAT1_UPDOWN)); if (updown) { if (ts->count) { #ifdef CONFIG_S3CTS_ANDROID xtemp = ts->xp; ytemp = ts->yp; x = ( pointercal[2] + pointercal[0]*xtemp + pointercal[1]*ytemp ) / pointercal[6]; y = ( pointercal[5] + pointercal[3]*xtemp + pointercal[4]*ytemp ) / pointercal[6]; #ifdef CONFIG_ANDROID_TOUCHSCREEN_S3C_DEBUG printk("pre: x, y = %d, %d\n", x, y); #endif AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 158

Android Kernel Touch Driver 이식 if( x>android_ts_resolution_x ) x = ANDROID_TS_RESOLUTION_X; else if(x < 0) x = 0; if( y>android_ts_resolution_y ) y = ANDROID_TS_RESOLUTION_Y; else if(y < 0) y = 0; if( (x<=android_ts_resolution_x) && (x>=0) ) { input_report_abs(ts->dev, ABS_X, x); input_report_abs(ts->dev, ABS_Y, y); input_report_key(ts->dev, BTN_TOUCH, 1); input_report_abs(ts->dev, ABS_PRESSURE, 1); input_sync(ts->dev); #ifdef CONFIG_ANDROID_TOUCHSCREEN_S3C_DEBUG printk("x, y = %d, %d\n", x, y); #endif } #else // For X-Windows input_report_abs(ts->dev, ABS_X, ts->xp); input_report_abs(ts->dev, ABS_Y, ts->yp); #endif } input_report_key(ts->dev, BTN_TOUCH, 1); input_report_abs(ts->dev, ABS_PRESSURE, 1); input_sync(ts->dev); AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 159

Android Kernel Touch Driver 이식 Touch Driver Probe 부분에서 ABS_X, ABS_Y 값을 Application 으로넘겨줄수있도록파라메터를설정... ts->dev->evbit[0] = ts->dev->evbit[0] = BIT_MASK(EV_SYN) BIT_MASK(EV_KEY) BIT _MASK(EV_ABS); ts->dev->keybit[bit_word(btn_touch)] = BIT_MASK(BTN_TOUCH); #ifdef CONFIG_S3CTS_ANDROID ts->dev->absbit[0] = BIT(ABS_X) BIT(ABS_Y); // for android input_set_abs_params(ts->dev, ABS_X, 0, ANDROID_TS_RESOLUTION_X, 0, 0); input_set_abs_params(ts->dev, ABS_Y, 0, ANDROID_TS_RESOLUTION_Y, 0, 0); input_set_abs_params(ts->dev, ABS_PRESSURE, 0, 1, 0, 0); #else if (s3c_ts_cfg->resol_bit==12) { input_set_abs_params(ts->dev, ABS_X, 0, 0xFFF, 0, 0); input_set_abs_params(ts->dev, ABS_Y, 0, 0xFFF, 0, 0); } else { input_set_abs_params(ts->dev, ABS_X, 0, 0x3FF, 0, 0); input_set_abs_params(ts->dev, ABS_Y, 0, 0x3FF, 0, 0); } input_set_abs_params(ts->dev, ABS_PRESSURE, 0, 1, 0, 0); #endif sprintf(ts->phys, "input(ts)"); AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 160

Android Kernel Key Driver 이식 초창기의경우 Android RFS 의 Key Map Table 을수정하는것으로이용 현재의경우 Android RFS 를수정하는것보다 Kernel Driver 를수정 Google Android 의경우 Linux 의표준 KEY_EVENT 를사용 Google Android 용의특징적인키인 KEY_HOME, KEY_MENU 등을매핑시키면됨 int sl6410keypad_keycode[max_keypad_cnt] = { KEY_SEND, KEY_HOME, KEY_MENU, KEY_BACK, }; char sl6410keypad_keycodestr[max_keypad_cnt][20] = { "KEY_SEND\n", "KEY_HOME\n", "KEY_MENU\n", "KEY_BACK\n", }; switch(keypad_value & 0xf){ case 0xE : input_report_key(sl6410_keypad, sl6410keypad_keycode[0], KEY_PRESS); // printk("press KEY : %s", (char *)&sl6410keypad_keycodestr[0]); input_report_key(sl6410_keypad, sl6410keypad_keycode[0], KEY_RELEASED); // printk("released KEY : %s", (char *)&sl6410keypad_keycodestr[0]); key_prev_state = keypad_value; break; case 0xD : input_report_key(sl6410_keypad, sl6410keypad_keycode[1], KEY_PRESS); // printk("press KEY : %s", (char *)&sl6410keypad_keycodestr[1]); input_report_key(sl6410_keypad, sl6410keypad_keycode[1], KEY_RELEASED); // printk("released KEY : %s", (char *)&sl6410keypad_keycodestr[1]); key_prev_state = keypad_value; break; AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 161

1 st AESOP Embedded Forum Google Android Seminar Android Root Filesystem Track 4 : 14:00 ~ 14:50 김재훈 ( 이솝임베디드포럼운영진 )

1 st AESOP Embedded Forum Google Android Seminar Android Build Track 4 : 14:00 ~ 14:50 김재훈 ( 이솝임베디드포럼운영진 )

Android Source Code 빌드방법 운영체제는 Ubuntu Linux 8.10 을사용 소스코드빌드에는대략 3~4 시간이소요 Xeon 기반의 PC 또는 4 코어이상의 PC 의경우 SMP 를이용하여컴파일시간을단축시킬수있음 예 ) 8 코어 Xeon 에서 Android 소스코드빌드시약 30 분소요 현재 Android 의경우지속적으로개발중이기때문에, 컴파일시발생하는에러에대한대처방법이필요 Android Source 는 repo 라는툴을사용하여다운로드 Repo 는 GIT 로구성된여러가지의프로젝트를한꺼번에관리해주는툴 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 164

Android Source Code 빌드환경설정 빌드를위한사용자계정설정 자신의계정에 sudoers 에등록되어있는지검사 $vi /etc/sudoers 만약없으면다음과같은명령으로추가 $ su $ visudo 자신의계정명 ALL=(ALL) ALL 구문을추가 예 ) jhkim ALL=(ALL) ALL Package Update ubuntu Linux 의 Package 및 List 의업데이트가필요 작업을수행하기이전에 Linux PC의인터넷연결필요 $ sudo apt-get update $ sudo apt-get upgrade AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 165

Android Source Code 빌드환경설정 Package Install http://source.android.com/download 참조 설치시요구되는 Package Git(GNI Privacy Guard) 1.5.4 이상의버전 JDK 5.0, update 12 또는그이상의버전 참고 : Java 6 는지원하지못함 flex, bison, gperf, libsdl-dev, libesd0-dev, libwxgtk2.6-dev (optional), build-essential, zip, curl 이필요 Package 설치방법 $ sudo apt-get install git-core gnupg sun-java5-jdk flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev $ sudo apt-get install valgrind $ sudo apt-get install lib32readline5-dev AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 166

Android Source Code 빌드환경설정 Repo 설치 Repo 는여러개의 GIT 로관리되는 Android 소스를쉽게다운로드받을수있도록해주는 Tool ~/bin 디렉터리생성 $ cd ~ $ mkdir bin Repo 스크립트를다운로드받고, 실행권한지정 $ curl http://android.git.kernel.org/repo >~/bin/repo $ chmod a+x ~/bin/repo /bin 디렉터리에 Repo 스크립트복사 sudo cp./repo /bin AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 167

실습 : Android Source Code 빌드환경설정 Repo Client 초기화 Android Source Code를다운로드할디렉터리생성 $ mkdir ~/myandroid $ cd ~/myandroid Repo Init 를수행하여, 최신의 Android 및 Bug Fix 가적용된버전을다운로드 (2009.10.05 일현재 Donut) $ repo init u git://android.git.kernel.org/platform/manifest.git Android 의경우공식버전은 Master Branch 에위치 다른 Branch 를다운로드받을경우 $ repo init u git://android.git.kernel.org/platform/manifest.git -b cupcake Repo 초기화성공시다음의메시지출력 repo initialized in ~/mydroid AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 168

Android Source Code 빌드환경설정 Repo Client 초기화 ( 소스코드다운로드받기 ) 다음의명령으로 Android 소스코드를다운로드 # repo sync AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 169

Android Source Code 빌드환경설정 Repo Sync 완료후디렉터리의구조 jhkim@jhkim-xeon:~/myandroid$ ls Makefile bootable dalvik external hardware packages system bionic build development frameworks kernel prebuilt Kernel : Android의공식커널 Dalvik : Dalvik VM 소스코드 Frameworks : Android의 frameworks소스 (HAL, C++ Libraries, 각종매니저소스 ) System : Android 부팅과관련된소스들 (init) Hardware : Android HAL관련소스 Bionic : Android Bionic C 라이브러리 Bootable : 부트로더및 Disk Installer가위치 External : Android 외부에서가져다포팅한유틸리티, binaries, libraries Packages : Android Application Development : Android SDK AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 170

실습 : Android Source Code 빌드환경설정 Android JAVA 경로설정 Android는 JAVA를사용 /etc/profile에다음의 JAVA 경로추가 # /etc/profile: system-wide.profile file for the Bourne shell (sh(1)) # and Bourne compatible shells (bash(1), ksh(1), ash(1),...). if [ -d /etc/profile.d ]; then for i in /etc/profile.d/*.sh; do if [ -r $i ]; then. $i fi done unset i fi export LANG=C export JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun export ANDROID_JAVA_HOME=$JAVA_HOME AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 171

Android Source 빌드 Android Souce 를빌드하기위해다음의명령사용 Android 소스코드디렉터리 : ~/myandroid make 멀티코어 CPU 사용시다음의방법으로속도향상 make -j[ CPU 코어개수 * 4 ] 예 ) 8코어 Xeon의경우 make j32 예 ) 2코어 Core-2 Duo의경우 make j8 예 ) 4코어 Core-2 Quad의경우 make j16 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 172

Android 컴파일시주의사항 Android 소스는 Qualcomm SoC 에맞추어져있음 완전하게커널이포팅되어있다는가정하에코드가동작되도록되어있음 예를들어 Battery 부분이포팅이안되어있을경우는 Android 부팅시 system halt 가일어남 ex>frameworks/policies/base/phone/com/android/internal/policy/imp l/keyguardupdatemonitor.java 파일수정으로해결 Android Source 자체의버그가있을경우가있음 ex> 대용량 Storage 에서 Android 부팅했을경우에 Low on Space 에러발생 Android 소스패치사이트 http://review.source.android.com AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 173

Android Source 에러대처방법 Android Source Code 빌드시에러대처방법 빌드시발생되는에러의원인 환경설정의오류 권장패키지의미설치 PATH 및 ANDROID_JAVAHOME 등의환경설정오류 소스코드의오류발생시 Android 의경우현재지속적으로개발중이기때문에, 소스코드의오류발생가능성이있음 소스코드오류발생시해당소스코드를직접수정하여빌드 Internet 검색 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 174

Android Root File System 제작 빌드가완료된소스는 out/ 디렉터리에위치 jhkim@jhkim-xeon:~/myandroid$ ls Makefile bootable dalvik external hardware out prebuilt bionic build development frameworks kernel packages system jhkim@jhkim-xeon:~/myandroid$ cd out/ jhkim@jhkim-xeon:~/myandroid/out$ ls CaseCheck.txt casecheck.txt host target tmp 디렉터리설명 host : android 용 x86 host 용 binaries target : Target Board 용컴파일된 Package 가위치 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 175

Android Root File System 제작 out/target/product/generic/ 명세 -rw-r--r-- 1 root root 7 Sep 3 15:11 android-info.txt -rw-r--r-- 1 root root 285 Sep 10 11:41 clean_steps.mk drwxr-xr-x 2 root root 4096 Sep 3 15:11 data/ -rw-r--r-- 1 root root 14730 Sep 10 11:41 installed-files.txt drwxr-xr-x 13 root root 4096 Sep 3 15:33 obj/ -rw-r--r-- 1 root root 40 Sep 10 11:41 previous_build_config.mk -rw-r--r-- 1 root root 145788 Sep 3 15:24 ramdisk.img drwxr-xr-x 8 root root 4096 Sep 3 15:24 root/ drwxr-xr-x 4 root root 4096 Sep 3 15:24 symbols/ drwxr-xr-x 11 root root 4096 Sep 3 15:30 system/ -rw------- 1 root root 52829568 Sep 10 11:41 system.img -rw------- 1 root root 2112 Sep 3 15:18 userdata.img 디렉터리및파일설명 (1/2) ramdisk.img / system.img / userdata.img Target Board용 Image 파일 ramdisk.img 작은크기로, 설정파일과 Init와 Recovery와같은실행파일을포함 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 176

Android Root File System 제작 디렉터리및파일설명 (2/2) data / root/ system 디렉터리 data/ 디렉터리 data/ 디렉터리는 userdata.img 파일과동일한내용을가짐 root/ 디렉터리 root/ 디렉터리는 ramdisk.img 파일과동일한내용을가짐 system/ 디렉터리 system/ 디렉터리는 system.img 파일과동일한내용을가짐 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 177

NFS Android Root File System 제작 개발용 Root File System 제작 NFS 를이용하여부팅할수있는 Root File System 을제작 Android Root File System 의수정및테스트가용이 system.img, ramdisk.img 및 userdata.img 를이용하지않음 초기 Android 개발시에는 Linux Kernel 수정도병행 MTD 및 YAFFS2 드라이버들이불안정한가능성을내포 따라서, img 를사용하지않고 NFS 를이용하여만들어진 Root File System 을테스트 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 178

NFS Android Root File System 제작 NFS Android Root File System 제작절차 root/ 디렉터리를 /nfsroot 디렉터리에복사 $cp -af root/* /nfsroot/android-root system/ 디렉터리를 /nfsroot/android-root/root 에복사 $cp -af system /nfsroot/android-root userdata/ 디렉터리를 /nfsroot/android-root/root에복사 $cp af data/ /nfsroot/android-root 완료후 /nfsroot/android-root 의내역 jhkim@jhkim-xeon:~/myandroid/out/target/product/generic$ ls /nfsroot/android-root data default.prop dev init init.goldfish.rc init.rc proc sbin sys system jhkim@jhkim-xeon:~/myandroid/out/target/product/generic$ AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 179

NFS 용 Android RFS 생성 NFS Filesystem 을사용하여개발시유의사항 Linux Kernel 의 NFS 관련지원기능활성화 CONFIG_NETWORK_FILESYSTEMS = y CONFIG_NFS_FS = y CONFIG_NFS_V3 = y CONFIG_ROOT_NFS = y Linux Kernel의 Ethernet Driver가정상적으로동작해야함 Android의 init.rc를 NFS에맞도록수정필요 파일퍼미션및소유자변경필요 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 180

Init.rc 파일수정... write /proc/cpu/alignment 4 write /proc/sys/kernel/sched_latency_ns 10000000 write /proc/sys/kernel/sched_wakeup_granularity_ns 2000000 # mount mtd partitions # Mount /system rw first to give the filesystem a chance to save a checkpoint # mount yaffs2 mtd@system /system # mount yaffs2 mtd@system /system ro remount # We chown/chmod /data again so because mount is run as root + defaults # mount yaffs2 mtd@userdata /data nosuid nodev chown system system /data chmod 0771 /data # Same reason as /data above # mount yaffs2 mtd@cache /cache nosuid nodev chown system cache /cache chmod 0770 /cache... # This may have been created by the recovery system with odd permissions chown system system /cache/recovery chmod 0770 /cache/recovery AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 181

Android 부팅및테스트방법 Android Kernel 과 Android 의 RFS 의매칭을확인하기위하여초기개발시 NFS 로개발 Android Kernel 부팅시 init 의위치를지정해야함 예 ) setenv bootargs init=/init console=ttysac0,115200 \ root=/dev/nfs rw \ nfsroot=192.168.1.15:/nfsroot/rootfs-android \ ip=192.168.1.85:192.168.1.15:192.168.1.1:255.255.255.0::eth0:off \ mem=128m ethaddr=00:40:5c:26:0a:5b AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 182

Android source download site Android 공식사이트외소스다운로드 site Beagle board 용 source TI OMAP3530(Cortex-A8, ARMv7) http://labs.embinux.org/index.php/android_porting_guide_to_beagle_boa rd HTC vogue 용 source http://code.google.com/p/vogue-android/ GSM 용 rild source, Camera source, GPS source 등등 Android gstreamer Android 에 Linux multimedia framework 인 gstreamer 를 porting 한소스 http://github.com/prajnashi/ 등등 Samsung S5PC100 source 현재는상용으로만작업되어있는소스로 Hardware Engine 서부터 opencore 로의 Hardware 가속기, 3D 가속기등을포팅해놓은소스 어두운경로 Android 는 license 정책상소스가거의공개되지않는특징이있음 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 183

1 st AESOP Embedded Forum Google Android Seminar Android Hardware Abstraction Layer #1 Track 5 : 15:00 ~ 15:50 고현철 ( 고도리, 이솝임베디드포럼운영진 )

1 st AESOP Embedded Forum Google Android Seminar Input device(key/touch) Track 5 : 15:00 ~ 15:50 고현철 ( 고도리, 이솝임베디드포럼운영진 )

Android Input device driver Kernel 2.6 으로가면서모든입력장치들은 input device 의 event interface 로통합 모든입력장치는 input device 의형태로나타나도록구성 Android 에서의 Input device Keyboard: /dev/input/event0 Touchscreen: /dev/input/event1 Switch driver: /dev/input/event? HTC G1 phone 의 slide 방식의 phone 의경우사용됨 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 186

Linux input device driver 모든입력장치는 input device driver 로구성됨 다음과같은 structure 의형태로모든발생 event 를표현 struct input_event { struct timeval time; u16 type; u16 code; s32 value; }; #define EV_SYN #define EV_KEY #define EV_REL #define EV_ABS #define EV_SW 0x00 : event synchronize 특성 0x01 : keyboard/button 입력 0x02 : mouse와같은상대좌표특성 0x03 : touch와같은절대좌료 0x05 : switch event 각 input device 는여러개의속성을동시에갖을수있음 Ex> touchscreen: EV_SYN EV_ABS EV_KEY Touch screen 으로의 pen down/pen up 은 key 입력으로볼수있음 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 187

Android keylayout Android 는 kernel 서올라오는입력장치를 EventHub 에서처리하고, android 의 key layout file 과비교한후 App.Framework 쪽으로해당 key 값을올려줌 // include/linux/input.h #define KEY_BOOKMARKS 156 /* AC Bookmarks */ #define KEY_COMPUTER 157 #define KEY_BACK 158 /* AC Back */ #define KEY_FORWARD 159 /* AC Forward */ // i drivers/input/keyboard/mep6410-joy-buttons.c #if 0 #define KEY_HOME 102 #define KEY_BACK 158 /* AC Back */ #define KEY_MENU 139 /* Menu (show menu) */ #define KEY_SEND 231 /* AC Send */ #define KEY_END 107 #endif int keybutton_keycode[] = { KEY_HOME, KEY_MENU, KEY_BACK, KEY_END, KEY_SEND }; AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 188

Android keylayout ( 계속 ) // Android 의 Rootfs 의 /system/usr/keylayout/qwerty.kl key 158 BACK WAKE_DROPPED key 230 SOFT_RIGHT WAKE key 60 SOFT_RIGHT WAKE key 107 ENDCALL WAKE key 88 ENDCALL WAKE key 229 MENU WAKE_DROPPED key 228 POUND key 227 STAR key 231 CALL WAKE_DROPPED key 61 CALL WAKE_DROPPED key 232 DPAD_CENTER WAKE_DROPPED key 108 DPAD_DOWN WAKE_DROPPED key 103 DPAD_UP WAKE_DROPPED key 105 DPAD_LEFT WAKE_DROPPED key 106 DPAD_RIGHT WAKE_DROPPED key 115 VOLUME_UP key 114 VOLUME_DOWN key 116 POWER WAKE key 66 HOME WAKE AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 189

Android touchscreen driver Android 는정전용량방식의 touch 만을사용하도록구성 Touchscreen calibration 이 driver 에서되어있어야구조 저항막방식의 touchscreen 의경우는 calibration 이따로되어야하는구조 1. kernel 서하는방법 2. HAL 에서하는방법 등등 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 190

Android input device 의계층구조 PhoneWindowManager WindowManager KeyInputQueue KeyInputQueue - JNI EventHub Kernel AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 191

Android framebuffer driver Android 는 framebuffer 의세팅이어떻게되어있건 16bpp 로다시재세팅 Double buffering 기능을요구 frameworks/base/libs/ui/egldisplaysurface.cpp 16bpp 로고정시키고 Y resolution 을기존의두배로재세팅 Surfaceflinger 의 surface composer 기능을사용할경우 32bpp 로도프로그래밍은가능 software 적인합성처리를하는루틴을가지고있음 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 192

1 st AESOP Embedded Forum Google Android Seminar Android sound system Track 5 : 15:00 ~ 15:50 고현철 ( 고도리, 이솝임베디드포럼운영진 )

OSS architecture kernel source 의 sound/oss, arch/arm/* 참조 s3c6410_pcm.c ac97_codec.c, DMA 관련루틴 s3c6400_ac97.c Wolfson WM9713L AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 194

ALSA 시스템아키텍처 kernel 소스의 sound/soc/* 를보면된다 근래는전체구조중 SoC 에해당하는부분의 architecture 부분을분리해놓았음 ALSA core 부분 s3c6400-ac97.c smdk6400_wm9713.c AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 195

Android sound system 의개요 Android sound system Audioflinger 라는 Media Framework 서비스의일부시스템을사운드시스템으로이용 Android 는자체적으로 sound device 와유사한 audio server 시스템을구성하여이용한다 실제 audio device 를공유할수있는 sound mixing system AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 196

Android sound system 의기본구조 Android sound architecture Media framework HAL(Hardware Abstraction Layer) Real sound device driver AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 197

Audio HAL(Hardware Abstraction Layer)(1) Android audio HAL Android audio HAL 의경우기본적으로 Qualcomm 의 /dev/eac device 만지원한다. /dev/eac 의 major:minor number 는 14:3 으로 OSS 의 sound device 인 /dev/dsp 와동일한 device number 를갖는다. 이러한이유때문에단순하게 HAL 을포팅할경우는 /dev 의구성에문제가생겨서포팅에어려움이생긴다 Android device node 생성시스템은기본적으로 device driver 를 read-only 로생성을하게된다 즉, 다른 device 인 /dev/dsp 등이생성될경우 read-only 로생성되도록구성되어있음. ALSA 의경우도동일한문제발생 Qualcomm 용이아닌기존의 sound device driver 의경우는 device node 생성부분도수정해야한다. AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 198

Audio HAL(Hardware Abstraction Layer)(2) ALSA Android 는기본적으로 Qualcomm 의 audio device 만지원하기때문에, 기존의리눅스용 sound device 는직접 HAL 을코딩해야한다 ALSA 의경우도마찬가지지만, 다행히 WindRiver 의지원으로공식 Android 외의프로젝트로계속개발되고있음. alsa-lib 와 alsa_sound, asound.conf package 로구성되어있다 alsa-lib ALSA 의경우는커널의드라이버를직접제어하지못하기때문에 alsa-lib 를이용하여제어한다. 그래서 android 의 external 디렉토리에 alsa-lib 를넣고컴파일을적절하게해야한다 alsa_sound alsa-lib 를이용한 android 용 audio HAL source asound.conf alsa-lib 에서사용할 ALSA 용기본 configuration file( 반드시사용해야하는것은아님 ) AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 199

Audio HAL(Hardware Abstraction Layer)(3) OSS Qualcomm 의 /dev/eac 와비슷한방식의 HAL porting ALSA 처럼 library 를통하지않고, 직접 sound device driver 를제어하는방식으로코딩이가능 Chip vendor 에서제공하는 Linux 2.6 버전에서지원되는경우가거의없지만, ALSA 의 OSS emulation 기능을이용하면비슷한방식으로포팅이가능 Chip vendor 의경우초기개발때 OSS 로먼저포팅을하는경우가많고, ALSA emulation 이아닌직접 OSS 를개발할경우는 ALSA 보다시스템부하를줄일수있다 resampling 은 android 의 audioflinger 에서처리되기때문에 resampling 작업을하지않는다 공식적으로 OSS 로포팅된 android HAL 의경우가없기때문에직접작성해야하는어려움이있음. AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 200

Audio HAL(Hardware Abstraction Layer)(4) Device file 에대한 permission 수정 Android 의경우특별히지정하지않은경우 init process 의 device node 생성메커니즘에서 Read-only 로 device file 을생성한다 Sound Device 의경우 Read/Write 가되어야하는 device 이다 Qualcomm 의 sound device 인 /dev/eac 는 Read/Write 가되도록미리지정이되어있다 다른 device 의경우는직접조정 수정방법 system/core/init/devices.c 에서코딩으로직접조정하는방법 struct perms_ { char *name; mode_t perm; unsigned int uid; unsigned int gid; unsigned short prefix; }; static struct perms_ devperms[] = {... { "/dev/snd/", 0660, AID_ROOT, AID_AUDIO, 1 }, // 다음과같은세줄을추가한다. { "/dev/snd/dsp", 0660, AID_ROOT, AID_AUDIO, 0 }, { "/dev/snd/mixer", 0660, AID_ROOT, AID_AUDIO, 0 }, { NULL, 0, 0, 0, 0 }, }; AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 201

1 st AESOP Embedded Forum Google Android Seminar Android Sound HAL Porting(OSS) Track 5 : 15:00 ~ 15:50 고현철 ( 고도리, 이솝임베디드포럼운영진 )

Android sound subsystem 의 class 구조 Android sound subsystem 의구조 Android sound subsystem 의 class 구조와흐름은다음과같다. AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 203

Android sound subsystem 의구조 Android sound system 초기화 Android sound system 의초기화는 init process 가 init.rc 의내용을실행시킬때 mediaserver 가실행되면서 AudioFlinger 가초기화되면서시작된다 System 의 init 과정에서 AudioFlinger 가생성이될때 AudioHardwareInterface 가초기화된다. 이 AudioHardwareInterface 는 Android audio device 의 Hardware Abstraction Layer 라고얘기할수있다. 초기화후 Routing 세팅 AudioFlinger system 초기화시 Hardware 의초기화가끝나면 audio system 의 routing 에대한정보를세팅하게된다 출력 : 스피커혹은헤드셋, Bluetooth 등 입력 : 마이크혹은 line-in 등 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 204

Android sound HAL 의 class 구조 (1) Android sound HAL 포팅시필요한 class list Android sound HAL 관련소스는다음과같은파일에분산되어있다 hardware/libhardware_legacy/include/hardware_legacy/audiohardwareinterface.h hardware/libhardware_legacy/include/hardware_legacy/audiohardwarebase.h frameworks/base/libs/audioflinger/audiohardwareinterface.cpp 위의파일에서 AudioHardwareBase.h 는 AudioHardwareInterface.h 의클래스로부터상속된구조이며 실제 Android Audio HAL 을구성하는 AudioHardwareInterface class 에대한정의는 AudioHardwareInterface.h 에있다 Audio HAL 을호출하는실제코드는 AudioHardwareInterface.cpp 에있으며, 여기서 HAL 에대한생성, 존재유 / 무체크등을처리 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 205

Android sound HAL 의 class 구조 (2) Android sound subsystem HAL class Android sound HAL 관련 class 는 AudioHardwareInterface.h 에정의되어있는다음과같은세개의 class 이다 Namespace namespace android class AudioHardwareInterface class AudioStreamOut class AudioStreamIn Qualcomm 용 audio device 가아닐경우는다음과같은함수가반드시필요하다 AudioHardwareInterface* createaudiohardware(void); Qualcomm 용의경우는 AudioHardwareGeneric class 에대한생성을직접하고, 그외의경우는 createaudiohardware() 를이용해서새로운 audio hardware 를초기화한다 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 206

1 st AESOP Embedded Forum Google Android Seminar Android Binder Track 5 : 15:00 ~ 15:50 고현철 ( 고도리, 이솝임베디드포럼운영진 )

1 st AESOP Embedded Forum Google Android Seminar Binder 의개요 Track 5 : 15:00 ~ 15:50 고현철 ( 고도리, 이솝임베디드포럼운영진 )

UNIX InterProcess Communication(IPC) BSD 계열에서의 Socket BSD 4.2 에서부터생성된 UNIX Domain Socket System V 계열에서의 IPC Message Queue Semaphore Shared Memory IPC 는 process 간의약속일뿐이다 시스템레벨에서관리하지는않는다. AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 209

System V IPC 동작의개념 Process A 에서 B 로데이터를전송할경우의예제 Process A Process B user space 1> MSG Q 를이용 Data 전송한다는메시지를보낸다. MSG Q 2> 받은 MSG 가있다고알려준다. Kernel space 4> data 전송했다고메시지를보낸다. 5> data 전송했다고메시지를보낸다. Shared MEMORY 3> 전송할데이터를커널공유영역에넣는다. 3-1> 이때 semaphore 를사용한다 ( 공유문제 ) 6> 커널공유영역에서 data 를가지고간다 6-1> 이때 semaphore 를사용한다 ( 공유문제 ) AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 210

OpenBinder 의개요 Binder 란? 새로운 component-based 시스템레벨디자인을지원할수있도록설계된 open source 솔루션 Binder 의특징 프로세스간의 Resource Management binder 는 Application 에중심을두기보다는시스템지향적인시스템이다. 새로운컴포넌트기반시스템레벨의개발을지원함 다양한기본서비스를위한컴포넌트 / 오브젝트를가지고있음. Binder 자체로는특정한 thread 모델을지원하지않음 Binder 는상용수준의시스템레벨서비스를구현하는데넓게사용되어왔음 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 211

왜 Binder 를사용하는가?( 계속 )/History Robust Application Diaplay 와자원을사용하는패턴이일반 desktop 에서보다많이틀리다. Desktop-style 윈도우관리는일반적으로터치스크린등을사용하지않기때문에 UI 등의구성이 Mobile 디바이스에서와는매우다르다. Sandbox 와같은역할을한다 ( 뒤에설명 ) History 1998 Binder is developed by BeOS. 2001 Palm Company acquired BeOS. 2001 Palm s Micro Kernel is consist of Binder. 2004 netbsd Cobalt Kernel http://www.netbsd.org/ports/cobalt/ AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 212

1 st AESOP Embedded Forum Google Android Seminar Binder 의구성 Track 5 : 15:00 ~ 15:50 고현철 ( 고도리, 이솝임베디드포럼운영진 )

Binder driver 구조분석 Android kernel 에서의 binder 의위치 Android kernel의경우 version에따라그위치가틀림. 2.6.29 kernel의경우 binder소스는다음디렉토리에위치 drivers/staging/android/binder.h drivers/staging/android/binder.c Binder 는 misc device 로등록이된다 /dev/binder 로나타남 등록이될경우 proc filesystem 을이용해서정보확인 /proc/binder 디렉토리생성 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 214

Service Manager 개요 Service Manager 란 Android 내부에서 Binder 의통신과제어를담당. Service manager 는 daemon process 이며다양한 service 를제공하는역할을담당 Binder driver 인 /dev/binder 통신 / 제어를관리. Binder 를위한 context manager 로 binder 관련 handle 에대한등록과검색처리를해준다. Android root filesystem 에서실행파일 path 는 /system/bin/servicemanager AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 215

Service Manager 동작 (1) Service Manager 동작은다음과같다 binder driver에대한제어를담당 드라이버에대한 system call 처리 Service Manager (User Process) 무한루프 Open mmap ioctl (BINDER_SET_CONTEXT MGR) ioctl (BINDER_WRITE_READ) Android Binder Device Driver (/dev/binder, 커널영역 ) AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 216

Service Manager 동작 (2) service_manager 프로세스의 code 의동작은다음과같다. open (): open binder driver mmap (): mapping of a 128 * 1024 bytes of memory ioctl (BINDER_SET_CONTEXT_MGR): set the context for the mgr 메인루프인 binder_loop () 에서는 ioctl (BINDER_WRITE_READ) 를이용해서읽고 binder_parse() 를이용해서 binder를다루는루틴으로들어간다 binder_parse() 함수 ioctl() 로 read된 data를 cmd변수로받고 BR_TRANSACTION처리에서는 service를증가시키고, 감시하기위하여 code: void binder_loop(struct binder_state *bs, binder_handler func) binder_loop() 의두번째인자로입력된 func를호출한다 func는 svcmgr_handler() 임 이 func는 binder_parse() 함수의마지막인자로입력됨 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 217

1 st AESOP Embedded Forum Google Android Seminar Android framework 에서의 Binder Track 5 : 15:00 ~ 15:50 고현철 ( 고도리, 이솝임베디드포럼운영진 )

Android Binder 핵심부분 (1) Android 의 Binder 관련핵심부분 utils 라이브러리는 Android의 Binder관련핵심이다 이핵심부분은컴파일된후 libutils.so로구성되며 Android 시스템에서의 public library로사용된다. File 의경로 OpenBinder 에서의경로 include/utils/* libs/utils/* Android 소스에서의경로 frameworks/base/include/utils/* frameworks/base/libs/utils/* AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 219

Android binder 기본동작 Service Manager 가 binder 에서의 Context Manager 로등록된다 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 220

Android Binder 핵심부분 (1) Binder 관련전체클래스에대한구조는다음과같다. AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 221

Android Binder 핵심부분 (2) ( 계속 ) IServiceManager.h: Service Manager 인터페이스관련 header IPermissionController.h: 접근제어클래스 binder 와연동이되는여러개의메모리관련클래스들이다음과같이존재한다. IMemory.h IMemoryHeap 과 BnMemoryHeap class 와관련된메모리인터페이스에대한정의와일반적인메모리 class 인 IMemory 와 BnMemory 에대한내용이있다 MemoryHeapBase.h BnMemoryHeap 으로부터상속된 MemoryHeap 에대한정의 MemoryBase.h BnMemory 로부터상속된 MemoryBase 에대한정의 일반적으로프로세스에있어 heap memory 를사용하는것은 MemoryHeapBase 사용에대한것을기본으로한다 (malloc 과같은 ), 이와는대조적으로 MemoryBase 는하나의메모리로부터이미할당된 heap memory 를사용한다. AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 222

Android Binder 핵심부분 (3) IInterface.h Binder Interface관련 Template이지정된 header BnInterface BpInterface BnInterface Template Native Interface 작성시사용 Binder 의 server 파트코드에서사용됨 BpInterface Template Proxy Interface 작성시사용 Binder 의 client 파트코드에서사용됨 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 223

Android Binder 핵심부분 (4) Binder 사용 Interface 선언 사용자정의 Binder interface 인 Bp 로시작되는 Class 를만들때 INTERFACE 에서상속된두 Template BnInterface 와 BpInterface 를사용함. BpInterface 를이용해서 Proxy Class 를선언할경우는일반적인방법으로선언하지않고매크로를이용해서선언한다. BpXXX Interface 선언방법 DECLARE_META_INTERFACE IMPLEMENT_META_INTERFACE 위의두개의 macro 를이용해서선언 BnInterface 를이용해서 Native Class 를선언할경우는 BnXXX 의형태로직접선언한다. 그러므로, Binder 관련 IPC 에대한코드를분석할경우는 BpXXX 의인터페이스는관련 Macro 를조사해야한다. AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 224

Binder 의동작메커니즘 (1) Binder 의기본동작메커니즘은다음과같다. Binder 를동작시키기위해서는앞에서설명한 libutils.so, service manager 등을이용한다. 자세한동작모델은다음과같다. AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 225

Binder 의동작메커니즘 (1)( 계속 ) service manager 는 process communication 이필요한두개의 process 에서비스를시작하게해주는복잡한 daemon process 이다. 두개의 process 는 libutil.so 를호출함으로서통신이이루어지며, 실제통신에서는커널 space 의 shared memory 영역을사용하게된다. Application 입장에서의 Binder application 입장에서바라봤을경우에는 binder 에대해 2 개의관점으로볼수있다. Native local for example BnABC, 이 class 를실제로구현하기위해서는상속받는것이필요하다. Proxy agent client for example BpABC, 실현되어있는 interface 에대한 framework 이다. 하지만인터페이스는 class 를그대로반영하지는않는다 (not reflect) for example, 실제로 BpABC 를호출했을때 client interface ABC 가된다. AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 226

Binder 의동작메커니즘 (1) Application 입장에서의 Binder Application 입장에서의 Binder 의동작은다음과같다. AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 227

Binder 의동작메커니즘 (1)( 계속 ) Native 함수 (local) 인 Bn 이맡는부분 IServiceManager::AddService() 를이용해서 service 를등록 BnABC::onTransact() 을실행한다. Proxy 함수인 Bp 가맡는부분 client 의요청을받아서해당함수를실행한다. BpABC::remote()->transact() 함수를호출 ( 해서접속함 ) client 가맡는부분 : ABC 에대한 aceess 를획득하기위하여, 인터페이스함수를호출한다 이함수들은사실은 BpABC 를호출하는것이다. 그리고나서 BnABC 로의 IPC 통신을하게된다. 그리고, client 의동작에관련된함수들을호출한다 프로세스의생성이끝나면 BnABC 와 BpABC 인터페이스는 ABC 를상속한다. AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 228

Binder 의동작메커니즘 (2) Application 입장에서의 Binder BpABC 의동작 (Service user) BpABC 는일반적인함수호출에서와같이실행 구현된 class 는실제통신에의응답을반영하도록작성하지만실제함수로는구현되지않는다 즉, 통신개념이기때문에실제의코드동작은 BnABC 쪽에서이루어진다. BnABC 의동작 (Server provider) BnABC 는실제로맡은일을수행하는부분의코드 이를위해서 Class 상속이실제로필요한인터페이스클래스 BpABC 요청에따른처리를하기위해구현된실제동작함수들로이루어져있음 BpABC 의요청에따른응답을 reply 값으로돌려줌 return 값과 reply 값은틀린개념이다 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 229

Binder 의동작메커니즘 (2)( 계속 ) IServiceManager 로부터 service 를획득한 client ABC 인터페이스는, client interface 를호출한다. 실제이호출은 BpABC 에대한호출이다. Binder 의 IPC 메카니즘을통해서 BpABC 와 BnABC 는통신을하게되고, BnABC 는실제특정타입에대한기능을실현하게된다 ( 특정 class 기능실행 : ex> camera interface). 사실, 두개의프로세스는서버와클라이언트의관계로실제단단하게연결이맺어지게된다. 이것은 process 간의통신으로생각할필요가없이, client 에서직접적으로프로세스간의함수를호출하는것처럼보인다. 물론, 이함수들은반드시 ABC 에정의되어있어야한다 (Bp, Bn.. 양쪽다...) AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 230

Binder 의동작메커니즘 (2)( 계속 ) IServiceManager 동작 IServiceManager 는 IServiceManager.h 와 IServiceManager.cpp 에해당코드가있다. IServiceManager 는 ServiceManager daemon 으로부터실행이되며, 사용자프로그램은 BpServiceManager 를통해서다른서비스를요청할수있다. IServiceManager.h 에는다음과같은 default IServiceManager 인터페이스가정의되어있다. CODE: sp<iservicemanager> defaultservicemanager(); AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 231

Binder 의서비스의실현 (1) Binder 서비스의시작 BnABC 서비스의시작 Process 에대한보호처리를끝낸후에시작되는 local service 는 BnABC 상속에의해실제 class 가실체화됨으로써제공되게된다. service 의이름은일반적으로 ABC 라고이름을붙이게된다. 보통 ABC 라는 service 는 instantiate() 라는함수를포함하고있으며, 이함수는일반적으로다음과같은형태가된다. void ABC::instantiate() { defaultservicemanager()->addservice( String16("XXX.ABC"), new ABC ()); } 위와같은방법으로 defaultservicemanager() 을호출함으로써, "XXX.ABC" services 를기존의서비스들에추가하게됨. AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 232

Binder 의서비스의실현 (2) Binder 서비스의시작 ( 계속 ) BpABC 접속의시작 BpABC 는주로데이터를전송하기위하여 mremote->transact() 를호출하는과정을거친다. mremote 는 BpRefBase 클래스의멤버이다. 이것이 IBinder 이며, 실제함수가호출되는과정의흐름은다음과같다. mremote () -> transact () Process:: self () IPCThreadState:: self () -> transact () writetransactiondata () waitforresponse () talkwithdriver () ioctl (fd, BINDER_WRITE_READ, & bwr) IPCThreadState:: executecommand () 함수에서실제전송이이루어진다. AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 233

Binder 의서비스의실현 (3) Service Provider(server 라고표현이가능한 ) 는 service manager 에등록을해서서비스할수있는대기상태로존재하게된다. defaultservicemanager() 는다음과같은함수들을호출하게된다. ProcessState::self()->getContextObject(NULL)); IPCThreadState* ipc = IPCThreadState::self(); IPCThreadState::talkWithDriver() ProcessState class 는생성자에서 open_driver() 를호출해서 talkwithdriver() 를구현한프로세스에접근할수있는통로를설정하게된다. AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 234

Binder 의핵심제어흐름 Binder 를이용한 IPC 의핵심블록 4 개는다음과같다. Binder Driver IPC system 의핵심이다. service provider 와 service user 사이의 data 를통과시킨다. Service provider 몇가지 service 를제공한다. binder driver 로부터받은 RPC call data 를 parse 한다. Service manager 특별한 service provider 이다. 다른 service provider 에게 manager service 서비스를제공한다. Service user 원격 service provider 를원격호출한다. RPC call data 를생성하고 binder driver 에게보낸다. AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 235

Summary Binder 와 Binder 를이용한서비스의구조 Android IPC system 의전체구조 다음과같은네개의중요블록이있다. Binder Driver Service provider Service manager Service user AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 236

Binder 의핵심제어흐름 (1) Binder 를통한 Android IPC 의핵심제어흐름은다음과같다. 여기서는 Android 의 AudioFlinger servide 를예로사용한다. SERVER: IAudioFlinger Service server CLIENT: IAudioFlinger 로 service 를요청한일반 client process 1. service_manager 는처음실행되고, binder driver 에게 special node 0 를등록한다. 2. media_server 는 special node 0 을위해 IServiceManager proxy object 를얻는다 3. media_server RPC 는 IAudioFlinger service 를추가하기위해 IServiceManager:addService 를호출한다. 이호출은 node 0 로향한다. binder driver 에서 data 를보낼것이다. AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 237

Binder 의핵심제어흐름 (2) 4. binder driver 는 data 가 node 0 을위한것인지알린다. data 는 object 를 biner 하기위한 command 를가지고있다. 그래서 IAudioFlinger seriver 를위해 another node(assume SERVER) 를생성하고 service_manager 에게 data 를보낸다. 5. service_manager 는 binder driver 로부터 data 를읽고, IServiceManager::addService RPC call 를처리한다. 6. another process CLIENT 는 special node 0 을위해 IServiceManager proxy object 를얻는다. 7. CLIENT RPC 는 IAudioFlinger service 를얻기위해 IServiceManager::getService 를호출한다. 이호출은 node 0 을향한것이다. 그것은 binder driver 에게 data 를보낸다. 8. bider driver 는 data 가 node 0 을위한것인지알리고 service_manager 에게 data 를보낸다. 9. service_manager 는 binder driver 로부터 data 를읽고 IServiceManager:getService RPC call 를처리하고 IAudioFlinger service 를나타내는 node SERVER 로돌아간다. AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 238

Binder 의핵심제어흐름 (3) 10.CLIENT RPC 는 IAudioFlinger::setMode 를호출한다. 그리고이호출은 node SERVER 로향한다. 11.binder driver 는 data 가 node SERVER 것이지알린다. 그리고 media_server 로 data 를보낸다. 12.media_server 는 binder driver 로부터 data 를읽는다. IAudioFlinger::setMode RPC call 를처리하고, binder driver 에게 reply data 를보낸다. 13.binder driver 는 CLIENT 에게 reply 를보낸다. 14.CLIENT 는 binder driver 에게서 data 를읽는다. 그리고 reply 를얻는다. AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 239

1 st AESOP Embedded Forum Google Android Seminar Android Hardware Abstraction Layer #2 Track 5 : 15:00 ~ 15:50 고현철 ( 고도리, 이솝임베디드포럼운영진 )

1 st AESOP Embedded Forum Google Android Seminar Android Camera Interface Track 6 : 16:00 ~ 16:50 고현철 ( 고도리, 이솝임베디드포럼운영진 )

1 st AESOP Embedded Forum Google Android Seminar Linux camera 개요 Track 6 : 16:00 ~ 16:50 고현철 ( 고도리, 이솝임베디드포럼운영진 )

Linux camera subsystem 개요 리눅스시스템상에서의카메라. 일반적인 PC 용 USB 카메라 모바일기기의 SOC 기반의카메라인터페이스 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 243

Linux camera subsystem 의 interface 리눅스시스템상에서의카메라의구현 V4L2(Video for Linux 2) 일반적인 PC 용 USB 카메라 - PC 기반에서는 USB 드라이버를통해카메라가인식되기때문에 USB 용드라이버를작성하면된다. 모바일기기의 SOC 기반의카메라인터페이스 - 모바일 CPU 에서는 SoC 형태의카메라인터페이스의드라이버를통해카메라모듈에서보내는영상을받아들이고요즘은주로 I2C 버스를통해모듈을컨트롤한다. AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 244

1 st AESOP Embedded Forum Google Android Seminar Android camera Track 6 : 16:00 ~ 16:50 고현철 ( 고도리, 이솝임베디드포럼운영진 )

Android Camera 의전체구조 MediaFramework 에서 Camera 가작동 C/C++ 언어를자바언어에서사용가능토록함 V4L2 Real Camera AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 246

Android module 별구조 Android camera architecture Media framework HAL(Hardware Abstraction Layer) Real camera device driver AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 247

Android Camera Framework Camera 전체 Framework Android Camera 는복잡한구성으로되어있다. JAVA 를이용한 Application 이고, 실제코드는 C,C++ 로이루어졌기때문에, 그인터페이스가여러모듈로분산되어있어복잡하다. 카메라관련 Class 간의구성은다음과같다 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 248

Android Camera Framework Camera 전체 Framework JAVA Program 이최상위 Application 으로동작한다. 이 Application 은 Android 용 JAVA VM 인 Dalvik VM 에의해해석된다. (SDK 에서 Dalvik bytecode 로만들수있게되어있다.) Android Runtime 에의해 Camera 관련 Library 가호출되고 Library 에서는복잡한 Binder 통신을통해 HAL 계층과연결된다. 그리고결국실제 Camera 단에이르러 Camera 를작동시킬수있다. AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 249

Android Camera Framework Android Multimedia Architecture 는전체적으로같은구조 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 250

Camera Library 의내부 Camera Library 의내부동작 Camera Library 내부는 Client 와 Server 두부분으로되어있다. Android Process 간 Binder 라는 Interface 이용해통신한다. Camera 프로그램은 Server 의함수를호출하기위하여 Client 의인터페이스를호출한다. 이동작은실제로 Client 가 Server 의함수를직접호출하는것처럼보여지고, IPC 통신 (Binder) 부분은보이지않는다. Camera Client Bp Binder Camera Sever Bn Kernel AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 251

Android camera class 구조도 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 252

Camera framework 의 code flow AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 253

Camera.h IInterface IBinder::DeathRecipient BnInterface <ICameraClient> ICameraClient Camera Interface client 인 BnCameraClient 정리하면 ICameraClient 는 IInterface 와 IBinder::DeathRecipient 의두개로부터상속된타입. Camera Interface client 인 BnCameraClient 는 BnInterface <ICameraClient> 로부터상속되었다. AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 254

Camera Service 부분 frameworks/base/camera/libcameraservice/ 이디렉토리의파일들은 Camera service 의구현을담당한다. Camera Service 는 ICameraService 의계승함으로써실제서비스가이루어 진다. frameworks/base/camera/libcameraservice/android.mk 에서 USE_CAMERA_STUB 이란변수를이용하여실제카메라를사용할것인지 아닌지결정한다. 만일이변수가 true 라면 CameraHardwareStub.cpp, FakeCamera.cpp 파 일을컴파일하고 false 면 CameraService.cpp 만사용해서 Camera service 를구성하게된다. AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 255

Camera Service 부분 ICamera BnCameraService CameraService CameraService.cpp 에서실제내용구현 내부적으로 BnCamera 로부터상속된 CameraService::Client 를갖게된다. CameraService::connect() 함수에서 CameraService::Client 를사용해서 Camera 기능을시작. CameraService::Client 는 BnCamera 로부터상속. BnCamera 는 ICamera 로부터상속. => CameraService::Client 는 ICamera class 의종류가된다. AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 256

Camera Service 부분 Camera Service 의시작은다음의함수에서이루어진다. frameworks/base/camera/libcameraservice/cameraservice.cpp void CameraService::instantiate() { defaultservicemanager()->addservice( String16("media.camera"), new CameraService()); } CameraService::instatiate() 함수에서등록되는 media.camera" service 는 framwork/base/libs/ui/camera.cpp 의 Camera::getCameraService() 에서호출되는 Service 의이름과일치한다. AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 257

실제 Camera hardware routine Camera Hardware Open 과정 CameraService.cpp 의 Client 생성할때 opencamerahardware() 함수호출 createinstance() 함수호출 CameraHardwareStub 을생성 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 258

1 st AESOP Embedded Forum Google Android Seminar Android Power Management 기법 Track 7 : 17:00 ~ 17:50 최종환 (Linux/Android Porting 전문가, Linux DVR/Qualcomm MSM7xxx Android Porting)

Power Management? 제한된 RESOURCE 를필요한경우에만최소한으로사용하여오랫동안사용한다. Linux Power management 는 Hardware component 의 Power Management 기능을상황에맞게적절하게사용하여최대의효과를 발휘하도록하는것이다. 한방에큰효과를볼수없다. 티끌모아태산이다. Prolong Life AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 260

Linux frameworks to support PM AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 261

Linux frameworks to support PM AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 262

Linux PM technologies Linux tickless kernel Linux CPUFREQ subsystem Linux core PM susbsystem Linux Clock framework Linux Regulator framework Linux Idle framework Linux Quality of Service(QOS) Wakelock (google 에서 kernel 에추가 ) AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 263

Linux tickless kernel (Dynamic tick) Linux kernel Version 2.6.21 부터추가 CONFIG_NO_HZ=y CONFIG_GENERIC_CLOCKEVENTS=y 도항상 CONFIG_NO_HZ 와함께 enable 해야한다. 리눅스커널에서 1 초에 100 번에서 1000 번까지의고정된타이머인터럽터를발생. 시스템이바쁘게동작중인경우에는문제가없으나유휴상태에있는경우에는 CPU 를유휴상태에두지않고쓸데없이깨우게되어필요없는전력소비를유발. Tickless kernel 의최종목적은필요할때만 timer interrupt 를발생시켜 전력의낭비를줄인다. AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 264

Dynamic tick: before # echo 1 > /proc/timer_stats; sleep 10; echo 0 > /proc/timer_stats # cat /proc/timer_stats Timer Stats Version: v0.2 Sample period: 10.079 s 1008, 6 khelper tick_setup_sched_timer (tick_sched_timer) 11, 1 swapper phy_start_machine (phy_timer) 40, 1 swapper usb_hcd_poll_rh_status (rh_timer_func) 5, 1 swapper schedule_delayed_work_on (delayed_work_ti 2, 0 swapper page_writeback_init (wb_timer_fn) 2, 275 thttpd schedule_timeout (process_timeout) 2, 5 events/0 netdev_watchdog_up (dev_watchdog) 2, 0 swapper neigh_add_timer (neigh_timer_handler) 1, 1 swapper neigh_table_init_no_netlink (neigh_period 1, 709 sleep do_nanosleep (hrtimer_wakeup) 1074 total events, 106.558 events/sec AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 265

Dynamic tick: after # echo 1 > /proc/timer_stats; sleep 10; echo 0 > /proc/timer_stats # cat /proc/timer_stats Timer Stats Version: v0.2 Sample period: 10.061 s 8, 0 swapper tick_nohz_restart_sched_tick (tick_sched_t 40, 1 swapper usb_hcd_poll_rh_status (rh_timer_func) 54, 0 swapper tick_nohz_stop_sched_tick (tick_sched_time 5, 1 swapper schedule_delayed_work_on (delayed_work_tim 10, 1 swapper phy_start_machine (phy_timer) 2, 275 thttpd schedule_timeout (process_timeout) 2, 5 events/0 netdev_watchdog_up (dev_watchdog) 2, 0 swapper page_writeback_init (wb_timer_fn) 1, 5 events/0 queue_delayed_work (delayed_work_timer_fn) 1, 1 swapper neigh_table_init_no_netlink (neigh_periodi 1, 281 sleep do_nanosleep 126 total events, 12.523 events/sec AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 266

Linux core PM subsystem CONFIG_PM=y arch/arm/plat-s3c64xx/makefile:obj-$(config_pm) arch/arm/plat-s3c64xx/makefile:obj-$(config_pm) kernel/obj-$(config_pm) += power/ += pm.o += sleep.o include/linux/suspend.h struct platform_suspend_ops { truct platform_suspend_ops nt (*valid)(suspend_state_t state); int (*begin)(suspend_state_t state); int (*prepare)(void); int (*enter)(suspend_state_t state); void (*finish)(void); void (*end)(void); void (*recover)(void); }; AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 267

Linux core PM subsystem arch/arm/plat-s3c64xx/pm.c static struct platform_suspend_ops s3c6410_pm_ops = {.enter = s3c6410_pm_enter,.valid = suspend_valid_only_mem, }; int init s3c6410_pm_init(void) { printk("s3c6410 Power Management, (c) 2008 Samsung Electronics\n"); } ~ suspend_set_ops(&s3c6410_pm_ops); return 0; kernel/power/main.c void suspend_set_ops(struct platform_suspend_ops *ops) { mutex_lock(&pm_mutex); suspend_ops = ops; mutex_unlock(&pm_mutex); } AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 268

Linux CPUFREQ subsystem Running 모드에서동적으로 CPU frequency 변경 CPU 의 load 가증가하면 Increase frequency CPU 의 load 가감소하면 Reduce frequency CPU clock speed 와 power 소비가줄어든다. governor 에의해다른모드로동작. Drivers/cpufreq CONFIG_CPU_FREQ CONFIG_CPU_FREQ_GOV_PERFORMANCE CONFIG_CPU_FREQ_GOV_POWERSAVE CONFIG_CPU_FREQ_GOV_USERSPACE CONFIG_CPU_FREQ_GOV_ONDEMAND CONFIG_CPU_FREQ_GOV_CONSERVATIVE AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 269

Linux CPUFREQ subsystem Performance 항상 Highest frequency 로동작 Powersave 항상 lowest frequency 로동작 Userspace echo userspace > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor echo 256000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed Onedemand CPU load 에기반하여 frequency 설정 Conservative Onedemand 와유사한방식으로동작 Onedemand 에비해 frequency 증가 / 감소빈도가적다 Battery 전원을사용할때유리하다. AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 270

Linux CPUFREQ subsystem AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 271

Linux Clock framework Generic framework to manage clocks used by devices in the system Include/linux/clk.h clk_get() : get a referenc to a clock clk_enable (): start the clock clk_disable (): stop the clock clk_put (): free the clock source clk_get_rate (): get the current rate linux-2.6-samsung/drivers/video/samsung$ vi s3cfb2.c int s3cfb_resume(struct platform_device *pdev) { clk_enable(ctrl->clock); } int s3cfb_suspend(struct platform_device *pdev, pm_message_t state) { clk_disable(ctrl->clock); } AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 272

Linux Regulator framework Designed to provide a standard kernel interface to control voltage and current regulators. Allow systems to dynamically control regulator power output in order to save power and prolong battery life. CONFIG_REGULATOR=y linux-2.6-samsung/include/linux/regulator/consumer.h regulator_get() : get a reference to a regulator regulator_put() : free the regulator source regulator_enable() : enable regulator output regulator_disable() : disable regulator output regulator_is_enabled() : is the regulator output enabled AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 273

Linux Idle framework drivers/cpuidle CONFIG_CPU_IDLE=y CPU_IDLE_GOV_LADDER=y depends on CPU_IDLE CONFIG_CPU_IDLE_GOV_MENU=y depends on CPU_IDLE && NO_HZ CPU 는각기다른특성을지닌 idle states 를지원한다. power consumption, state preservation, entry/exit latency Platform-independent governor(ladder & menu) 지원 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 274

Linux Idle framework AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 275

Linux Regulator framework Designed to provide a standard kernel interface to control voltage and current regulators. Allow systems to dynamically control regulator power output in order to save power and prolong battery life. CONFIG_REGULATOR=y linux-2.6-samsung/include/linux/regulator/consumer.h regulator_get() : get a reference to a regulator regulator_put() : free the regulator source regulator_enable() : enable regulator output regulator_disable() : disable regulator output regulator_is_enabled() : is the regulator output enabled AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 276

Linux Quality of Service(QOS) Power management Quality Of Service 는 2.6.25 에추가 Power management 는 some work loads 에영향을줄수있다. PM QoS 는 kernel code 와 applications 이다음과같은요구사항을 설정하도록한다. CPU DMA latency Network latency Netwotk throughput 위와같은요구사항에따라 PM QoS 는커널 driver 가 power management 를조정하도록한다. include/linux/pm_qos_params.h include/linux/pm_qos_params.h int pm_qos_add_requirement(int qos, char *name, s32 value); int pm_qos_update_requirement(int qos, char *name, s32 new_value); void pm_qos_remove_requirement(int qos, char *name); int pm_qos_requirement(int qos); int pm_qos_add_notifier(int qos, struct notifier_block *notifier); int pm_qos_remove_notifier(int qos, struct notifier_block *notifier) AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 277

Suspend & Resume driver/power : Power Supply Class, Battery 드라이버 driver/base/power : dpm_list 관리 kernel/power : PM subsystem core function Suspend To Ram/Suspend To Disk platform_driver_register / platform_device_register struct platform_suspend_ops platform_device_register() : add a platform-level device -> platform_add_device() : add a numbers of platform devices -> device_add() : add device to device hierarchy. -> device_pm_add() : add a device to the list of active devices AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 278

Suspend to RAM CONFIG_SUSPEND=y Freeze all tasks Suspend all devices (Usually) put the DRAM into a self-refresh mode Set the CPU into the deepest sleep state and wait for a wake-up event On wake-up, set the DRAM to normal refresh mode Resume all devices Thaw all tasks AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 279

Suspend-to-disk CONFIG_HIBERNATION=y Freeze all tasks Suspend all devices Take a snapshot of the system image and store it in a swap partition on disk Power off On boot up, kernel tests for a valid image and loads if found Suspend then resume all devices to bring them into the same state as when the image was created Thaw all tasks AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 280

Driver support for suspend & resume Drivers that want to participate must Implement suspend - set device into power saving state resume - return device to normal operation linux-2.6-samsung/drivers/video/samsung/s3cfb2.c static struct platform_driver s3cfb_driver = {.probe = s3cfb_probe,.remove = s3cfb_remove,.suspend = s3cfb_suspend,.resume = s3cfb_resume,.driver = {.name = S3CFB_NAME,.owner = THIS_MODULE, }, }; platform_driver_register() 통해등록 AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 281

Power management user interface Possible states are in /sys/power/state standby Power-On-Suspend mem - full suspend-to-ram disk - Suspend-to-disk Set state by writing the state to the file, e.g. echo mem > /sys/power/state include/linux$ vi suspend.h #define PM_SUSPEND_ON (( force suspend_state_t) 0) #define PM_SUSPEND_STANDBY (( force suspend_state_t) 1) #define PM_SUSPEND_MEM (( force suspend_state_t) 3) #define PM_SUSPEND_MAX (( force suspend_state_t) 4) kernel/power/main.c static const char * const pm_states[pm_suspend_max] = { [PM_SUSPEND_STANDBY] = "standby", [PM_SUSPEND_MEM] = "mem", }; AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 282

Android Power Management? Android Power Management 는전통적인 Linux PM 기반에서동작 Wakelock Added in kernel for Android Suspend 에빠지기전에 driver 나 application 이작업을마칠수 있도록기회를준다.-> suspend 로빠지는것을막는다. Kernel/power 에추가 obj-$(config_wakelock) += wakelock.o obj-$(config_user_wakelock) += userwakelock.o obj-$(config_earlysuspend) += earlysuspend.o obj-$(config_console_earlysuspend) += consoleearlysuspend.o obj-$(config_fb_earlysuspend) += fbearlysuspend.o Suspend/Resume 기능을 /sys 통해사용한다. User 의 key press timeout AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 283

Android Power Management frameworks/base/core/java/android/os/ PowerManager.java frameworks/base/core/java/android/os/power.java s frameworks/base/services/java/com/android/ server/powermanagerservice.java frameworks/base/core/jni/ android_os_power.cpp hardware/libhardware_legacy/power/power.c kernel/power/main.c AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 284

# echo > mem /sys/power/state System running kernel/power/main.c->state_store kernel/power/main.c->enter_state kernel/power/main.c->suspend_prepare kernel/power/main.c-> suspend_devices_and_enter driver/base/power/main.c->device_suspend drviers/base/power/main.c-> dpm_suspend : Suspend every device. kernel/power/main.c->suspend_enter arch/arm/plat-s3c64xx/pm.c -> s3c6410_pm_enter(suspend_state_t state) kernel/power/main.c ->device_resume driver/base/power/main.c -> dpm_resume : Resume every device kernel/power/main.c->resume_console kernel/power/main.c ->suspend_finish kernel/power/main.c -> enable_nonboot_cpus() SUSPEND AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 285

Design and Implementation AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 286

Design and Implementation frameworks/base/core/jni/android_os_power.cpp static JNINativeMethod method_table[] = { { "acquirewakelock", "(ILjava/lang/String;)V", (void*)acquirewakelock }, { "releasewakelock", "(Ljava/lang/String;)V", (void*)releasewakelock }, { "setlastuseractivitytimeout", "(J)I", (void*)setlastuseractivitytimeout }, { "setscreenstate", "(Z)I", (void*)setscreenstate }, { "shutdown", "()V", (void*)android_os_power_shutdown }, { "reboot", "(Ljava/lang/String;)V", (void*)android_os_power_reboot }, }; AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 287

Design and Implementation const char * const OLD_PATHS[] = { "/sys/android_power/acquire_partial_wake_lock", "/sys/android_power/release_wake_lock", "/sys/android_power/request_state" }; const char * const NEW_PATHS[] = { "/sys/power/wake_lock", "/sys/power/wake_unlock", "/sys/power/state" }; static const char *off_state = "mem"; static const char *on_state = "on"; static inline void initialize_fds(void) { if (g_initialized == 0) { if(open_file_descriptors(new_paths) < 0) { open_file_descriptors(old_paths); on_state = "wake"; off_state = "standby"; } g_initialized = 1; } } AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 288

Etc kernel/printk.c int console_suspend_enabled = 1; -> 0 일경우 suspend_console 동작안함 EXPORT_SYMBOL(console_suspend_enabled); static int init console_suspend_disable(char *str) { console_suspend_enabled = 0; return 1; } setup("no_console_suspend", console_suspend_disable); /** * suspend_console - suspend the console subsystem * This disables printk() while we go into suspend states */ void suspend_console(void) { if (!console_suspend_enabled) return; printk("suspending console(s) (use no_console_suspend to debug)\n"); acquire_console_sem(); console_suspended = 1; } AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 289

감사합니다. AESOP Embedded Forum Android 1 st Seminar : http://www.aesop.or.kr 290