第一层:HardWare = 硬件层。
第二层:Bootloader = 引导层。
主要包含:初始化时钟,内存等;以便引导linux内核。
第三层:Linux Kernel = Linux内核驱动层。
主要包含:外设驱动;内存管理;进程管理;电源管理;其实这些都是linux kernel 具有的功能。
第四层:HAL = Hardware Abstraction Layer - 硬件抽象层。
主要包含linux的动态链接库*.so;以及嵌入到APK的NDK代码。
第五层:Library and Runtime = 系统运行库层
第六层:Application FrameWork layer = 应用框架层
主要是直接面向应用程序的Java APK。
第七层:Application = 应用层
所谓的各种APP,包括:拍照,电话,短信,android桌面,浏览器,以及各种游戏。
(1)android应用移植:由于应用程序在不同的硬件平台之间是有差异的,android SDK API 也有可能有差异(因为有的平台厂商会修改原生android SDK API)
(2)android系统移植:主要针对上面的第二层部分内容,因为android的底层其实就是linux系统,而linux系统可以移植到很多硬件平台(ARM,X86,PowerPC),主要的工作还是要保证最小系统可以在特定的平台上可以跑起来,同时还要保证各种外围设备能够正常工作,例如(LCD,TP,camera,BT,WLAN,GPS等等)
PS:android系统移植外设驱动的时候,如果外设厂家提供驱动代码的话,开发难度很小;如果厂家不提供参考代码的话,需要自己根据系统驱动框架编写设备驱动,这样的话,难度还是相当大的,尤其是一些复杂的外设。
HAL层的中文名称叫,硬件抽象层。
存在形式:HAL层的代码一般有C或C++的形式存在,最终编译生成*.so,一种linux动态链接库文件。
那么为什么会有HAL层呢?有什么好处呢?
首先说一下HAL的作用,它处在linux驱动内核层和Android Framework层之间,起着承上启下的作用。
如果没有他,Android SDK会直接和linux 驱动内核直接沟通;这样很不好,不符合很多人的利益,因为各种外设驱动属于linux,而linux又是遵循GPL开源协议,这样的话,驱动代码也要开源,但是这些驱动是很多外围设备厂家辛辛苦苦开发的,不愿意这样白白的开发给所有人,包括很多竞争对手;
那怎么办?由HAL层来解决这个困难,HAL其实就是把原来驱动的控制逻辑一部分独立出来,编译生成SO文件,这部分代码不遵循GPL协议,不需要开源,保证了外设厂家的利益,同时也不影响linux的框架设计。
(1)设备启动后,等待adb口 的出现
(2)adb root
(3)adb shell uname -a 该命令不行,可以使用 adb shell cat /proc/version
(1)搭建软件开发环境,构建linux虚拟机(后面详细介绍)
(2)搭建硬件开发环境,开发板;不一定非要使用网上推荐的SC2440等开发板,只要是一个嵌入式设备都可以,手机或者pad等,只要你有相关的设备资料就可以。
驱动开发的最大的魅力就是软硬结合,没有硬件设备,无从谈起驱动开发;也是限制驱动学习的门槛之一。
(1)硬件知识:电子通信方面的内容;主要是能看懂电路原理图基本就可以了。
(2)linux操作系统相关知识:包括linux虚拟机使用,linux基本常用命令。
(3)基本脚本知识:shell脚本,简单Makefile。
(4)了解编译系统:编译工具的选择,系统的配置过程,编译过程 -> 一般新项目开始搭建的时候会用到。
(5)核心内容,linux 系统驱动的各种框架,各种机制。
(6)个人认为,android系统的启动流程非常关键,有利于建立整个系统的宏观概念,不需要详细深挖,但要知道大概的流程。
(7)android 内核系统机制,应该是linux系统编程和网络编程的揉合。
(1)开放性,android几乎所有源码都是可以免费下载的。遵循Apache开源协议。
(2)强大的SDK,Software Development Kit 软件开发套件 实现操作系统和开发者之间的接口。
android通过总结应用开发规律,提供Activity,Service,Broadcast Receiver以及Content Provide四大组件。
(3)不断改进UI,新版UI更加人性化,对于用户是最直观的艺术盛宴。
(4)逐步完善的生态系统
(5)阵营良莠不齐
(6)系统运行效率有待改善
据不完全统计,android的启动过程花费的平均时间超过了1分钟,甚至有的达到了5分钟以上。
(7)兼容性问题
(1)Android 深度探索(卷I)HAL与驱动开发 - 李宁
(2)深入理解Android内核设计思想 - 林学森
(3)深入理解Android(卷I)- 邓凡平