介绍ppt:
https://www.slideshare.net/EmertxeSlides/embedded-android-system-development-part-i?next_slideshow=3
总体介绍
ppt: https://www.slideshare.net/EmertxeSlides/embedded-android-system-development-part-i?next_slideshow=3
本文介绍了Android的整个发展史。对于不同版本的Android有什么功能,可以查这个资料。
MTP (media transfer protocol):一个Android 平板接入windows之后,正常显示应该是MTP设备。
Android继承了linux的部分特性:
-
安全
-
内存管理
-
进程管理
-
网络协议栈
-
驱动模型
-
抽象层
ART : android runtime , 更方便debug,可以设置观察点。
Android目录结构
Android
-
device: 驱动相关,不同设备的驱动不同
-
kernel: 芯片组的内核树
-
platform : android 平台源码
-
abi : 定义不明确
-
art : android runtime
-
bionic : Android 标准C库,比GUN的C库少了GPL&LGPL协议的代码
-
bootable : Code samples( bootloader ,disk installer , recovery)
-
build : 编译系统入口
-
cts : 测试相关
-
dalvik :虚拟机工具以及核心库
-
developers : 定义不明确
-
development : 平台工程工具,应用模板
-
docs : AOSP相关文档
-
external : 包含所有第三方源码的项目
-
framework : 包含所有框架的源码
-
hardware:硬件相关源码,比如HAL
-
libcore :dalvik, DOM, JSON , LUNI还有其他一些支持文件的测试代码
-
libnativehelper: VM不可知的原生帮助函数
-
ndk : 编译脚本,帮助文档,
-
out :编译生成文件路径
-
packages : AOSP的标准Android应用 , 如果不需要什么应用,可以直接在这里裁剪掉。
-
pdk: 提供给芯片组供应商和 OEM 以迁移到新版本的减少的 Android 版本集
-
prebuilts : 提供给不同机器的交叉编译工具链
-
sdk :编译SDK,大部分都移到到了prebuilts
-
system : 系统核心文件
-
toolchain : 编译安装GNU工具
-
tools :在prebuilts里面的依赖库
-
vendor : HTC 相关,不用管。
-
-
product : 产品代码
-
public project: empty
-
toolchain : 工具链,gcc,ndk,llvm...
-
tools: repo , aospstats
-
trusty : Google's Trusty OS ,跟谷歌相关。
编译系统要求
I5 ,8G ,500G , ubuntu 14.04(最好16.04),
编译办法参考官网。
硬件相关文件
-
bootcode.bin
第二阶段BootLoader,在GPU中执行,加载start.elf 启动GPU,
-
start.elf
GPU硬件,读取config.txt , cmdline.txt ,加载Linux kernel 镜像,启动CPU
GPU跑在一个简单的系统叫做VCOS( video core operation system )
第一阶段的bootloader是写死在SOC中的,这个阶段会挂载硬盘进来,第二阶段才能正常工作。
-
config.txt
-
有与videoCore IV GPU 相关的信息,比如屏幕多大,要用什么解析引擎,在树莓派移植Android时,我就已经改过。
-
linux 内核相关,比如从哪个地址开始加载,设备树,uart波特率
-
-
cmdline.txt
linux命令行,载入内容,启动进程相关?
-
fixup.dat
配置GPU,CPU的SDRAM划分
树莓派设备的目录树:
kernel /rpi /arch /arm/ boot /dts / bcm2710-rpi-3-b.dtb
kernel /rpi /arch /arm/ boot /dts / overlays / vc4-kms-v3d.dtbo
-
bootloader的工作流程
Android系统的驱动流程
zygote 对应 init
是个加载app的守护进程,所有app进程的父进程,由init.rc触发,被app_process启动。
Linux驱动相关
-
good C & programming Skills
-
Linux & the Filesystem
-
Root , User Space Headers & libraries
-
-
Files
-
Regular , Special , Device
-
-
toolchain
-
GCC & GUN相关工具
-
-
Make & Makefiles
-
kernel Source
linux内核代码路径以及相关配置文件路径
比如我们安装了Ubuntu,我们需要调试Ubuntu内核代码时,可以关注以下几个路径:
-
内核源码所在目录: /usr/src/linux
-
标准模块所在目录:/lib/modules/<kernel version>/kernel/...
-
模块配置文件:/etc/modprobe.conf
-
系统窗口:
-
/proc
-
/sys
-
-
系统log : /var/log/
Android 系统开发介绍
aosp能打开时,要重读这一块。
Audio Arch
下图描述了app到linux kernel的调用关系:
audio驱动开发例子:https://www.slideshare.net/EmertxeSlides/embedded-android-system-development-part-iv?next_slideshow=1