第一章Android底层开发驱动_第1页
第一章Android底层开发驱动_第2页
第一章Android底层开发驱动_第3页
第一章Android底层开发驱动_第4页
第一章Android底层开发驱动_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Android底层开发驱动李伟民weiminli@WhatisDriver?驱动程序的魅力硬件不能使用?------70%没安装驱动PC和手机要使用外部硬件设备,均需要安装对应的驱动程序驱动程序扮演一个沟通的角色,负责把硬件的功能告诉操作系统,并且将系统的指令传达给硬件,让他开始工作。WhatisDriver?Windows驱动购买的硬件附带有驱动Windows系统自带有大量的驱动从Internet下载驱动手机驱动手机一般不能和电脑直接连接,必须用手机自带的磁盘驱动一下。本质上是安装一个读取手机内存信息的程序。开源还是不开源?Android是基于Linux的,Linux是完全开源的,Android也号称开源。But!2010年2月,Linux的维护者却将Android代码从LinuxKernel代码库中删除。原因:Android修改了Kernel,但不提供修改的细节。Android不真正开源!从为什么选择Java谈为什么不开源驱动程序Java的好处只要编写一次程序,在多个硬件平台上运行为什么驱动不开源?LinuxKernel的版权是GPL,驱动也需公开源代码。这是硬件厂商不太愿意接受的。Google玩了小心机:把驱动程序移到userspace中,让其在LinuxKernel之上运行。然后在Kernel上开一个小门,让本来不能直接控制到硬件的userspace程序也可以碰得到。从为什么选择Java谈为什么不开源驱动程序带来的问题Kernel(GPL)和Android(ASL)采用不同的许可证。在ASL中,用户可以随意使用源代码而不必开源。因此建立在Android之上的硬件驱动和应用程序都可以保持封闭。影响有利于推广Android,并且可以吸引更多的厂商和软件开发商的加入。同时也宣布放弃了构建一个真正开源的手机系统的机会。Android框架Android层次分析内核层:Linux的一个变种避开了与硬件直接打交道基于Linux的的驱动开发可扩展性很强硬件抽象层:内核之上的“小门”UserspaceC/C++librarylayerDefinestheinterfacethatAndroidrequireshardware“drivers”toimplementSeparatestheAndroidplatformlogicfromthehardwareinterface本质上希望通过定义硬件“驱动”的借口来进一步降低Android与硬件的耦合度Android层次分析系统运行库层:系统正常运行的基础库C库层,实际上很多都是成熟的开源项目Android是如何有机地与这些库建立联系应用程序框架层:与APP开发人员关系最近Java库,为上层应用程序提供了API接口囊括了不少系统级服务进程的实现应用程序层Android软件开发分为:系统移植与应用程序开发不仅要了解如何使用API接口去完成一个功能,还要尽可能了解这些接口及其下的底层框架是如何实现的Linux架构用户应用程序C库Linux系统调用接口进程管理内存管理Linux文件系统字符设备驱动磁盘/Flash文件系统块设备驱动套接字TCP/IP网络驱动设备硬件操作系统Android与LinuxLinux简介向企业核心应用迈进主导移动平台新技术为Linux加速:虚拟化,云计算,大数据Android和Linux的关系Android是继承于Linux的Android和Linux内核的区别:Android在底层Linux上加了一层Dalvik,Android的APP运行在Dalvik上(.dex)和Android密切相关的Linux内核知识安全用户权限和文件目录权限内存管理确定是否有足够的内存来处理数据从可用的内存中获取一部分内存向可用内存池中返回部分内存,以使其可以由程序的其他部分或者其他程序使用进程管理几个命令:ps、pstree、top、kill、nice设备驱动、网络套接字分析Linux源代码很有必要三个前提:熟练使用Linux操作系统掌握操作系统理论基础掌握C语言基础源代码目录结构分析 arch:和硬件体系结构相关的代码,每种平台占一个相应目录。 drivers:设备驱动程序,每个不同驱动占用一个子目录。 fs:支持的各种文件系统,如EXT、FAT、NTFS、JFFS2。 block:块设备驱动程序I/O调度。 include:与系统相关的头文件放在include/linux下。 init:内核初始化代码。 kernel:内核最核心部分,和平台相关的一部分放在arch/*/kernel mm:内存管理代码,和平台相关的一部分放在arch/*/mm scripts:用于配置内核的脚本文件。 usr:实现了用于打包和压缩的cpio等。分析Linux源代码很有必要浏览源代码的工具:SourceInsight为什么用汇编语言编写内核代码内核底层代码直接和硬件打交道,需要一些专用指令提高调用效率缩小代码空间两种形式:.S文件;嵌入到C语言中Linux内核的显著特性GCC特性链表的重要性:内核链表为双向链表,在include/linux/list.h文件中有定义Makefile在Linux内核中增加源代码需要完成以下3项工作将编写的源代码拷入Linux内核源代码的相应目录在目录的Kconfig文件中增加关于新源代码对应项目的配置选项在目录的Makefile文件中增加对新源代码的编译条目Makefile定义Linux内核的编译规则,make工具可以实现自动编译和增量编译,但必须告诉make源程序之间的依赖关系,描述这种关系的就是Makefile文件Linux内核及编程Makefile决定编译哪些文件顶层Makefile决定内核根目录下哪些子目录将被编进内核(采用递归的方式)。arch/$(ARCH)/Makefile决定arch/$(ARCH)目录下哪些文件、哪些目录将被编进内核。各级子目录下的Makefile决定所在目录下哪些文件将被编进内核,哪些文件将被编成模块(即驱动程序),进入哪些子目录继续调用它们的Makefile。Linux内核及编程Makefile怎样连接这些文件,它们的顺序如何?arch/arm/Makefile:顶层Makefile:Linux内核及编程Makefile顶层Makefile按照一定的顺序组织文件,根据连接脚本arc/$(ARCH)/kernel/vmlinux.lds生成内核映象文件vmlinux。obj–y用来定义哪些文件被编进(built-in)内核。obj-m用来定义哪些文件被编译成可加载模块(Loadablemodule)。lib-y用来定义哪些文件被编成库文件。obj-y、obj-m还可以用来指定要进入的下一层子目录。Linux内核及编程Makefile目标定义定义哪些内容作为模块编译,哪些要编译并连接进内核。更常见的做法:根据.config文件中的CONFIG变量来决定文件编译方式,如:obj-y+=foo.c:表示要由foo.c或者foo.s文件编译得到foo.o并连接进内核。obj-$(CONFIG_ISDN)+=isdn.oobj-$(CONFIG_ISDN_PPP_BSDCOMP)+=isdn_bsdc.oLinux内核及编程Kconfig一个文本形式的文件,其中主要作用是在内核配置时候,作为配置选项,是各种配置界面的源文件。内核的配置工具读取各个Kconfig文件,生成配置界面供开发人员配置内核,最后生成配置文件.config。内核的配置界面以树状的菜单形式组织,主菜单下有若干个子菜单,子菜单下又有子菜单或配置选项。每个子菜单或选项可以有依赖关系,这些依赖关系用来确定它们是否显示。只有被依赖项的父项已经被选中,子项才会显示。内核源码每个子目录中,都有一个Makefile文件和Kconfig文件。Linux内核及编程Kconfigconfig条目config条目用来配置一个选项,它用于生成一个变量,这个变量会连同它的值一起被写入配置文件.config中。config出现的三种配置结果:config关键字,表示一个配置选项的开始。CONFIG_LEDS_S3C24XX=y#对应的文件被编进内核CONFIG_LEDS_S3C24XX=m#对应的文件被编成模块#CONFIG_LEDS_S3C24XX#对应的文件没有被使用Kconfig、MakeFile、.config三者之间的联系我们在内核源码下面执行make命令,实际上是根据

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论