SlideShare una empresa de Scribd logo
1 de 39
Descargar para leer sin conexión
Android is
   NOT just
'Java on Linux'
     2011.5.22
     2011.10.26 updated

  Tetsuyuki Kobayashi

                          1
Let's talk about inside of Android.




          http://www.kmckk.co.jp/eng/kzma9/           2
          http://www.kmckk.co.jp/eng/jet_index.html
Who am I?
   20+ years involved in embedded systems
       10 years in real time OS, such as iTRON
       10 years in embedded Java Virtual Machine
       Now GCC, Linux, QEMU, Android, …
   Blogs
       http://d.hatena.ne.jp/embedded/ (Personal)
       http://blog.kmckk.com/ (Corporate)
       http://kobablog.wordpress.com/(English)
   Twitter
       @tetsu_koba
                                                     3
Android is NOT just
               'Java on Linux'
   Android uses Linux kernel. Only kernel.
       User land is totally different from usual Linux
        system.
   Android applications are written in Java
    language.
       Class libraries are similar to Java SE but not
        equal.
   Dalvik VM eats only dex code
       need to translate from Java byte code in
        advance                                           4
Let's explore inside of Android

   Assuming you know Linux and Java
    very well :)




                                       5
Today's topic

 Android system architecture
 Init – runtime – Zygoto


 Dalvik VM


 Android specific kernel

  drivers
 How to build Android

                                6
Today's topic

 Android system architecture
 Init – runtime – Zygoto


 Dalvik VM


 Android specific kernel drivers


 How to build Android




                                    7
System architecture




                      8
Java is the first class citizen in
                 Android
   Dalvik VM is the center of Android
    runtime.
   Almost all daemon services are written in
    Java.
   Application life cycle is described by
    Java API


                                           9
Java is the first class citizen in
                Android
   NDK
       native library called from Java via JNI
       This is just a library. Application life
        cycle is the same as Java.
   Native activity
       Only C/C++ to make Apps. (just hidden
        JNI part into system.)
       not short-cut for C/C++
                                                   10
Typical Directory Tree of Android
                                                  ro: mounted as read only
       / /(root)
           (root)    initrd (ro)
                                                  rw: mounted as read and write


                                    yaffs2 (ro)
                      /system
                       /system                                 bin

                                                               etc

                                                               lib
                       /data        yaffs2 (rw)
                        /data
                                                               usr


                      /cache        yaffs2 (rw)
                       /cache



                    /mnt/sdcard     removable storage (rw)
                     /mnt/sdcard


 cf. Usual Linux system assumes all file system are read/writable.           11
Today's topic

 Android system architecture
 Init – runtime – Zygoto


 Dalvik VM


 Android specific kernel

  drivers
 How to build Android

                                12
Boot sequence




                                                                      13
quoted from http://hmtsay.blogspot.com/2010/10/android-startup.html
init
   located on /init
       need kernel boot parameter to add
        “init=/init”
   Static linked.
     cf. typical linux init is dynamic

      linked.
     Doesn't affect even dynamic link

      system collapsed.
   http://blog.kmckk.com/archives/3137191.html   14
Bionic

   The standard libraries
       libc, libm, pthread, dynamic linker
       linker has implicit crash dump function
       http://kobablog.wordpress.com/2011/05/12/debuggerd-of-android/
   Came from *BSD, not glibc
   Currently, doesn't support C++ exception
    and RTTI.
       latest NDK supports these by static linking.
                                                                     15
Prelinking

   Locate dynamic link libraries ahead of
    time.
   'apriori' command. Different from 'prelink'
    command from Red Hat.
   Optimized for small embedded system
       Allocate fixed address to libraries .
       Assume 3GB memory space is large enough
        to put all libraries together.
       Assume not adding/removing libraries.  16
Prelink map
build/core/prelink-linux-arm.map
 #   0xC0000000   -   0xFFFFFFFF   Kernel
 #   0xB0100000   -   0xBFFFFFFF   Thread 0 Stack
 #   0xB0000000   -   0xB00FFFFF   Linker
 #   0xA0000000   -   0xBFFFFFFF   Prelinked System Libraries
 #   0x90000000   -   0x9FFFFFFF   Prelinked App Libraries
 #   0x80000000   -   0x8FFFFFFF   Non-prelinked Libraries
 #   0x40000000   -   0x7FFFFFFF   mmap'd stuff
 #   0x10000000   -   0x3FFFFFFF   Thread Stacks
 #   0x00000000   -   0x0FFFFFFF   .text / .data / heap



 # core system libraries
 libdl.so                      0xAFF00000   #   [<64K]
 libc.so                       0xAFD00000   #   [~2M]
 libstdc++.so                  0xAFC00000   #   [<64K]
 libm.so                       0xAFB00000   #   [~1M]
 liblog.so                     0xAFA00000   #   [<64K]
 libcutils.so                  0xAF900000   #   [~1M]
 libthread_db.so               0xAF800000   #   [<64K]
 libz.so                       0xAF700000   #   [~1M]
 libevent.so                   0xAF600000   #   [???]
 libssl.so                     0xAF400000   #   [~2M]
 libcrypto.so                  0xAF000000   #   [~4M]
 libsysutils.so                0xAEF00000   #   [~1M]
    ...                                                         17
Zygote




quoted from http://worms.zoology.wisc.edu/dd2/echino/cleavage/intro.html

                                                                           18
Zygote
                                            fork



Zygote process                                       Child process

                classes        classes                                  classes        classes
              classes        classes
                          dynamic link                                classes        classes
                                                                                  dynamic link
Dalvik VM   classes        libraries                 Dalvik VM      classes         libraries




                                           classes        classes
                                         classes        classes
                                                     dynamic link
                   Dalvik VM           classes         libraries


Physical memory space                                 (Actually these are mapped by pages.)
                                                                                                19
Zygote
   Zygote process preloads typical (approx. 1800)
    classes and dynamic link libraries so that
    childlen start quickly.
   Copy-on-write
       Only when new process writes page, new page is
        allocated.
       All pages not be written are shared among all
        zygote children.
   Exec system call is not used in zygote.
       Exec wipes the page mapping table of the process.
       It means exec discards zygote cache.             20
UID, GID of Applications
   UID(user id) and GID(group id) is used for
    managing multi-user in usual Linux
    system.
   Android use this mechanism to isolate
    applications.
       Each application has unique UID.
       Can not read/write other application's files.
   Zygote is running as UID=0 (root). After
    forking child process, its UID is changed
    by setuid system call.                              21
Today's topic

 Android system architecture
 Init – runtime – Zygoto


 Dalvik VM


 Android specific kernel

  drivers
 How to build Android

                                22
Dalvik VM
   executes dex code, which is translated
    from Java byte code
   16bit, register based
        cf. Java bytecode is 8bit, stack based
   has JIT from Android 2.2 (Froyo)
        http://blog.kmckk.com/archives/2691473.html
   has concurrent GC from Android 2.3
    (Gingerbread)
   http://source.android.com/tech/dalvik/
                                                       23
Java class libraries
   Different from Java ME, which is used in
    traditional Japanese phone.
   Similar to Java SE. But not equal.
       Different window/graphics. No AWT, No
        Swing.
       No RMI.
   Take care to use user defined class loader
       dynamic generated classes doesn't work
        because Dalvik VM doesn't eat Java class
        files but Dex files.                       24
Caveats of NDK programming
   Dynamic libraries built by NDK are linked
    with application process.
       forked from Zygote but UID != 0 (root).
       consider about permissions.
   Don't use fork & exec system calls.
     Back ground process should be made as
      android .app.Service.
   Don't use GCC's TLS extension (__thread).
       Simple Android dynamic linker does not support it.
       java.lang.ThreadLocal is available in Java.          25
3 commands to invoke Dalvik VM

   /system/bin/app_process
       This is the 'Zygote' process.
   /system/bin/dalvikvm
       Similar to usual 'java' command.
       Try 'dalvikvm -h' to show command line help.
   /system/bin/dvz
       Send request to Zygote process.
   See my blog (Sorry in Japanese)
       http://blog.kmckk.com/archives/3551546.html
                                                       26
Today's topic

 Android system architecture
 Init – runtime – Zygoto


 Dalvik VM


 Android specific kernel

  drivers
 How to build Android

                                27
Linux kernel
   Many common Linux device drivers are
    available.
   Android specific kernel drivers
        binder
        ashmem
        wake lock
        logger
         …
   http://elinux.org/Android_Kernel_Features

   These source code is not yet merged to
    kernel main line repository.                28
Binder
   /dev/binder
   Base of Inter Process Method Invocation
   Not for general purpose. Tuned for specific
    transaction.
   Multi-thread aware
        Have internal data per thread
        (CF. Socket have internal data per fd.)
   Doesn't use ”write” and ”read” system calls.
    Write and read at once by ”ioctl”.
   http://blog.kmckk.com/archives/3676340.html    29
Ashmem
   Android / Anonymous SHared MEMory
    subsystem
       $(TOP)/system/core/cutils/ashmem.h
                 int ashmem_create_region(const char *name, size_t size)
                    → returns fd
                 int ashmem_set_prot_region(int fd, int prot)
                 int ashmem_pin_region(int fd, size_t offset, size_t len)
                 int ashmem_unpin_region(int fd, size_t offset, size_t len)
   Kernel reclaims not ‘pin’ ed memory
   Similar to weak reference of Java. Useful to
    implement cache.
   android.os.MemoryFile from Java program
                                                                               30
Wake lock

   Lock to prevent entering sleep mode.
   My memos
       http://blog.kmckk.com/archives/3298375.html
       http://blog.kmckk.com/archives/3304836.html
   eLinux wiki
       http://elinux.org/Android_Power_Management




                                                      31
Alarm

   kernel implementation to support
    Android's AlarmManager.
   Wake up even when it was in sleep mode.




                                          32
Low memory killer

   At the shortage of memory, the kernel
    select a process seems low priority and
    kill it. (!!)
   It's OK. because specification in the
    Android application life cycle, application
    should be preserve its own status.
   http://blog.kmckk.com/archives/2795577.html




                                                  33
Logger

   Android has unique system-wide log
    system
   http://blog.kmckk.com/archives/2936958.html

    http://elinux.org/Android_Logging_System




                                                  34
Overview of Android Logging System
                                                                                    Target
                                  Java program
                                   Java program                    System.out
                                                                   /System.err

                                                       com.android.internal.os
       Native program             android.util.Log      com.android.internal.os               Host
        Native program             android.util.Log      AndroidPrintStream
                                                          AndroidPrintStream

                                                                                                DDMS
                                                                                  stdout
                                                              logcat
                                                               logcat
       stdout          liblog
       /stderr           liblog                                                               adbserver
                                                                                  adbd
                                                                                   adbd        adbserver
User

Kernel                                                                                         adb logcat

                                  main     64KB       radio
                                            logger
                                             logger           64KB
         /dev/log/main                                                      /dev/log/main
         /dev/log/radio            event                                    /dev/log/radio
                                                      system
         /dev/log/event                     256KB                           /dev/log/event
         /dev/log/system                                      64KB          /dev/log/system            35
Today's topic

 Android system architecture
 Init – runtime – Zygoto


 Dalvik VM


 Android specific kernel

  drivers
 How to build Android

                                36
How to build Android
   All source code is available for download
       except Google specific services (Google
        map, Android market, … )
   Easy to download source and build them
   See AOSP web site
       http://source.android.com/
   Or, my blog
       http://blog.kmckk.com/archives/3722957.html
                                                  37
Conclusion

   Android system architecture is totally
    different from normal Linux systems.
   Android uses Linux kernel only,
    further more, adding android specific
    kernel drivers.
   Designed for Java applications.
   Tuned for small system.
                                             38
Q&A




Thank you for listening!
Any comments to blogs are welcome.

                                     39

Más contenido relacionado

La actualidad más candente

Android OTA updates
Android OTA updatesAndroid OTA updates
Android OTA updatesGary Bisson
 
"Learning AOSP" - Android Hardware Abstraction Layer (HAL)
"Learning AOSP" - Android Hardware Abstraction Layer (HAL)"Learning AOSP" - Android Hardware Abstraction Layer (HAL)
"Learning AOSP" - Android Hardware Abstraction Layer (HAL)Nanik Tolaram
 
Booting Android: bootloaders, fastboot and boot images
Booting Android: bootloaders, fastboot and boot imagesBooting Android: bootloaders, fastboot and boot images
Booting Android: bootloaders, fastboot and boot imagesChris Simmonds
 
Android Boot Time Optimization
Android Boot Time OptimizationAndroid Boot Time Optimization
Android Boot Time OptimizationKan-Ru Chen
 
Android booting sequece and setup and debugging
Android booting sequece and setup and debuggingAndroid booting sequece and setup and debugging
Android booting sequece and setup and debuggingUtkarsh Mankad
 
Embedded Android Workshop with Pie
Embedded Android Workshop with PieEmbedded Android Workshop with Pie
Embedded Android Workshop with PieOpersys inc.
 
Using and Customizing the Android Framework / part 4 of Embedded Android Work...
Using and Customizing the Android Framework / part 4 of Embedded Android Work...Using and Customizing the Android Framework / part 4 of Embedded Android Work...
Using and Customizing the Android Framework / part 4 of Embedded Android Work...Opersys inc.
 
Android's Multimedia Framework
Android's Multimedia FrameworkAndroid's Multimedia Framework
Android's Multimedia FrameworkOpersys inc.
 
Understanding the Android System Server
Understanding the Android System ServerUnderstanding the Android System Server
Understanding the Android System ServerOpersys inc.
 
Android Booting Sequence
Android Booting SequenceAndroid Booting Sequence
Android Booting SequenceJayanta Ghoshal
 
Android Treble: Blessing or Trouble?
Android Treble: Blessing or Trouble?Android Treble: Blessing or Trouble?
Android Treble: Blessing or Trouble?Opersys inc.
 

La actualidad más candente (20)

Embedded Android : System Development - Part II (Linux device drivers)
Embedded Android : System Development - Part II (Linux device drivers)Embedded Android : System Development - Part II (Linux device drivers)
Embedded Android : System Development - Part II (Linux device drivers)
 
Android OTA updates
Android OTA updatesAndroid OTA updates
Android OTA updates
 
Android Binder: Deep Dive
Android Binder: Deep DiveAndroid Binder: Deep Dive
Android Binder: Deep Dive
 
Embedded Android : System Development - Part II (HAL)
Embedded Android : System Development - Part II (HAL)Embedded Android : System Development - Part II (HAL)
Embedded Android : System Development - Part II (HAL)
 
"Learning AOSP" - Android Hardware Abstraction Layer (HAL)
"Learning AOSP" - Android Hardware Abstraction Layer (HAL)"Learning AOSP" - Android Hardware Abstraction Layer (HAL)
"Learning AOSP" - Android Hardware Abstraction Layer (HAL)
 
Booting Android: bootloaders, fastboot and boot images
Booting Android: bootloaders, fastboot and boot imagesBooting Android: bootloaders, fastboot and boot images
Booting Android: bootloaders, fastboot and boot images
 
Android Boot Time Optimization
Android Boot Time OptimizationAndroid Boot Time Optimization
Android Boot Time Optimization
 
Embedded Android : System Development - Part IV
Embedded Android : System Development - Part IVEmbedded Android : System Development - Part IV
Embedded Android : System Development - Part IV
 
Android booting sequece and setup and debugging
Android booting sequece and setup and debuggingAndroid booting sequece and setup and debugging
Android booting sequece and setup and debugging
 
Binder: Android IPC
Binder: Android IPCBinder: Android IPC
Binder: Android IPC
 
Explore Android Internals
Explore Android InternalsExplore Android Internals
Explore Android Internals
 
Embedded Android Workshop with Pie
Embedded Android Workshop with PieEmbedded Android Workshop with Pie
Embedded Android Workshop with Pie
 
Android Internals
Android InternalsAndroid Internals
Android Internals
 
Using and Customizing the Android Framework / part 4 of Embedded Android Work...
Using and Customizing the Android Framework / part 4 of Embedded Android Work...Using and Customizing the Android Framework / part 4 of Embedded Android Work...
Using and Customizing the Android Framework / part 4 of Embedded Android Work...
 
Android's Multimedia Framework
Android's Multimedia FrameworkAndroid's Multimedia Framework
Android's Multimedia Framework
 
Understanding the Android System Server
Understanding the Android System ServerUnderstanding the Android System Server
Understanding the Android System Server
 
Embedded Android : System Development - Part III (Audio / Video HAL)
Embedded Android : System Development - Part III (Audio / Video HAL)Embedded Android : System Development - Part III (Audio / Video HAL)
Embedded Android : System Development - Part III (Audio / Video HAL)
 
Android Booting Sequence
Android Booting SequenceAndroid Booting Sequence
Android Booting Sequence
 
Android 10
Android 10Android 10
Android 10
 
Android Treble: Blessing or Trouble?
Android Treble: Blessing or Trouble?Android Treble: Blessing or Trouble?
Android Treble: Blessing or Trouble?
 

Similar a Android is NOT just 'Java on Linux'

Introduction to the Android NDK
Introduction to the Android NDKIntroduction to the Android NDK
Introduction to the Android NDKBeMyApp
 
Multithreading in Android
Multithreading in AndroidMultithreading in Android
Multithreading in Androidcoolmirza143
 
Java Hates Linux. Deal With It.
Java Hates Linux.  Deal With It.Java Hates Linux.  Deal With It.
Java Hates Linux. Deal With It.Greg Banks
 
Curso de Desenvolvimento Mobile - Android - Stack
Curso de Desenvolvimento Mobile - Android - StackCurso de Desenvolvimento Mobile - Android - Stack
Curso de Desenvolvimento Mobile - Android - StackJackson F. de A. Mafra
 
Running native code on Android #OSDCfr 2012
Running native code on Android #OSDCfr 2012Running native code on Android #OSDCfr 2012
Running native code on Android #OSDCfr 2012Cédric Deltheil
 
Let's Containerize New York with Docker!
Let's Containerize New York with Docker!Let's Containerize New York with Docker!
Let's Containerize New York with Docker!Jérôme Petazzoni
 
Techtalks: taking docker to production
Techtalks: taking docker to productionTechtalks: taking docker to production
Techtalks: taking docker to productionmuayyad alsadi
 
Android OS Porting: Introduction
Android OS Porting: IntroductionAndroid OS Porting: Introduction
Android OS Porting: IntroductionJollen Chen
 
One RubyStack to Rule them All
One RubyStack to Rule them AllOne RubyStack to Rule them All
One RubyStack to Rule them Allelliando dias
 
NDK Primer (Wearable DevCon 2014)
NDK Primer (Wearable DevCon 2014)NDK Primer (Wearable DevCon 2014)
NDK Primer (Wearable DevCon 2014)Ron Munitz
 
Dalvik Vm &amp; Jit
Dalvik Vm &amp; JitDalvik Vm &amp; Jit
Dalvik Vm &amp; JitAnkit Somani
 
Dalvik Vm &amp; Jit
Dalvik Vm &amp; JitDalvik Vm &amp; Jit
Dalvik Vm &amp; JitAnkit Somani
 
2013.02.02 지앤선 테크니컬 세미나 - Xcode를 활용한 디버깅 팁(OSXDEV)
2013.02.02 지앤선 테크니컬 세미나 - Xcode를 활용한 디버깅 팁(OSXDEV)2013.02.02 지앤선 테크니컬 세미나 - Xcode를 활용한 디버깅 팁(OSXDEV)
2013.02.02 지앤선 테크니컬 세미나 - Xcode를 활용한 디버깅 팁(OSXDEV)JiandSon
 

Similar a Android is NOT just 'Java on Linux' (20)

Understanding the Dalvik Virtual Machine
Understanding the Dalvik Virtual MachineUnderstanding the Dalvik Virtual Machine
Understanding the Dalvik Virtual Machine
 
olibc: Another C Library optimized for Embedded Linux
olibc: Another C Library optimized for Embedded Linuxolibc: Another C Library optimized for Embedded Linux
olibc: Another C Library optimized for Embedded Linux
 
Introduction to the Android NDK
Introduction to the Android NDKIntroduction to the Android NDK
Introduction to the Android NDK
 
Multithreading in Android
Multithreading in AndroidMultithreading in Android
Multithreading in Android
 
Java Hates Linux. Deal With It.
Java Hates Linux.  Deal With It.Java Hates Linux.  Deal With It.
Java Hates Linux. Deal With It.
 
App container rkt
App container rktApp container rkt
App container rkt
 
Logging system of Android
Logging system of AndroidLogging system of Android
Logging system of Android
 
Curso de Desenvolvimento Mobile - Android - Stack
Curso de Desenvolvimento Mobile - Android - StackCurso de Desenvolvimento Mobile - Android - Stack
Curso de Desenvolvimento Mobile - Android - Stack
 
Running native code on Android #OSDCfr 2012
Running native code on Android #OSDCfr 2012Running native code on Android #OSDCfr 2012
Running native code on Android #OSDCfr 2012
 
Logging system of Android
Logging system of AndroidLogging system of Android
Logging system of Android
 
Let's Containerize New York with Docker!
Let's Containerize New York with Docker!Let's Containerize New York with Docker!
Let's Containerize New York with Docker!
 
Getting Native with NDK
Getting Native with NDKGetting Native with NDK
Getting Native with NDK
 
JOSA TechTalk: Taking Docker to Production
JOSA TechTalk: Taking Docker to ProductionJOSA TechTalk: Taking Docker to Production
JOSA TechTalk: Taking Docker to Production
 
Techtalks: taking docker to production
Techtalks: taking docker to productionTechtalks: taking docker to production
Techtalks: taking docker to production
 
Android OS Porting: Introduction
Android OS Porting: IntroductionAndroid OS Porting: Introduction
Android OS Porting: Introduction
 
One RubyStack to Rule them All
One RubyStack to Rule them AllOne RubyStack to Rule them All
One RubyStack to Rule them All
 
NDK Primer (Wearable DevCon 2014)
NDK Primer (Wearable DevCon 2014)NDK Primer (Wearable DevCon 2014)
NDK Primer (Wearable DevCon 2014)
 
Dalvik Vm &amp; Jit
Dalvik Vm &amp; JitDalvik Vm &amp; Jit
Dalvik Vm &amp; Jit
 
Dalvik Vm &amp; Jit
Dalvik Vm &amp; JitDalvik Vm &amp; Jit
Dalvik Vm &amp; Jit
 
2013.02.02 지앤선 테크니컬 세미나 - Xcode를 활용한 디버깅 팁(OSXDEV)
2013.02.02 지앤선 테크니컬 세미나 - Xcode를 활용한 디버깅 팁(OSXDEV)2013.02.02 지앤선 테크니컬 세미나 - Xcode를 활용한 디버깅 팁(OSXDEV)
2013.02.02 지앤선 테크니컬 세미나 - Xcode를 활용한 디버깅 팁(OSXDEV)
 

Más de Tetsuyuki Kobayashi

Try new transport protocol SRT (ver. 2)
Try new transport protocol SRT  (ver. 2)Try new transport protocol SRT  (ver. 2)
Try new transport protocol SRT (ver. 2)Tetsuyuki Kobayashi
 
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機Tetsuyuki Kobayashi
 
WebOS Open Source Edition を試してみた
WebOS Open Source Edition を試してみたWebOS Open Source Edition を試してみた
WebOS Open Source Edition を試してみたTetsuyuki Kobayashi
 
Linuxのユーザーランドをinitから全てまるごとgolangで書く
Linuxのユーザーランドをinitから全てまるごとgolangで書くLinuxのユーザーランドをinitから全てまるごとgolangで書く
Linuxのユーザーランドをinitから全てまるごとgolangで書くTetsuyuki Kobayashi
 
組み込みLinuxでのGolangのススメ(Go con版)
組み込みLinuxでのGolangのススメ(Go con版)組み込みLinuxでのGolangのススメ(Go con版)
組み込みLinuxでのGolangのススメ(Go con版)Tetsuyuki Kobayashi
 
組み込みLinuxでのGolangのススメ
組み込みLinuxでのGolangのススメ組み込みLinuxでのGolangのススメ
組み込みLinuxでのGolangのススメTetsuyuki Kobayashi
 
Tricky implementation of Go ARM soft float
Tricky implementation of Go ARM soft floatTricky implementation of Go ARM soft float
Tricky implementation of Go ARM soft floatTetsuyuki Kobayashi
 
Simple and efficient way to get the last log using MMAP
Simple and efficient way to get the last log using MMAPSimple and efficient way to get the last log using MMAP
Simple and efficient way to get the last log using MMAPTetsuyuki Kobayashi
 
Basic of virtual memory of Linux
Basic of virtual memory of LinuxBasic of virtual memory of Linux
Basic of virtual memory of LinuxTetsuyuki Kobayashi
 
ADB(Android Debug Bridge): How it works?
ADB(Android Debug Bridge): How it works?ADB(Android Debug Bridge): How it works?
ADB(Android Debug Bridge): How it works?Tetsuyuki Kobayashi
 
Inter-process communication of Android
Inter-process communication of AndroidInter-process communication of Android
Inter-process communication of AndroidTetsuyuki Kobayashi
 

Más de Tetsuyuki Kobayashi (20)

some topic of ffmpeg
some topic of ffmpeg some topic of ffmpeg
some topic of ffmpeg
 
New VIdeo CODEC AV1
New VIdeo CODEC AV1 New VIdeo CODEC AV1
New VIdeo CODEC AV1
 
Try new transport protocol SRT (ver. 2)
Try new transport protocol SRT  (ver. 2)Try new transport protocol SRT  (ver. 2)
Try new transport protocol SRT (ver. 2)
 
Try new transport protocol SRT
Try new transport protocol SRTTry new transport protocol SRT
Try new transport protocol SRT
 
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機
 
WebOS Open Source Edition を試してみた
WebOS Open Source Edition を試してみたWebOS Open Source Edition を試してみた
WebOS Open Source Edition を試してみた
 
Linuxのユーザーランドをinitから全てまるごとgolangで書く
Linuxのユーザーランドをinitから全てまるごとgolangで書くLinuxのユーザーランドをinitから全てまるごとgolangで書く
Linuxのユーザーランドをinitから全てまるごとgolangで書く
 
組み込みLinuxでのGolangのススメ(Go con版)
組み込みLinuxでのGolangのススメ(Go con版)組み込みLinuxでのGolangのススメ(Go con版)
組み込みLinuxでのGolangのススメ(Go con版)
 
組み込みLinuxでのGolangのススメ
組み込みLinuxでのGolangのススメ組み込みLinuxでのGolangのススメ
組み込みLinuxでのGolangのススメ
 
Tricky implementation of Go ARM soft float
Tricky implementation of Go ARM soft floatTricky implementation of Go ARM soft float
Tricky implementation of Go ARM soft float
 
ARM 64bit has come!
ARM 64bit has come!ARM 64bit has come!
ARM 64bit has come!
 
Virtual memory 20070222-en
Virtual memory 20070222-enVirtual memory 20070222-en
Virtual memory 20070222-en
 
Simple and efficient way to get the last log using MMAP
Simple and efficient way to get the last log using MMAPSimple and efficient way to get the last log using MMAP
Simple and efficient way to get the last log using MMAP
 
Tips of Malloc & Free
Tips of Malloc & FreeTips of Malloc & Free
Tips of Malloc & Free
 
Basic of virtual memory of Linux
Basic of virtual memory of LinuxBasic of virtual memory of Linux
Basic of virtual memory of Linux
 
Patch101
Patch101Patch101
Patch101
 
ADB(Android Debug Bridge): How it works?
ADB(Android Debug Bridge): How it works?ADB(Android Debug Bridge): How it works?
ADB(Android Debug Bridge): How it works?
 
Tweaking Google TV emulator
Tweaking Google TV emulatorTweaking Google TV emulator
Tweaking Google TV emulator
 
Inter-process communication of Android
Inter-process communication of AndroidInter-process communication of Android
Inter-process communication of Android
 
Android ipm 20110409
Android ipm 20110409Android ipm 20110409
Android ipm 20110409
 

Último

Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DaySri Ambati
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 

Último (20)

Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 

Android is NOT just 'Java on Linux'

  • 1. Android is NOT just 'Java on Linux' 2011.5.22 2011.10.26 updated Tetsuyuki Kobayashi 1
  • 2. Let's talk about inside of Android. http://www.kmckk.co.jp/eng/kzma9/ 2 http://www.kmckk.co.jp/eng/jet_index.html
  • 3. Who am I?  20+ years involved in embedded systems  10 years in real time OS, such as iTRON  10 years in embedded Java Virtual Machine  Now GCC, Linux, QEMU, Android, …  Blogs  http://d.hatena.ne.jp/embedded/ (Personal)  http://blog.kmckk.com/ (Corporate)  http://kobablog.wordpress.com/(English)  Twitter  @tetsu_koba 3
  • 4. Android is NOT just 'Java on Linux'  Android uses Linux kernel. Only kernel.  User land is totally different from usual Linux system.  Android applications are written in Java language.  Class libraries are similar to Java SE but not equal.  Dalvik VM eats only dex code  need to translate from Java byte code in advance 4
  • 5. Let's explore inside of Android  Assuming you know Linux and Java very well :) 5
  • 6. Today's topic  Android system architecture  Init – runtime – Zygoto  Dalvik VM  Android specific kernel drivers  How to build Android 6
  • 7. Today's topic  Android system architecture  Init – runtime – Zygoto  Dalvik VM  Android specific kernel drivers  How to build Android 7
  • 9. Java is the first class citizen in Android  Dalvik VM is the center of Android runtime.  Almost all daemon services are written in Java.  Application life cycle is described by Java API 9
  • 10. Java is the first class citizen in Android  NDK  native library called from Java via JNI  This is just a library. Application life cycle is the same as Java.  Native activity  Only C/C++ to make Apps. (just hidden JNI part into system.)  not short-cut for C/C++ 10
  • 11. Typical Directory Tree of Android ro: mounted as read only / /(root) (root) initrd (ro) rw: mounted as read and write yaffs2 (ro) /system /system bin etc lib /data yaffs2 (rw) /data usr /cache yaffs2 (rw) /cache /mnt/sdcard removable storage (rw) /mnt/sdcard cf. Usual Linux system assumes all file system are read/writable. 11
  • 12. Today's topic  Android system architecture  Init – runtime – Zygoto  Dalvik VM  Android specific kernel drivers  How to build Android 12
  • 13. Boot sequence 13 quoted from http://hmtsay.blogspot.com/2010/10/android-startup.html
  • 14. init  located on /init  need kernel boot parameter to add “init=/init”  Static linked.  cf. typical linux init is dynamic linked.  Doesn't affect even dynamic link system collapsed.  http://blog.kmckk.com/archives/3137191.html 14
  • 15. Bionic  The standard libraries  libc, libm, pthread, dynamic linker  linker has implicit crash dump function  http://kobablog.wordpress.com/2011/05/12/debuggerd-of-android/  Came from *BSD, not glibc  Currently, doesn't support C++ exception and RTTI.  latest NDK supports these by static linking. 15
  • 16. Prelinking  Locate dynamic link libraries ahead of time.  'apriori' command. Different from 'prelink' command from Red Hat.  Optimized for small embedded system  Allocate fixed address to libraries .  Assume 3GB memory space is large enough to put all libraries together.  Assume not adding/removing libraries. 16
  • 17. Prelink map build/core/prelink-linux-arm.map # 0xC0000000 - 0xFFFFFFFF Kernel # 0xB0100000 - 0xBFFFFFFF Thread 0 Stack # 0xB0000000 - 0xB00FFFFF Linker # 0xA0000000 - 0xBFFFFFFF Prelinked System Libraries # 0x90000000 - 0x9FFFFFFF Prelinked App Libraries # 0x80000000 - 0x8FFFFFFF Non-prelinked Libraries # 0x40000000 - 0x7FFFFFFF mmap'd stuff # 0x10000000 - 0x3FFFFFFF Thread Stacks # 0x00000000 - 0x0FFFFFFF .text / .data / heap # core system libraries libdl.so 0xAFF00000 # [<64K] libc.so 0xAFD00000 # [~2M] libstdc++.so 0xAFC00000 # [<64K] libm.so 0xAFB00000 # [~1M] liblog.so 0xAFA00000 # [<64K] libcutils.so 0xAF900000 # [~1M] libthread_db.so 0xAF800000 # [<64K] libz.so 0xAF700000 # [~1M] libevent.so 0xAF600000 # [???] libssl.so 0xAF400000 # [~2M] libcrypto.so 0xAF000000 # [~4M] libsysutils.so 0xAEF00000 # [~1M] ... 17
  • 19. Zygote fork Zygote process Child process classes classes classes classes classes classes dynamic link classes classes dynamic link Dalvik VM classes libraries Dalvik VM classes libraries classes classes classes classes dynamic link Dalvik VM classes libraries Physical memory space (Actually these are mapped by pages.) 19
  • 20. Zygote  Zygote process preloads typical (approx. 1800) classes and dynamic link libraries so that childlen start quickly.  Copy-on-write  Only when new process writes page, new page is allocated.  All pages not be written are shared among all zygote children.  Exec system call is not used in zygote.  Exec wipes the page mapping table of the process.  It means exec discards zygote cache. 20
  • 21. UID, GID of Applications  UID(user id) and GID(group id) is used for managing multi-user in usual Linux system.  Android use this mechanism to isolate applications.  Each application has unique UID.  Can not read/write other application's files.  Zygote is running as UID=0 (root). After forking child process, its UID is changed by setuid system call. 21
  • 22. Today's topic  Android system architecture  Init – runtime – Zygoto  Dalvik VM  Android specific kernel drivers  How to build Android 22
  • 23. Dalvik VM  executes dex code, which is translated from Java byte code  16bit, register based  cf. Java bytecode is 8bit, stack based  has JIT from Android 2.2 (Froyo)  http://blog.kmckk.com/archives/2691473.html  has concurrent GC from Android 2.3 (Gingerbread)  http://source.android.com/tech/dalvik/ 23
  • 24. Java class libraries  Different from Java ME, which is used in traditional Japanese phone.  Similar to Java SE. But not equal.  Different window/graphics. No AWT, No Swing.  No RMI.  Take care to use user defined class loader  dynamic generated classes doesn't work because Dalvik VM doesn't eat Java class files but Dex files. 24
  • 25. Caveats of NDK programming  Dynamic libraries built by NDK are linked with application process.  forked from Zygote but UID != 0 (root).  consider about permissions.  Don't use fork & exec system calls.  Back ground process should be made as android .app.Service.  Don't use GCC's TLS extension (__thread).  Simple Android dynamic linker does not support it.  java.lang.ThreadLocal is available in Java. 25
  • 26. 3 commands to invoke Dalvik VM  /system/bin/app_process  This is the 'Zygote' process.  /system/bin/dalvikvm  Similar to usual 'java' command.  Try 'dalvikvm -h' to show command line help.  /system/bin/dvz  Send request to Zygote process.  See my blog (Sorry in Japanese)  http://blog.kmckk.com/archives/3551546.html 26
  • 27. Today's topic  Android system architecture  Init – runtime – Zygoto  Dalvik VM  Android specific kernel drivers  How to build Android 27
  • 28. Linux kernel  Many common Linux device drivers are available.  Android specific kernel drivers  binder  ashmem  wake lock  logger  …  http://elinux.org/Android_Kernel_Features  These source code is not yet merged to kernel main line repository. 28
  • 29. Binder  /dev/binder  Base of Inter Process Method Invocation  Not for general purpose. Tuned for specific transaction.  Multi-thread aware  Have internal data per thread  (CF. Socket have internal data per fd.)  Doesn't use ”write” and ”read” system calls. Write and read at once by ”ioctl”.  http://blog.kmckk.com/archives/3676340.html 29
  • 30. Ashmem  Android / Anonymous SHared MEMory subsystem  $(TOP)/system/core/cutils/ashmem.h  int ashmem_create_region(const char *name, size_t size) → returns fd  int ashmem_set_prot_region(int fd, int prot)  int ashmem_pin_region(int fd, size_t offset, size_t len)  int ashmem_unpin_region(int fd, size_t offset, size_t len)  Kernel reclaims not ‘pin’ ed memory  Similar to weak reference of Java. Useful to implement cache.  android.os.MemoryFile from Java program 30
  • 31. Wake lock  Lock to prevent entering sleep mode.  My memos  http://blog.kmckk.com/archives/3298375.html  http://blog.kmckk.com/archives/3304836.html  eLinux wiki  http://elinux.org/Android_Power_Management 31
  • 32. Alarm  kernel implementation to support Android's AlarmManager.  Wake up even when it was in sleep mode. 32
  • 33. Low memory killer  At the shortage of memory, the kernel select a process seems low priority and kill it. (!!)  It's OK. because specification in the Android application life cycle, application should be preserve its own status.  http://blog.kmckk.com/archives/2795577.html 33
  • 34. Logger  Android has unique system-wide log system  http://blog.kmckk.com/archives/2936958.html  http://elinux.org/Android_Logging_System 34
  • 35. Overview of Android Logging System Target Java program Java program System.out /System.err com.android.internal.os Native program android.util.Log com.android.internal.os Host Native program android.util.Log AndroidPrintStream AndroidPrintStream DDMS stdout logcat logcat stdout liblog /stderr liblog adbserver adbd adbd adbserver User Kernel adb logcat main 64KB radio logger logger 64KB /dev/log/main /dev/log/main /dev/log/radio event /dev/log/radio system /dev/log/event 256KB /dev/log/event /dev/log/system 64KB /dev/log/system 35
  • 36. Today's topic  Android system architecture  Init – runtime – Zygoto  Dalvik VM  Android specific kernel drivers  How to build Android 36
  • 37. How to build Android  All source code is available for download  except Google specific services (Google map, Android market, … )  Easy to download source and build them  See AOSP web site  http://source.android.com/  Or, my blog  http://blog.kmckk.com/archives/3722957.html 37
  • 38. Conclusion  Android system architecture is totally different from normal Linux systems.  Android uses Linux kernel only, further more, adding android specific kernel drivers.  Designed for Java applications.  Tuned for small system. 38
  • 39. Q&A Thank you for listening! Any comments to blogs are welcome. 39