Android
This presentation is the property of its rightful owner.
Sponsored Links
1 / 32

Android 嵌入式系统软件开发 PowerPoint PPT Presentation


  • 154 Views
  • Uploaded on
  • Presentation posted in: General

Android 嵌入式系统软件开发. Android Embedded System Software Development 周 庆 国 ( [email protected] ) 兰 州 大 学. 第二章 Android 源码结构分析. 2.1 源码结构分析 Android source. 2.2 Android 编译系统介绍. 2.3 Android 初始化脚本语言介绍. 2.1 源码结构分析. 总目录 |-- Makefile |-- bionic                (bionic C 库 )

Download Presentation

Android 嵌入式系统软件开发

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Android

Android嵌入式系统软件开发

Android Embedded System Software Development

周 庆 国

[email protected]

兰 州 大 学


Android

第二章 Android源码结构分析

2.1源码结构分析Android source

2.2 Android编译系统介绍

2.3 Android 初始化脚本语言介绍


Android

2.1 源码结构分析

总目录

|-- Makefile

|-- bionic                (bionic C库)

|-- bootable             (启动引导相关代码)

|-- build                 (存放系统编译规则及generic等基础开发包配置)

|-- cts                  (Android兼容性测试套件标准)

|-- dalvik                (dalvik JAVA虚拟机)

|-- development     (应用程序开发相关)

|-- external              (android使用的一些开源的模组)

|-- frameworks       (核心框架——java及C++语言)

|-- hardware           (主要保护硬解适配层HAL代码)

|-- out                  (编译完成后的代码输出与此目录)

|-- packages            (应用程序包)

|-- prebuilt              (x86和arm架构下预编译的一些资源)

|-- sdk                 (sdk及模拟器)

|-- system              (文件系统库、应用及组件——C语言)

`-- vendor              (厂商定制代码)

3


Android

bionic 目录

|--libc (c库)

| |--arch-arm (ARM架构,包含系统调用汇编实现)

| |--arch-x86 (x86架构,包含系统调用汇编实现)

| |--bionic (由C实现的功能,架构无关)

| |--docs (文档)

| |--include (头文件)

| |--inet (Inet 相关)

| |--kernel (Linux内核中的一些头文件)

| |--netbsd (nesbsd系统相关)

| |--private (一些私有的头文件)

| |--stdio (stdio实现)

| |--stdlib (stdlib实现)

| |--string (string函数实现)

| |--tools (几个工具)

| |--tzcode (时区相关代码)

| |--unistd (unistd实现)

| `--zoneifo (时区信息)

|-- libdl (libdl实现,dl是动态链接,提供访问动态链接库的功能)

4


Android

|--libm (libm数学库的实现)

| |--alpha (apaha架构)

| |--amd64 (amd64架构)

| |--arm (arm架构)

| |--bsdsrc (bsd的源码)

| |--i386 (i386架构)

| |--i387 (i387架构)

| |--ia64 (ia64架构)

| |--include (头文件)

| |--man (数学函数)

| |--powerpc (powerpc架构)

| |--sparc64 (aparc64架构)

| `--src (源代码)

|--libstdc++ (libstdc++ C++实现库)

| |--include (头文件)

| `--src (源代码)

|--libthread_db (多线程程序的调试器库)

| `--include (头文件)

`-- linker (动态链接器)

`--arch (支持arm和x86两种架构)

5


Android

|--bootloader (适合各种bootloader的通用代码)

| `--legacy (估计不能直接使用,可以参考)

| |--arch_armv6 (V6架构,几个简单的汇编文件)

| |--arch_msm7k (高通7k处理器架构的几个基本驱动)

| |--include (通用头文件和高通7k架构头文件)

| |--libboot (启动库,都写得很简单)

| |--libc (一些常用的C函数)

| |--nandwrite (nandwrite函数实现)

| `--usbloader (usbloader实现)

|-- diskinstaller (android镜像打包器,x86可生产iso)

`--recovery (系统恢复相关)

|--edify (升级脚本使用的edify脚本语言)

|--etc (init.rc恢复脚本)

|--minui (一个简单的UI)

|--minzip (一个简单的压缩工具)

|--mtdutils (mtd工具)

|--res (资源)

| `--images (一些图片)

|--tools (工具)

| `--oat (OTA Over The Air Updates升级工具)

`-- updater (升级器)

6


Android

frameworks 目录 (核心框架----java及C++语言)

|-- base (基本内容)

| |-- api (xml文件,定义了java的api)

| |-- awt (AWT库)

| |-- build (空的)

| |-- camera (摄像头服务程序库)

| |-- cmds (重要命令:am、app_proce等)

| |-- core (核心库)

| |-- data (字体和声音等数据文件)

| |-- docs (文档)

| |-- graphics (图形相关)

| |-- include (头文件)

| |-- keystore (和数据签名证书相关)

| |-- libs (库)

| |-- location (地区库)

| |-- media (媒体相关库)

| |-- obex (蓝牙传输库)

| |-- opengl (2D-3D加速库)

| |-- packages (设置、TTS、VPN程序)

| |-- sax (XML解析器)

| |-- services (各种服务程序)

7


Android

| |--telephony (电话通讯管理)

| |--test-runner (测试工具相关)

| |--tests (各种测试)

| |--tools (一些叫不上名的工具)

| |--vpn (VPN)

| `--wifi (无线网络)

|--opt (可选部分)

| |--com.google.android (有个framework.jar)

| |--com.google.android.googlelogin (有个client.jar)

| `--emoji (standard message elements)

`--policies (Product policies are operating system directions aimed at apecific uses)

`--base

|-- mid (MID设备)

`--phone (手机类设备一般用这个,与锁屏有关的代码)

返回首页

8


2 2 android

2.2 Android 编译系统

在build/core中build-system.html中如下阐述:

1. Multiple Targets

2. Non-Recursive Make

3. Rapid Compile-Test Cycles

4. Both Environment and Config File Based Settings

5. Object File Directory / make clean

9


Android1

Android 编译系统

Android编译系统具有支持多架构(linux-x86、windows、arm等)、多语言(汇编、C、C++、Java等)、多目标、多编译方式。

Android编译系统(build system)集中于Android源码下的build/core下

10


Android2

Android 编译系统


Android3

Android 编译系统

main.mk (主控Makefile文件)

base_rules.mk (对一些Makefile的变量规则化)

config.mk (关于编译参数、编译命令的一些配置)

definations.mk (定义了很多编译系统中用到的宏,相当于函数库)

Makefile(主要控制生成system.img,ramdisk.img,userdata.img,以及recorvery image,sdk等)

Binary.mk ( 控制如何生成目标文件)

Clear_vars.mk (清除编译系统中用到的临时变量)

Combo/linux-arm.mk (控制如何生成linux-arm二进制文件,包括ARM相关的编译器,编译参数等的设置)

Copy_headers.mk (将头文件拷贝到指定目录)

分散于各个目录下的Android.mk (控制生成局部模块的源码,名称所需头文件路径,依赖库等特殊选项)

Build/envsetup.mk (编译环境初始化,定义一些实用的shell函数,方便编译使用)

12


Android build system

Android build system的配置部分的主要构成及相互关系

13


Main mk

main.mk

l         初始化相关的参数设置(buildspec.mk、 envsetup.mk、config.mk)

l         检测编译环境和目标环境

l         决定目标product

l         读取product的配置信息及目标平台信息

l         清除输出目录

l         检查版本号

l         读取Board的配置

l         读取所有Module的配置

l         根据配置产生必要的规则(build/core/Makefile)

l         生成image

14


Android

不同编译目标对应的文件


Android

不同编译目标对应的脚本关系

16


Android mk

Android.mk写法

(1)首先需要指定LOCAL_PATH变量,用于查找源文件

LOCAL_PATH:=$(call my-dir)

(2)Android.mk中可以定义多个编译模块,每个编译模块都是以include $(CLEAR_VARS)开始以include $(BUILD_XXX)结束

17


Android mk1

Android.mk语法

include $(CLEAR_VARS)  让GNU MAKEFILE为你清除除LOCAL_PATH以外的所有LOCAL_XXX变量

编译名称(LOCAL_MODULE := <build_name>)

定义一些标记

(LOCAL_MODULE_TAGS := eng development)

决定你的程序需要哪些文件:

(LOCAL_SRC_FILES := main.c).

定义是否链接到其他库

(LOCAL_SHARED_LIBRARIES := cutils)

include $(BUILD_STATIC_LIBRARY)表示编译成静态库include $(BUILD_SHARED_LIBRARY)表示编译成动态库include $(BUILD_EXECUTABLE)表示编译成可执行程序

18


Android mk2

Android.mk简单示例

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := hello

LOCAL_SRC_FILES := hello.c

include $(BUILD_SHARED_LIBRARY)

19


Android

编译成静态库示例

include $(CLEAR_VARS)LOCAL_MODULE = libhelloLOCAL_SRC_FILES = hello.cLOCAL_C_INCLUDES = $(INCLUDES)LOCAL_SHARED_LIBRARIES := libcutilsLOCAL_COPY_HEADERS_TO := libhelloLOCAL_COPY_HEADERS := hello.hinclude $(BUILD_STATIC_LIBRARY)

20


Android

编译成动态库示例

include $(CLEAR_VARS)LOCAL_MODULE = libhelloLOCAL_SRC_FILES = hello.cLOCAL_C_INCLUDES = $(INCLUDES)LOCAL_SHARED_LIBRARIES := libcutilsLOCAL_COPY_HEADERS_TO := libhelloLOCAL_COPY_HEADERS := hello.hinclude $(BUILD_SHARED_LIBRARY)

21


Android

编译成可执行文件

LOCAL_PATH=$(call my-dir)

include $(CLEAR_VARS)LOCAL_SRC_FILES:=main.c

LOCAL_C_INCLUDE +=$(LOCAL_PATH)

LOCAL_MODULE:=helloexe

LOCAL_MODULE_TAGS:=enginclude $(BUILD_EXECUTABLE)

22


2 3 init

2.3 Init初始化脚本语言

  • init是Linux用户空间的第一个进程(1号进程)

  • init的职责

    • init进程负责创建系统中的几个关键进程

    • init还提供一个Property service来管理系统的很多属性

  • Init会解析两个配置文件

    • 与硬件平台相关的配置文件

    • 系统配置文件: init.rc

23


Android

Init初始化脚本语言

Android系统具有自己风格的*.rc初始化文件,这些初始化文件的具体语法规则,可以参考源代码树system/core/init/readme.txt文件中的介绍

Init.rc脚本的实例可以参考源代码树

system/core/rootdir/init.rc文件中的介绍

Android的Init初始化脚本语言由Actions、Commands、Services、Options四类组成

24


Android

Init初始化脚本语言:语法约束描述

1、所有类型的语句都是基于行的,语句由空格分开的标记组成。当标记中包含空格时,用C语言风格的反斜杠进行转义。用行末的反斜线表示续行。

2、以‘#’开始的行是注释行

3、Actions和Services语句隐含表示一个新的段落的开始。Commands和Options归属于上方最近的一个段落。第一个段落之前的Commands和Options将被忽略。

4、Actions和Services拥有唯一性的名字。如果出现重名,那么后出现的定义将被作为错误而略掉

25


Actions

Actions

Actions由一系列的commands组成,同时拥有一个触发器用来决定Actions何时发生。on <trigger>

<command>

<command>

<command>

26


Services

Services

Services是由Init启动的程序,并在退出时重启

service <name> <pathname> [ <argument> ] *

<option>

<option>

……

27


Options

Options

Options是Services的修饰器,将影响Init如何、何时运行service

28


Triggers

Triggers

Triggers(触发器)是用来匹配导致Action发生的某种事件

29


Commands

Commands

30


Properties

Properties

返回首页

Init更新一些系统属性来提供洞察它正在做什么

31


Android

谢谢

32

32

32


  • Login