基于Android的开源平板电脑 (FSPAD723)系统构成分析 潘友华
内容大纲 平板概述 平板的硬件系统 概述 ARM处理器 主要外设 平板的软件系统 系统移植 android文件系统
平板概述 平板电脑(Tablet Personal Computer),是一种以触摸屏作为输入设备的小型、方便携带的个人电脑。 微软的定义:平板电脑就是一款无须翻盖、没有键盘、小到可以手持的功能完整的PC。 目前主要有基于ARM架构和x86架构两类,前者主要支持的系统有iOS和android,后者主要支持windows系统。 60年代末艾伦·凯(Alan Kay)提出新型笔记本电脑,本世纪初比尔·盖茨(Bill Gates)正式定义了平板电脑,到2010年被乔布斯(Steven Paul Jobs)称为非平板的iPad的出现,引发了平板电脑应用的火爆。
平板的硬件系统-概述 平板电脑由于其自身的特点:低功耗、高性能,故此其硬件系统一般都是基于嵌入式处理器芯片构成。 目前比较主流的平板电脑的嵌入式芯片主要有:高通的骁龙处理器、苹果的Ax系列处理器、intel的Atom处理器、NVIDIA的Tegra系列处理器、通用ARM处理器。 主要的外设:视频、音频、摄像头、wifi、重力传感器、大容量外存、外置I/O口、电源等等。 1、苹果、骁龙、Tegra基于ARM架构 2、Atom x86架构
平板的硬件系统-概述
平板的硬件系统-概述
平板的硬件系统-ARM处理器 珠海全志科技股份有限公司是领先的智能应用处理器SoC和智能模拟芯片设计厂商。公司主要产品为多核智能终端应用处理器、智能电源管理芯片等。
平板的硬件系统-ARM处理器
平板的硬件系统-主要外设 扩展内存
平板的硬件系统-主要外设 S/T:sample test
平板的硬件系统-主要外设 扩展外存 Sandisk SDTNQFAMA-004G 4G bit Nand Flash 19nm MLC MLC 全称为Multi-Level Cell,多层单元闪存,MLC通过使用大量的电压等级,每一个单元储存两位数据,数据密度比较高。
平板的硬件系统-主要外设 LCD(Liquid Crystal Display) 1路RGB 输出、800x480像素、电容式触摸屏(可支持5点)
平板的硬件系统-主要外设 CTP(Capacitive Touch Panel) 5点电容式触摸屏控制芯片GT818:采用投射式电容检测原理,由16个驱动通道与10个感应通道组成触摸检测网络,通过内置模拟放大电路、数字运算模块及高性能MPU,得到实时准确的触摸信息,并通过I2C传输给主控芯片,实现“所点即所得”。
平板的硬件系统-主要外设 Wifi Realtek RTK8188ETV 802.11b/g/n 无线网络,支持 2.4G 频段
平板的硬件系统-主要外设 传感器 重力传感器:MEMSIC mxc6225xu 该传感器利用MEMS热对流技术,使用标准的CMOS工艺制造。传感器内部不包含任何移动部件,从而大大提高了现场可靠性,消除了与竞争产品相同的重复性问题。
平板的硬件系统-主要外设 Camera 格科GC0308 CMOS image sensor,效果出众的高端VGA芯片。 支持640 x 480分辨率,数据格式(8-bit)YUV/RGB/RAW Bayer
平板的硬件系统-主要外设 电源适配器 AXP223是高度集成的电源系统管理芯片,针对单芯锂电池(锂离子或锂聚合物)且需要多路电源转换 输出的应用,提供简单易用而又可以灵活配置的完整电源解决方案。 集成了USB3.0-Compatible flash charger,支持21电源输出。还整合了过/欠压(OVP/UVP)、过温(OTP)、过流(OCP)等保护电路。 智慧电能平衡(Intelligent Power Select, IPS™)电路可以在 USB 以及外部交流适配器、锂电 池和应用系统负载之间安全透明的分配电能,并且在只有外部输入电源而没有电池(或者电池过放/损坏) 的情况下也可以使应用系统正常工作。
平板的软件系统—概述 系统引导过程 S/T:sample test
平板的软件系统—概述 android系统构成
平板的软件系统—概述 移植的主要工作
平板的软件系统—系统移植 一般的,系统软件移植,主要会有选、改、添/减: A、有现成直接可用的代码,则选中编译 主要是熟悉源码组织结构和编译系统。一般的,基于linux环境下的编译系统,一般都是由脚本及Makefile组成。 B、有现成的代码,但是部分代码不合适,则修改后选中编译 除熟悉源码组织结构和编译系统外,还需要熟悉系统初始化流程,理解代码组织框架等等。 C、没有的代码,则编写添加,多余代码则删除 一般的,需要添/减的都是涉及设备控制的逻辑和功能模块。添加的时候,除熟悉源码组织结构和编译系统外,对该系统源码设计的思路要充分理解,按照其设计思路设计新的代码并加入到源码中。
平板的软件系统—系统移植 三个方面的工作: 1、选平台 指定平台相关的代码目录。系统软件一般都是分层设计:存在应用需求代码,逻辑核心代码及硬件相关代码三个层次。一般的,这个选平头的工作主要是选择与硬件平台相关的初始化代码。 2、修改/定制板级文件 板级相关的代码,逻辑及设备初始化相关代码添/减、修改。 3、选配模块 选择相应的应用需求代码、逻辑相关代码或是设备驱动代码。 20.03.2017
平板的软件系统—系统移植 BL两个阶段的代码: A、第一阶段 初始化基本的硬件 把bootloader自搬运到内存中 设置堆栈指针并将bss段清零。为后续执行C代码做准备 跳转到第二阶段代码中 B、第二阶段 初始化本阶段要使用到的硬件 读取环境变量 如果是自启动模式,从Flash或通过网络加载内核并执行 如果是下载模式,接收到用户的命令后执行 20.03.2017
平板的软件系统—系统移植 内核启动的准备条件: A、保存平台号到r1中 B、保存参数地址到r2中(param_struct 或 taglist) C、关闭d-cache、i-cache、mmu等等 20.03.2017
平板的软件系统—系统移植 android kernel与linux kernel的差异: kernel编译系统: 机器码定义 本质上android kernel还是linux kernel,但是还是修改添加了一些内容,譬如:Android IPC(Binder)、Android日志系统(Logger)、Android电源管理(Power)、Android闹钟管理(Alarm)、Android内存控制台(Ram_console)、yaffs文件系统等等。 kernel编译系统: Kconfig —— 提供选项 .config —— 保存选择结果 Makefile —— 根据.config中选择结果来指导编译 机器码定义 arch\arm\tools\mach-types 内核启动参数格式 u-boot可以传递内核启动参数给内核,但是存在两种格式 交叉编译工具链的版本 20.03.2017
平板的软件系统—Android文件系统 文件系统就是管理外存上数据的逻辑结构,是存储、组织计算机文件和数据的一种方法,更严格地说,是一套实现了数据的存储、分级组织、访问和获取等操作的抽象数据类型(Abstract data type),通过它来访问、查找文件和数据很容易。外存数据在硬盘就是具体位置,用代码表述的话就是起始地址,但是看着不直观,操作也不方便,有文件系统弄出文件及目录的概念来翻译转换这些数据区域操作更方便。打个比方:一本书中就好比文件系统,目录及内容就是被文件系统管理的正文,有了目录,读写查找书的内容才方便。 涉及概念: A、内容 命令(软件、系统服务等)、库、脚本、配置、目录等等 B、格式 文件系统的内容总是以特定格式存储在外存上的。嵌入式设备中常用flash作为外存,对应的文件系统有yaffs/yaffs2、jffs2、cramfs等等。 20.03.2017
平板的软件系统—Android文件系统 一般的,Android系统磁盘分区如下: Boot分区:存储boot.img映像 System分区:存放System.img映像 UserData分区:存放userdata.img映像 Recovery分区:存放recovery.img映像 Cache分区:应用程序缓存分区,加快程序启动 Misc分区:系统设置厂商硬件设置信息分区 20.03.2017
平板的软件系统—Android文件系统 boot.img镜像不是普通意义上的文件系统,而是一种特殊的Android定制格式,由文件头信息boot header,压缩的内核,文件系统数据ramdisk以及second stage loader(可选)组成,它们之间非页面对齐部分用0填充。 ramdisk.img是一个最基础的小型文件系统,是对root目录的打包和压缩,其中包含了启动android的很重要的文件,比如内核启动完后加载的第一个进程init、一些重要的配置文件等,总之它控制着整个android的启动。根据 init.rc、init.xxx.rc来初始化并装载系统库、程序等直到开机完成。以下是一个典型的ramdisk中包含的文件列表: A、脚本配置文件及初始化程序 /init.rc、/init.xxx.rc、default.prop、/init B、目录 /proc/、/dev/、/sys/、/sbin/、/system/、/data/ android源码中提供mkbootimg工具来制作镜像包。格式如下: mkbootimg --kernel 内核压缩包 --ramdisk ramdisk镜像 --board "xxx" --base 基地址 -o boot.img 20.03.2017
平板的软件系统—Android文件系统 Android编译结果: 保存目录:out/target/product/<products>/ 不同的平台其输出到out/target/product/不同的子目录下 ramdisk.img: 虚拟内存盘,用内存来模拟磁盘,它在Linux内核启动后被挂载,该映像里保存有Android最基本的文件系统以及一些命令 system.img: Android系统主要的文件系统映像,里面包含有Android系统运行必需的库、程序和配置文件 userdata.img: 用户数据映像,它是用户应用程序、用户信息保存目录 recovery.img: 系统恢复映像,当系统进入恢复模式时的启动映像 20.03.2017
平板的软件系统—Android文件系统 android源码的编译系统: build/envsetup.sh lunch命令 A、定义了一些shell命令函数,这些命令主要是初始化编译环境,选择定制厂商等等。 B、加载vendor目录下自定义厂商产品编译项文件vendorsetup.sh,以此来让编译系统编译不同产品的定制目录。 lunch命令 打印出所有系统编译项,设置主要环境变量 TARGET_PRODUCT TARGET_BUILD_VARIANT TARGET_BUILD_TYPE 20.03.2017
平板的软件系统—Android文件系统 android源码编译系统的几个重要的Makefile Android.mk main.mk 定义了编译全部代码的依赖关系 config.mk 用于配置编译系统,决定如何编译 envsetup.mk 定义了编译环境配置 product_config.mk 读取AndrodProducts.mk生成TARGET_DEVICE变量 AndroidProducts.mk 定义某厂商所有产品文件列表 BoardConfig.mk 定义开发板软件相关配置项,将来影响系统条件编译。 20.03.2017
平板的软件系统—Android文件系统 厂商定制 20.03.2017
平板的软件系统—Android文件系统 android根文件系统初始化 20.03.2017
平板的软件系统—Android文件系统 init进程 init.rc脚本 关键字 init进程是一个由内核启动的用户级进程。启动过程就是代码init.c(system\core\init目录下)中main函数执行过程。init进程会解析执行init.rc,就是所谓的初始化脚本。 init.rc脚本 init.rc文件由语句组成,主要包含了四种类型的语句:Action、Commands、Services、Options。在init.rc文件中一条语句通常是占据一行。单词之间是通过空格符来相隔的。如果需要在单词内使用空格,那么得使用转义字符“\”,如果在一行的末尾有一个反斜杠,那么是换行折叠符号,应该和下一行合并成一起来处理,这样做主要是为了避免一行的字符太长,与C语言中的含义是一致的。注释是以#号开头。Action和services显式声明了一个语句块,而commands和options属于最近声明的语句块。在第一个语句块之前 的commands和options会被忽略。 关键字 section:语句块,相当于C语言中大括号内的一个块。一个Section以Service或On开头的语句块。以Service开头的Section叫做服务,而以On开头的叫做动作(Action) action:动作 services:服务 commands:命令 options:选项 trigger:触发器,或者叫做触发条件 class:所属类,即可以为多个service指定一个相同的类属,方便操作同时启动或停止 20.03.2017
平板的软件系统—Android文件系统 android底层代码层次及结构 20.03.2017
平板的软件系统—Android文件系统 烧写根文件系统 A、制作镜像包 B、挂载拷贝 (1)使用专用工具把根文件系统的内容按指定格式制作成一个镜像包 (2)使用仿真环境或是BL来烧写该镜像包 B、挂载拷贝 (1)烧写分区以指定格式挂载到指定目录 (2)向该目录拷贝根文件系统的内容 20.03.2017
Q&A