Openmoko

Similar documents
华恒家庭网关方案

epub83-1

2/80 2

Microsoft Word - 第1章 Android基本概念.docx

第 15 章 程 式 編 写 語 言 15.1 程 式 編 写 語 言 的 角 色 程 式 編 寫 語 言 是 程 式 編 寫 員 與 電 腦 溝 通 的 界 面 語 法 是 一 組 規 則 讓 程 式 編 寫 員 將 字 詞 集 合 起 來 電 腦 是 處 理 位 元 和 字 節 的 機 器, 與

Openmoko

mvc

EK-STM32F

CH01.indd

ARM JTAG实时仿真器安装使用指南

ebook140-8

A Preliminary Implementation of Linux Kernel Virus and Process Hiding

目 录

ebook140-9

6-1 Table Column Data Type Row Record 1. DBMS 2. DBMS MySQL Microsoft Access SQL Server Oracle 3. ODBC SQL 1. Structured Query Language 2. IBM

Measurement Studio Expands Your Test and Measurement Programming Power

Chapter 2

Learning Java

Microsoft Word - 正文.doc

111

BYOD IP+Optical (IP NGN) API 4. End-to-End (Service Aware) 5. IP NGN (IP Next Generation Network) ( ) Prime Carrier Management Access Edge Co

目 錄 版 次 變 更 記 錄... 2 原 始 程 式 碼 類 型 之 使 用 手 冊... 3 一 安 裝 軟 體 套 件 事 前 準 備... 3 二 編 譯 流 程 說 明

目次 

ICD ICD ICD ICD ICD

13 A DSS B DSS C DSS D DSS A. B. C. CPU D. 15 A B Cache C Cache D L0 L1 L2 Cache 16 SMP A B. C D 17 A B. C D A B - C - D

NEXT SDT2.51 C:\ARM251 SDT2.51 ARM SDT 2.51 ARM PROJECT MANAGER SDT 2

展讯平台软件架构介绍 [只读]

Microsoft Word zw

Cadence SPB 15.2 VOICE Cadence SPB 15.2 PC Cadence 3 (1) CD1 1of 2 (2) CD2 2of 2 (3) CD3 Concept HDL 1of 1

Gerolor Motors Series Dimensions A,B C T L L G1/2 M8 G1/ A 4 C H4 E

Logitech Wireless Combo MK45 English

untitled

untitled

Windows 2000 Server for T100

Gerotor Motors Series Dimensions A,B C T L L G1/2 M G1/ A 4 C H4 E

Microsoft Word - A _ doc

WebSphere Studio Application Developer IBM Portal Toolkit... 2/21 1. WebSphere Portal Portal WebSphere Application Server stopserver.bat -configfile..

投影片 1

USPTO Academic research Corporate needs Global/International Inventors Libraries News Media/Publication Patent Attorney or Agent USPTO e (ebusiness Ce

audiogram3 Owners Manual

1.ai

Microsoft Word - PS2_linux_guide_cn.doc

IP TCP/IP PC OS µclinux MPEG4 Blackfin DSP MPEG4 IP UDP Winsock I/O DirectShow Filter DirectShow MPEG4 µclinux TCP/IP IP COM, DirectShow I

<4D F736F F F696E74202D20C8EDBCFEBCDCB9B9CAA6D1D0D0DEBDB2D7F92E707074>

CL-S10w

4. I/O I/O Copyright 2001, Intellution, Inc. 4-1

2 2 3 DLight CPU I/O DLight Oracle Solaris (DTrace) C/C++ Solaris DLight DTrace DLight DLight DLight C C++ Fortran CPU I/O DLight AM

untitled

Important Notice SUNPLUS TECHNOLOGY CO. reserves the right to change this documentation without prior notice. Information provided by SUNPLUS TECHNOLO

WinMDI 28

软件自由法律中心 GPL 软件许可证合规指导

ebook62-1

Microsoft PowerPoint - Sens-Tech WCNDT [兼容模式]

關於本書 l 3 PhoneGap Appcelerator Titanium Sencha Touch (wrapper framework) Native App PhoneGap Build Native App Hybrid App Java Objective-C Android SDK

AL-M200 Series

int *p int a 0x00C7 0x00C7 0x00C int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++;

ebook71-6

建模与图形思考

Java 1 Java String Date

一个开放源码的嵌入式仿真环境 ― SkyEye

1 目 錄 1. 簡 介 一 般 甄 試 程 序 第 一 階 段 的 準 備 第 二 階 段 的 準 備 每 間 學 校 的 面 試 方 式 各 程 序 我 的 做 法 心 得 及 筆 記 結 論..

Ác Åé å Serial ATA ( Sil3132) S A T A (1) SATA (2) BIOS SATA (3)* RAID BIOS RAID (4) SATA (5) SATA (a) S A T A ( S A T A R A I D ) (b) (c) Windows XP

RunPC2_.doc

IC-900W Wireless Pan & Tilt Wireless Pan & Tilt Remote Control / Night Vision FCC ID:RUJ-LR802UWG

约 伯 记 : 约 伯 记 : 惟 有 我 一 人 逃 脱, 来 报 信 给 你 他 还 说 话 的 时 候, 又 有 人 来 说 : 你 的 儿 女 正 在 他 们 长 兄 的 家 里 吃 饭 喝 酒, 不 料, 有 狂 风 从 旷 野 刮 来, 击 打 房 屋 的 四 角, 房 屋 倒 塌 在

加 拉 太 书 :8 2 加 拉 太 书 2:4 8 过 了 三 年, 才 上 耶 路 撒 冷 去 见 矶 法, 和 他 同 住 了 十 五 天 9 至 于 别 的 使 徒, 除 了 主 的 兄 弟 雅 各, 我 都 没 有 看 见 20 我 写 给 你 们 的 不 是 谎 话, 这 是 我 在 神

Sophos Central 快速安裝手冊

國立中山大學學位論文典藏.PDF

Microsoft PowerPoint - os_4.ppt

Red Flag Linux Desktop 4.0 Red Flag Linux Desktop 4.0 1


untitled

RUN_PC連載_12_.doc

第 1 页共 9 页 文档履历 版本号日期制 / 修订人内容描述 V 正式版本

提纲 1 2 OS Examples for 3

<4D F736F F D20BBF9D3DA416E64726F6964C6BDCCA8B5C4B5E7D7D3C5C4C2F4CFB5CDB32E646F63>

INTRODUCTION TO COM.DOC

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File

StorageTek Virtual Storage Manager GUI - 安全指南

Simulator By SunLingxi 2003

Bose : / 212 F (100 C) AA (IEC LR06) 統 Bose Corporation 32 F ~ 104 F (0 C ~ 40 C)

BOOL EnumWindows(WNDENUMPROC lparam); lpenumfunc, LPARAM (Native Interface) PowerBuilder PowerBuilder PBNI 2

Bus Hound 5

KDC-U5049 KDC-U4049 Made for ipod, and Made for iphone mean that an electronic accessory has been designed to connect specifically to ipod, or iphone,

Oracle Solaris Studio makefile C C++ Fortran IDE Solaris Linux C/C++/Fortran IDE "Project Properties" IDE makefile 1.

ORACLE Enterprise Linux 6.3下ORACLE11g的安装

開發工具 使用 Android SDK 建立應用程式 使用 Java 語言 Java Platform, Standard Edition (Java SE)

學校發展計劃(二零零六至二零零七年)

epub 61-2

自由軟體社群發展經驗與 Linux認證介紹

/ 212ºF (100ºC) 2 UL CR2032 DL Wave SoundTouch SoundTouch SoundTouch Bose / 3 Bose Corporation 1999/5/EC 32ºF (0 C) 113

2 第 章 绪 论 Internet 2.0 使 得 消 费 型 电 子 产 品 用 户 可 以 通 过 多 种 不 同 的 数 据 网 络 访 问 互 联 网 内 容 用 户 可 以 使 用 便 携 式 消 费 型 电 子 设 备, 如 智 能 手 机 触 屏 平 板 电 脑 电 子 书, 甚 至

/ / /

indd

Abstract arm linux tool-chain root NET-Start! 2

ebook70-5

(Load Project) (Save Project) (OffLine Mode) (Help) Intel Hex Motor

Microsoft Word - PHP7Ch01.docx

AppAssure 5

Transcription:

Text Text Android Porting by Jollen Chen email: jollen@jollen.org blog: jollen.org/blog plurk: www.plurk.com/jollenchen www.jollen.tw

www.jolle.tw Section 1. Android Kernel

Android Porting Android porting, Android hardware product

Android Porting Application (API) Product Framework / Library Android kernel

Android Porting: new product Android cupcake armv4/armv5/x86 API Level Android Vanilla Kernel Configs Android framework Non-Vanilla Kernel Merge Android framework

Android Porting: Android framework library Android framework ASHMEM wakelock shared library Android framework case study: FreeRunner

API Level System Image API Level Release Android 1.5 3 2009.4.27 Android 1.1 2 2009.2.10 Android 1.0 1 2008.9.23 2007.11.5: Android 2007.11.12: Adnroid SDK early look version 2008.1.3: Adnroid Developer Challenge 2008.2.13: Android SDK m5-rc15 2008.5.12: Top 50 Android Application

Devices misc... Netbook x86 Phone ARMv4/v5

Cupcake MMS WebView Touch events WebView SquirrelFish (JavaScript engine) IME Basic x86 support SIM Application Toolkit 1.0...

android-porting

Android Source Code android.git.kernel.org 1. Cupcake x86 ports 2../.repo/manifest.xml eee_701 platform x86 ports

Android / armv4 git.koolu.org armv4 Koolu s3c2410 / s3c244x Neo FreeRunner

Android / armv4 $ mkdir koolu-android $ cd koolu-android $ repo init -u git://git.koolu.org/freerunner/platform/manifest.git -b koolu-1.0 $ repo sync

Application Developers Applications change Application Framework Surface Manager Media Framework Dalvik VM Shared Libraries System Image Linux Kernel

Product Branch Maintainer Applications Application Framework Surface Manager Dalvik VM rebuild Media Framework Shared Libraries Linux Kernel

Hardware Developing Applications Application Framework Surface Manager Dalvik VM change Media Framework Shared Libraries Linux Kernel change

Architecture Porting Applications Application Framework Surface Manager Media Framework Dalvik VM Shared Libraries porting Linux Kernel

Android Toolchain android-toolchain-20081019 http://android.git.kernel.org/pub/ gcc 4.2.1 / binutils 2.17 / gdb 6.6 ARMV5te+ ABI: EABI, AAPCS --with-float=soft --with=fpu-vfp --enable-threads (single)

Android Kernel Binder Ashmem (Android shared memory) PMEM (Processor memory allocator) logcat (Android Logger) wakelock (Android Power Management) Alarm

Key Features 2.6.23 2.6.25 2.6.27 2.6.29 1 Alarm Driver O O O O 2 Android Logger O O O O 3 Low Memory Killer O O O O 4 Power Management O O O O 5 USB Gadget O O O O 6 ASHMEM X O O O 7 PMEM X X O O 8 x86 Support X X O O 9./drivers/staging/Android/ X X X O

binder Android IPC /proc/binder state stats transactions transation_log failed_transation_log

Ashmem kernel/mm/ashmem.c /dev/ashmem

PMEM drivers/misc/pmem.c userspace driver

$ arm-eabi-gcc -o hello hello.c -Wl,-rpath-link=./cupcake/out/ target/product/generic/obj/lib -L./cupcake/out/target/product/ generic/obj/lib -nostdlib./cupcake/out/target/product/generic/ obj/lib/crtbegin_dynamic.o -lc Android OS native program

Android Android source code (Cupcake) Toolchain EeePC

Linux native C programs glibc & shared libs S!"#$%!&'(( Kernel Hardware

Android Android Framework Application JNI bionic & shared libs S!"#$%!&'(( Kernel Hardware

Android Activity oncreate() myactivity oncreate() MediaPlayer JNI OpenCore bionic S!"#$%!&'((

www.jolle.tw Section 2. Build Android

Android Build system (toolchain). Dalvik::JNI Dalvik::Interpreter Bionic System call

<android>/build/core/combo darwin-x86.mk Makefile macros javac.mk linux-arm.mk linux-x86.mk select.mk target_linux-x86.mk windows-x86.mk

GLOBAL CFLAGS $(combo_target)global_cflags += \ -march=armv5te -mtune=xscale \ -msoft-float -fpic \ -mthumb-interwork \ -ffunction-sections \ -funwind-tables \ -fstack-protector \ -fno-short-enums \ -D ARM_ARCH_5 -D ARM_ARCH_5T \ -D ARM_ARCH_5E -D ARM_ARCH_5TE \ -include $(call select-android-config-h,linux-arm)

GLOBAL CFLAGS for ARMv4 $(combo_target)global_cflags += \ -march=armv4t -mcpu=arm920t -mtune=xscale \ -msoft-float -fpic \ -mthumb-interwork \ -ffunction-sections \ -funwind-tables \ -fstack-protector \ -fno-short-enums \ -D ARM_ARCH_4 -D ARM_ARCH_4T \ -D ARM_ARCH_5E -D ARM_ARCH_5TE \ -include $(call select-android-config-h,linux-arm)

<android>/dalvik/vm/arch JNI Porting generic/ arm/ CallEABI.S CallOldABI.S x86 Call386ABI.S

ARM EABI r0-r3 hold first 4 args to a method r9 is given special treatment in some situations, but not for us r10 (sl) seems to be generally available r11 (fp) is used by gcc (unless -fomit-frame-pointer is set) r12 (ip) is scratch -- not preserved across method calls r13 (sp) should be managed carefully in case a signal arrives r14 (lr) must be preserved r15 (pc) can be tinkered with directly

JNI Entry r0 JNIEnv (can be left alone) r1 clazz (NULL for virtual method calls, non-null for static) r2 arg info * r3 argc (number of 32-bit values in argv) [sp] argv [sp,#4] short signature [sp,#8] func [sp,#12] preturn

Assembly Code #1: armv4/armv5.lcopy_done: @ call the method ldr ip, [r4, #8] @ func #ifndef ARM_ARCH_4 blx ip #else mov lr, pc bx ip #endif

Assembly Code #2: armv4/armv5 #ifndef ARM_ARCH_4 ldmdb r4, {r4, r5, r6, r7, r8, r9, sp, pc} #else ldmdb r4, {r4, r5, r6, r7, r8, r9, sp, lr} bx lr #endif

Dalvik Interpreter <android>/dalvik/vm/mterp common/ armv4/ armv5te/ x86/

Bionic Small and custom C library for the Android platform. A mainly port of BSD C library. Its own small implementation of pthreads based on Linux futexes. Support for x86, ARM and ARM thumb.

<android>/bionic Bionic libc/ libdl/ libm/ libstdc++/ libthread_db/ linker/

<android>/bionic/libc Bionic::libc arch-arm/ arch-x86/ kernel/ arch-arm/asm/ arch-x86/asm/

Android Generated Kernel Header bionic/libc/kernel/ kernel header files Android kernel header Linux kernel header userspace

External Library Android library shared library library opencore ~/google-android/external/opencore$ find./ -name "*.s" -print./codecs_v2/audio/mp3/dec/src/asm/pvmp3_polyphase_filter_window_gcc.s./codecs_v2/audio/mp3/dec/src/asm/pvmp3_mdct_18.s./codecs_v2/audio/mp3/dec/src/asm/pvmp3_dct_9.s./codecs_v2/audio/mp3/dec/src/asm/pvmp3_dct_9_gcc.s./codecs_v2/audio/mp3/dec/src/asm/pvmp3_mdct_18_gcc.s./codecs_v2/audio/mp3/dec/src/asm/pvmp3_polyphase_filter_window.s./codecs_v2/audio/mp3/dec/src/asm/pvmp3_dct_16_gcc.s

sonivox & OpenSSL./sonivox/arm-hybrid-22k/lib_src/ARM-E_filter_gnu.s./sonivox/arm-hybrid-22k/lib_src/ARM-E_mastergain_gnu.s./sonivox/arm-hybrid-22k/lib_src/ARM-E_voice_gain_gnu.s./sonivox/arm-hybrid-22k/lib_src/ARM-E_interpolate_noloop_gnu.s./sonivox/arm-hybrid-22k/lib_src/ARM-E_interpolate_loop_gnu.s./sonivox/arm-wt-22k/lib_src/ARM-E_filter_gnu.s./sonivox/arm-wt-22k/lib_src/ARM-E_mastergain_gnu.s./sonivox/arm-wt-22k/lib_src/ARM-E_voice_gain_gnu.s./sonivox/arm-wt-22k/lib_src/ARM-E_interpolate_loop_gnu.s./openssl/crypto/bn/asm/pa-risc2W.s./openssl/crypto/bn/asm/pa-risc2.s./openssl/crypto/bn/asm/mips3.s./openssl/crypto/0.9.9-dev/aes/aes-armv4.s./openssl/crypto/0.9.9-dev/bn/armv4-mont.s./openssl/crypto/0.9.9-dev/sha/sha256-armv4.s./openssl/crypto/0.9.9-dev/sha/sha512-armv4.s./openssl/crypto/0.9.9-dev/sha/sha1-armv4-large.s

Android & Kernel SurfaceHolder type SURFACE_TYPE_GPU GPU Graphics Processing Unit SurfaceHolder type SURFACE_TYPE_HARDWARE DMA userspace

Android Surface Manager Media Framework SurfaceHolder type SURFACE_TYPE_GPU GPU Graphics Processing Unit SurfaceHolder type SURFACE_TYPE_HARDWARE DMA MediaPlayer OpenCore

Surface Manager private SurfaceView mpreview; private SurfaceHolder holder; public void oncreate(bundle icicle) { super.oncreate(icicle); setcontentview(r.layout.mediaplayer_2); mpreview = (SurfaceView) findviewbyid(r.id.surface); holder = mpreview.getholder(); holder.addcallback(this); holder.settype(surfaceholder.surface_type_push_buffers); } Surface Manager

Media Framework private MediaPlayer mmediaplayer; } public void surfacecreated(surfaceholder holder) { mmediaplayer = new MediaPlayer(); mmediaplayer.setdatasource(path); mmediaplayer.setdisplay(holder); mmediaplayer.prepare(); mmediaplayer.setonbufferingupdatelistener(this); mmediaplayer.setoncompletionlistener(this); mmediaplayer.setonpreparedlistener(this); mmediaplayer.setaudiostreamtype(audiomanager.stream_music); Media Framework OpenCore

New Product File Tree <company_name> <board_name> + Android.mk + product_config.mk + system.prop products + AndroidProducts.mk + <first_product_name>.mk + <second_product_name>.mk

Android x86 port (target product = EeePC 701) 1. Get Google Android $ repo init -u git://android.git.kernel.org/platform/manifest.git -b cupcake $ repo sync 2. Manifest file. <manifest>... <project name="platform/vendor/asus/eee_701" \ path="vendor/asus/eee_701"/>... </manifest> 3. Get EeePC platform. $ repo sync 4. Build Android image. $ TARGET_ARCH=x86 TARGET_PRODUCT=eee_701 DISABLE_DEXPREOPT=true make -j2 installer_img 5. Create USB boot stick. Use make-live script. https://review.source.android.com/gerrit#change,6475

Build EeePC 701 Product Tips # Google API issue $(call inherit-product, $(SRC_TARGET_DIR)/product/generic.mk) PRODUCT_NAME := eee_701 PRODUCT_DEVICE := eee_701 PRODUCT_POLICY := android.policy_mid PRODUCT_PROPERTY_OVERRIDES += \ ro.com.android.dataroaming=true Cupcake Google APIs add-ons

Build EeePC 701 Product Tips # e2fsprogs issue external/e2fsprogs/android.mk: --- a/android.mk +++ b/android.mk @@ -1,3 +1,3 @@ ifneq ($(TARGET_SIMULATOR),true) -# include $(call all-subdir-makefiles) + include $(call all-subdir-makefiles) endif

Android Image Files boot.img installer.img ramdisk.img system.img userdata.img

$ make-live Android

VirtualBox AMD PCnet32 PCI support VESA VGA graphics support VGA 8x8 font VGA 8x16 font

installer.img VDI $ VBoxManage convertromraw -format VDI./installer.img./android.vdi

Android Kernerl Configs

Android Init Process device/system/init device/system/init/init.c /etc/init.rc mount file system ( /etc/fstab)

Running Applications /system/bin/logd /sbin/adbd /system/bin/usbd /system/bin/debuggerd /system/bin/rild /system/bin/app_process /system/bin/runtime /system/bin/dbus-daemon system_server

Zygote Process Startup

Android FreeRunner s3c2410 / s3c244x Neo FreeRunner Mokofly (coming...)

Text Text android-way.com www.jollen.tw FAQ Jollen Chen <jollen@jollen.org> Embedded Linux Embedded Linux Linux Openmoko Openmoko Android OS Android Jollen - www.jollen.org/blog Jollen - www.plurk.com/jollenchen