1/02/2014

안드로이드 소스구조

1. Android Source구조 

Android File system의 구조

├── abi
├── bionic                  : bionic libc(BSD의 libc 수정)를 포함 (glibc, uclibc사용안함)
├── bootable                : bootloader, recovery mode 관련 코드
├── build                   : 빌드 관련 스크립트를 저장
│   ├── envsetup.sh        : 환경 정보 설정 파일, 제조사의 Flag들에 대한 설정을 함
│   ├── core
│   │   │
│   │   └── prelink-linux-arm.map : shared library들이 로딩되는 번지를 미리 지정한 파일
│   └── target
│     └── board
│           └── generic
│                 ├── AndroidBoard.mk    : 최상위 directive 파일, Android 최종 결과물
│                 │                          구성서 자동 포함 bin에 대한 install을 결정
│                 │                          init.rc, init%hw%.rc 들을 install
│                 └── BoardConfig.mk     : HAL의 en/disable 등을 결정
├── cts                     : Compatibility Test Suite, GMS를 탑재 위해 통과해야 하는 Test
├── dalvik                  : dalvik VM 관련 소스 코드
├── development             : 개발용 application을 저장
├── device                  : 칩 관련 설정 파일 및 디버깅을 위한 cmm 파일 등을 포함
├── external                : Android에서 사용되어지는 Library 및 Tools 관련 소스코드
│     
├── frameworks
│   ├── base               : Android Framework Source Code
│   ├── cmds               : binder 관련된 service manager 소스 코드 및 여러 가지 command
│   ├── libs               : Android baselibrary(AudioFlinger,SurfaceFlinger, util, binder 등)
│   ├── media              : media 관련 Client & Service 라이브러리
│   └── policies           : Android 시스템을 background에서 제어하는 최상위 application
│                               KeyGuard 관련, 화면 제어(rotation..), event 관리 등의 작업 처리
├── hardware                : Android에서 사용하는 h/w 관련 소스 코드 포함(HAL, include..)
│   ├── libhardware        : Board H/W 의존성이 높은 하드웨어 모듈 포함
│   └── libhardware_legacy : 일반적으로 Android에 반드시 있어야 하는 H/W 모듈(audio,wifi..)
├── packages                : Android 기본 Application 소스 코드를 포함
├── pdk
├── prebuilt                : 툴체인과 미리 빌드되어 들어가는 바이너리 파일 포함
├── system                  : Android의 기본 바이너리 소스 코드(init…)
│   ├── core
│   │    ├── init         : Android init 소스 코드
│   │    └── vold         : external storage 제어 모듈 (Éclair)
│   └── vold               : external storage 제어 모듈 (Froyo/Gingerbread)
└── vendor                  : vendor specific code(HAL, product list 관리…)



소스출처
  http://taehyo.egloos.com/4073971
  http://dplex.egloos.com/m/4268602


  • Android 관련 모든 소스 
Android의 관련 모든 Repository를 볼수 있으므로 가능하면 이곳에서 찾아 보자.


  • Android Platform 관련 Source  
상위 구조는 아래의 repository에서 볼수 있고 파악가능하지만, 전체를 보려면 역시 상위를 참조하자.

  https://android.googlesource.com/platform/
  https://android.googlesource.com/device/



  • Android Uboot/Kernel Source 
Android의 다양한 Version 때문에 Kernel의 소스와 Uboot 소스 위치는 다른 것 같으며, 개별소스에서 파악하자. 

  https://android.googlesource.com/kernel/

TI의 Beagle
  https://android.googlesource.com/device/ti/bootloader/uboot/
  https://android.googlesource.com/device/ti/beagle-x15-kernel/

NXP의 IMX
  https://android.googlesource.com/platform/hardware/bsp/bootloader/nxp/uboot-imx/


  • Android Trace32 CMM Script 관련사항 

상위에서 device에서 trace32의 cmm script를 언급하였는데, 이에 관련해서 사용법을 간단히 익혀보자.

  https://m.blog.naver.com/PostView.nhn?blogId=yyg1368&logNo=60119956109&proxyReferer=https%3A%2F%2Fwww.google.com%2F

Trace32의 CMM script 파일 관련사항
  http://trace32.com/wiki/index.php/%EB%94%94%EB%B2%84%EA%B9%85_%EC%8B%9C_%EC%9C%A0%EC%9A%A9%ED%95%9C_%EB%AA%85%EB%A0%B9




1.1 Build 후 OUT Directory 구조.



out/
|-- host/                    # (HOST PC) the directory containing all tools and libraries of build system
|                                     
 -- target/product/generic/         # (TARGET) the root of this product's out directory
    |-- data                        # the directory for creating data file system image
    |-- obj                         # the root directory of build process
    |   |-- APPS                    # android application
    |   |-- ETC
    |   |-- EXECUTABLES             # the root directory containing all native executable 
    |   |                             build output
    |   |-- include
    |   |-- JAVA_LIBRARIES
    |   |-- lib                     # the directory containing copies of stripped
    |   |                             shared libraries,
    |   |                           # other modules will search this directory 
    |   |                             for libraries to resolve linkage
    |   |-- PACKAGING
    |   |-- SHARED_LIBRARIES        # the root directory containing all native 
    |   |   |                          shared library build output
    |   |   |-- {LOCAL_MODULE_NAME}_intermediates    # the direcotry containing 
    |   |       |                     all build output for {LOCAL_MODULE_NAME} module.
    |   |       |                   #  this naming convention is followed by 
    |   |       |                      all subdirectories of module.
    |   |       + -- LINKED         # the directory containing the linked binary 
    |   |                             file, e.g, .so file
    |    -- STATIC_LIBRARIES        # the root directory containing all native 
    |                                 static library build output
    |-- root                        # the directory for creating root file system
    |   |                            ,ramdisk image
    |   |-- data
    |   |-- dev
    |   |-- proc
    |   |-- sbin
    |   |-- sys
    |    -- system
    |-- symbols                     # the directory contains all binary images that has 
    |   |                              debugging symbols
    |   |-- data
    |   |-- sbin
    |    -- system
     -- system                      # the directory for creating system.img, where most of
        |                            appications and libraries reside
        |-- app
        |-- bin
        |-- etc
        |-- fonts
        |-- framework
        |-- lib
        |-- media
        |-- tts
        |-- usr
         -- xbin

Ref.
  http://rxwen.blogspot.kr/2013/01/understanding-android-build-system-out.html


  • out/ 구조 
  1. host : Host Computer를 위한 것들 
  2. target : Target Device or Emulator를 위한 것들  



  • out/target/product/  의 Image 구조 
platform-name: armemus or x86emu or beaglebone 등 platform에 따라 달라지며, 최종 output image들 
  1. boot.img
  2. system.img
  3. ramdisk.img
  4. userdata.img
- out/target/product//obj

기본으로 /out 으로 생성이 되지만  아래처럼 변경이 가능

export OUT_DIR_COMMON_BASE=

Using a separate output directory 참조
  https://source.android.com/setup/build/initializing
  https://elinux.org/Android_Build_System


2. Android Version 정보


Android Version 별 정보 및 특징
  http://en.wikipedia.org/wiki/Android_version_history
  http://ko.wikipedia.org/wiki/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C_%EB%B2%84%EC%A0%84_%EC%97%AD%EC%82%AC

댓글 없음 :