文档库 最新最全的文档下载
当前位置:文档库 › 安卓驱动

安卓驱动

1、可移植性
程序就是程序员使用编程语言让机器按照程序的逻辑及流程进行工作。
程序员使用的编程语言,如果是高级语言,一般的都是类人类的语言(按照人的思维习惯来组织逻辑结构及流程)。而机器能够理解的,一般的仅仅是机器指令。所以存在编译器或是解释器,即一个翻译者。
一般的,程序员不可能把所有事情都做了,所以编程的程序往往是运行在特定系统平台(软件系统及硬件)上。
所以所谓的可移植性需要考虑的有三个方面的事情:

A、语法特性
尽量避免使用特定语法,而使用通用的标准语法。
B、编译器特性
尽量避免使用与特定版本的编译器相关的代码。
C、平台特性
尽量避免出现跟特定软件系统或是硬件相关的代码。

在此必须强调的是:凡事不可以走极端,适时的权衡来决定最终方案。

2、学习的内容
A、可移植性
B、移植方法

3、成熟代码移植方法涉及内容
A、有的现成好的直接选配
这个工作主要是熟悉该源码的编译系统,就是源码自动化编译是怎么组织的。linux环境下不外乎是Makefile及脚本。所以得熟悉这两个方面的知识。

B、有的不好的代码修改好后选配
这个工作不仅仅是要熟悉编译系统,还要熟悉别人的代码结构。一般牛X的软件架构也牛X,所以主要是学习牛X的人设计的代码结构,所谓的框架。框架懂了,再熟悉里面的细节,就可以改了。

C、添加新代码并选配
这个工作同样要熟悉编译系统及源码结构。这个时候对框架可能不能仅仅限于知道,而且要深刻理解,按照牛人的思路来设计代码。

4、系统启动过程
上电 ------>
引导程序(片内固件/外存0地址映射)
---加载--->
bootloader(初始化必要硬件,加载内核,譬如:u-boot)
---加载(外存读写/网络上传/接口(USB/串口)上传)--->
内核
---挂载--->
根文件系统(初始化/加载程序(服务))

5、系统移植涉及工作
A、bootloader移植
B、内核移植
C、根文件系统制作

6、u-boot移植
(1)、选平台
A、指定交叉编译工具链
修改Makefile

手工指定
make ARCH=arm CROSS_COMPILE=arm-linux-

B、选平台
修改两个阶段代码
体系结构 CPU 板子名字 公司 芯片
@$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 samsung s3c24x0
make smdk2410_config


选择指定代码

选择生效

(2)、定制板文件(设备主机端初始化)

(3)、选配模块(命令、驱动、逻辑模块)

7、linux kernel移植
(1)、选平台
A、指定交叉编译工具链
修改Makefile

手工指定

B、选平台

(2)、定制板文件(系统初始化、添加设备(设备主机端初始化、设备信息))


(3)、选配模块(驱动及逻辑模块)


8、android的移植就可以简单的说成有以下方面的工作:
A、熟悉android的编译系统
主要是.mk文件的规则,这个官网及源码中有文档说明(development/Ndk/Docs/android-mk.txt),得好好研究清楚。源码中的脚本,譬如:build/envsetup.sh

B、熟悉android的源码目录结构
system:根文件系统相关的一些代码
packages:android的一些APP的源码
frameworks:framework层代码,不改动android源码的话,主要就是app层调用hal层代码的接口实现的源码
hardware:hal层代码
devices和vendor:厂商定制代码
build:编译系统的一些mk文件
out:是编译输出目录
主要的一些目录就是上面了,对于初学的话,差不多就足够了。当然所有的都熟悉是最好了。

C、三个层次的代码
要向android添加代码的话,一般主要熟悉三个层次的代码就差不多了。
APP<--->framework<--->HAL
APP:应用程序层次,主要是java代码,通过跨平台的java编写的代码来完成需求逻辑对系统提出功能性要求,让系统去完成相应的动作。
framework:cpp代码,主要是提供给java调用的接口,这些接口通常是去调用到hal层的代码。
HAL:登记一组供framework回调的函数,来完成一定的功能。

相关文档