android os porting r3 090624233419 phpapp01
TRANSCRIPT
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
1/66
Android Porting
by Jollen Chen
email: [email protected]
blog: jollen.org/blogplurk: www.plurk.com/jollenchen
Text
Text
www.jollen.tw
http://www.plurk.com/jollenchenmailto:[email protected]://www.jollen.tw/http://www.jollen.tw/http://www.plurk.com/jollenchenhttp://www.plurk.com/jollenchenmailto:[email protected]:[email protected]:[email protected]:[email protected] -
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
2/66
Section 1. Android Kernel
www.jolle.tw
http://www.jollen.org/http://www.jollen.org/ -
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
3/66
Android porting, Android hardware
!product
!
!
Android Porting
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
4/66
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
5/66
new productAndroid
!cupcake armv4/armv5/x86
API Level
!Android
Vanilla Kernel Configs
!Android framework
Non-Vanilla Kernel
!Merge Android framework
Android Porting:
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
6/66
!Android frameworklibrary
Android framework!ASHMEMwakelock
shared library
!Android framework
!case study: FreeRunner
Android Porting:
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
7/66
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
API Level
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
8/66
Phone
Netbook
Devices
ARMv4/v5
x86
misc...
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
9/66
MMS
WebView Touch events
WebView SquirrelFish (JavaScript engine)
IME
Basic x86 support
SIM Application Toolkit 1.0
...
Cupcake
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
10/66
android-porting
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
11/66
android.git.kernel.org
1. Cupcake x86 ports
2. ./.repo/manifest.xml
eee_701 platform x86 ports
Android Source Code
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
12/66
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
13/66
Android / armv4
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
14/66
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
15/66
Media Framework
Surface Manager
Shared Libraries
Applications
Application Framework
Dalvik VM
System
Image
change
Linux Kernel
Application Developers
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
16/66
Product Branch Maintainer
Media Framework
Surface Manager
Shared Libraries
Applications
Application Framework
Dalvik VM
Linux Kernel
rebuild
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
17/66
Hardware Developing
Media Framework
Surface Manager
Shared Libraries
Applications
Application Framework
Dalvik VM
Linux Kernel
change
change
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
18/66
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
19/66
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 Toolchain
http://android.git.kernel.org/pub/http://android.git.kernel.org/pub/http://android.git.kernel.org/pub/ -
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
20/66
Binder
Ashmem (Android shared memory)
PMEM (Processor memory allocator)
logcat (Android Logger)
wakelock (Android Power Management)
Alarm
Android Kernel
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
21/66
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
22/66
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
23/66
Android IPC
/proc/binder
!state
!stats
!transactions
!transation_log
!failed_transation_log
binder
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
24/66
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
25/66
drivers/misc/pmem.c
userspace driver
PMEM
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
26/66
Android OS
native program
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
27/66
Android
Android source code (Cupcake)
Toolchain
EeePC
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
28/66
Hardware
Kernel
glibc & shared libs
native C programs
S!"#$%&'((
Linux
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
29/66
Hardware
Kernel
Application
Android Framework
S!"#$%&'((
JNI
bionic & shared libs
Android
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
30/66
S!"#$%&'((
JNI
onCreate()Activity
onCreate()myActivity
MediaPlayer
OpenCore
bionic
Android
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
31/66
Section 2. Build Android
www.jolle.tw
http://www.jollen.org/http://www.jollen.org/ -
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
32/66
Build system (toolchain).
Dalvik::JNI
Dalvik::Interpreter
Bionic
System call
Android
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
33/66
Makefile
macros
/build/core/combo
darwin-x86.mk
javac.mk
linux-arm.mk
linux-x86.mk
select.mk
target_linux-x86.mk
windows-x86.mk
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
34/66
GLOBAL CFLAGS
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
35/66
GLOBAL CFLAGS for ARMv4
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
36/66
JNI Porting/dalvik/vm/arch
generic/
arm/
x86
CallEABI.S
CallOldABI.S
Call386ABI.S
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
37/66
ARM EABI
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
38/66
JNI Entry
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
39/66
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
40/66
Assembly Code #2: armv4/armv5
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
41/66
Dalvik
Interpreter/dalvik/vm/mterp
common/
armv4/
armv5te/
x86/
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
42/66
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
43/66
Bionic/bionic
libc/
libdl/
libm/
libstdc++/
libthread_db/
linker/
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
44/66
Bionic::libc/bionic/libc
arch-arm/
arch-x86/
kernel/
arch-arm/asm/
arch-x86/asm/
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
45/66
bionic/libc/kernel/kernel header files
Android kernel header Linux kernel header
userspace
Android Generated Kernel Header
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
46/66
Android libraryshared library
library
opencore
External Library
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
47/66
sonivox & OpenSSL
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
48/66
SurfaceHolder type SURFACE_TYPE_GPU GPU
Graphics Processing Unit
SurfaceHolder type SURFACE_TYPE_HARDWARE
DMA
userspace
Android & Kernel
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
49/66
Surface Manager Media Framework
SurfaceHolder type SURFACE_TYPE_GPU GPU
Graphics Processing Unit
SurfaceHolder type SURFACE_TYPE_HARDWARE
DMA
MediaPlayer OpenCore
Android
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
50/66
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
51/66
Media Framework
Media Framework OpenCore
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
52/66
New Product File Tree
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
53/66
1. Get Google Android
$ repo init -u git://android.git.kernel.org/platform/manifest.git -b cupcake$ repo sync
2. Manifest file.
...
...
3. Get EeePC platform.
$ repo sync
4. Build Android image.$ TARGET_ARCH=x86 TARGET_PRODUCT=eee_701DISABLE_DEXPREOPT=true make -j2 installer_img
5. Create USB boot stick.
Use make-live script. https://review.source.android.com/Gerrit#change,6475
Android x86 port (target product = EeePC 701)
https://review.source.android.com/Gerrit#https://review.source.android.com/Gerrit#https://review.source.android.com/Gerrit# -
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
54/66
$(call inherit-product, $(SRC_TARGET_DIR)/product/generic.mk)
PRODUCT_NAME := eee_701PRODUCT_DEVICE := eee_701PRODUCT_POLICY := android.policy_midPRODUCT_PROPERTY_OVERRIDES += \ ro.com.android.dataroaming=true
Build EeePC 701 Product Tips # Google API issue
Cupcake Google APIs add-ons
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
55/66
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
Build EeePC 701 Product Tips # e2fsprogs issue
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
56/66
boot.img
installer.img
ramdisk.img
system.img
userdata.img
Android Image Files
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
57/66
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
58/66
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
59/66
installer.img VDI
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
60/66
Android Kernerl Configs
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
61/66
Android Init Process
device/system/init
device/system/init/init.c
/etc/init.rc
mount file system (/etc/fstab)
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
62/66
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
63/66
Zygote Process Startup
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
64/66
s3c2410 / s3c244x
Neo FreeRunner
Mokofly (coming...)
Android FreeRunner
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
65/66
-
8/11/2019 Android Os Porting r3 090624233419 Phpapp01
66/66