昨天晚上回到宿舍之后想起来这本书,既然是考试内容就看看一看吧,今天中午的时候把前四章看完了,觉得里面的内容还是挺实用的至少前四章是这样的,现在把笔记心得上传一下。
安卓系统移植笔记
首先需要支持硬件平台的cpu架构,其次需要让安卓可以识别平台上的各种硬件(声卡等),再次移植HAL
此处识别硬件就是由linux内核完成的,因此需要移植或者编写linux驱动。
HAL位于应用程序和驱动之间,在安卓系统架构的第2层(程序库.so文件)
此处为什么有了HAL层?
老罗的博客:Android硬件抽象层(HAL)概要介绍和学习计划
驱动移植的基本原则是尽可能找到驱动和HAL的源代码,在源代码的基础上编写。
了解编写linux驱动和HAL程序库的步骤和规则
不同linux版本的驱动程序不能通用需要修改源代码并在新内核下编译才能使用。移植时主要考虑linux内核版本不考虑安卓版本。
查看linux内核版本号:终端执行uname -a 或者cat /proc/version
输出:Linux wode 3.19.0-56-generic #62-Ubuntu SMP Thu Mar 10 22:40:07 UTC 2016 x86_64 x86_64
x86_64 GNU/Linux
Linux内核版本有两种:稳定版和开发版 ,Linux内核版本号由3个数字组成:r.x.y
r:目前发布的内核主版本。
x:偶数表示稳定版本;奇数表示开发中版本。
y:错误修补的次数。
内核版本号每位都代表什么?
以版本号为例:2.6.9-5.ELsmp ,
r: 2 , 主版本号
x: 6 , 次版本号,表示稳定版本
y: 9 , 修订版本号,表示修改的次数
头两个数字合在一齐可以描述内核系列。如稳定版的2.6.0,它是2.6版内核系列。
5: 表示这个当前版本的第5次微调patch ,而ELsmp指出了当前内核是为ELsmp特别调校的
EL : Enterprise Linux ;smp : 表示支持多处理器,表示该内核版本支持多处理器
开发条件:ubunu linux ,熟悉GNU C ,掌握一些硬件知识,一块开发板,不断的练习。
驱动针对的对象是存储器和外设而不是针对cpu核
linux设备包括字符设备,块设备,网络设备等。
一般的安卓驱动都会有对应的HAL,不过HAL也不是必须的,通过NDK也可以直接访问linux驱
动,但是googl建议linux驱动编写对应的HAL程序库。
cpu不需要安装驱动只要是二进制代码都可以识别和运行。
HAL :硬件抽象层
链接: