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

下载本文档

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

文档简介

1、Android底层开发驱动李伟民weiminlics What is Driver?驱动程序的魅力硬件不能使用?电姿| 70%没安裝駆动PC和手机要使用外部硬件设备,均需要安裝对应的驱动程 序驱动程序扮演一个沟通的角色,负责把硬件的功能告诉操作糸统,并且将糸统的指令传达给硬件,让他开始工作。What is Driver?Windows 驱动购买的硬件附带有驱动 Windows系统自带有大量的驱动从Internet下我驱动手机驱动手机一般不能和电脑直接连接,必须用手机旨带的屣盘驱 动一下O本质上是安裝一个续取手机内存信息的程序。开源还是不开源?Android是基于Linux的,Linux是完全开

2、源的,Android也号称开源。But! 2010年2月,Linux的维护者却将Android代码从 Linux Kernel代码库中刪除。原因:Android修收了 Kernel,但不提供修改的细节。 Android不真正开源!从为什么选择Java谈为什么不开源驱动程序Java的好处只要编写一次程序,在多个硬件平台上运行为什么驱动不开源?Linux Kernel的版权是GPL,驱动也需公开源代码。这是硬 件厂商不太愿意接受的。Google玩了小心机:把驱动程序移 到userspace中,让其在 Linux Kernel之上运行。然后在Kernel上开一个小门,让本 来不能直接控制到硬件的us

3、erspace程序也可以碰得到。从为什么选择Java谈为什么不开源驱动程序带来的问题 Kernel (GPLJ和Android (ASLJ采用不同的许可证。在 ASL中,用户可以随意使用源代码而不必开源。因此建立在Android之上的硬件驱动和应用程序都可以保持 封闭。影响有利于推/Android,并且可以吸引灵多的厂商和软件开发 商的加入。同肘也宣布枚弃了构建一个真正开源的手机系统的机会。ANDROID RUNTIMEAndroid 框架APPLICATIONSHomeDialerSMSfMMSIMBtwserCameraAhmCakulicorConnettV»k« D

4、ialEmailCalendarMedia Phytr Phto AlbumCkKk”Af>尸ligation FrameworkActiwliy ManagerWMw Muw|«rCfvwnc ProvideSystemNMHkRs ManagerPackage ManagerTckpAwfiy ManatResource ManagerLticxdon Manager IBjBRIES2皿遵临豳 * SSL Hardware Abstraction Layer飞npW*為严尹 'Bluetooth 亠 講 " SWLinux Kernel仙阳driverC

5、arrin DriverBlueceth DriverShared Mcnw DriverBin4w (C) DrMrUSBCMvcrKeypad DriverWA DriverAudk> DrtvenPower Mmwwv»wAndroid层次分析 內核层:Linux的一个麦种避开了与硬件直接打交道基于Linux的的驱动开发可扩畏性很强硬件抽象层:内核之上的“小门” User space C/C+ library layer Defines the interface that Android requires hardware "drivers" to

6、implement Separates the Android platform logic from the hardware in terface本质上希望通过定义硬件“驱动”的借口来进一步降低 Android与硬件的耦合度Android层次分析糸统运行库层:糸统正常运行的基础库c库层,卖际上很多都是成熟的开源项目 Android是如何有机地与这些库建立联系应用程序桓架层:与APP开发人员关糸最近 Java库,为上层应用程序提供了 API接口囊括了不少糸统级服务进程的卖现应用程序层Android软件开发分为:糸统移植与应用程序开发不仅要了解如何使用API接D去完成一个功能,还要尽可能了解这

7、些接口及其下的底层才匡架是如何卖现的Linux架构Android 与 LinuxLinux简介向企业核心应用迈进主导移动平台新技术为Linux加速:虚拟化,云计算,大数据Android和Linux的关糸 Android是继承于Linux的Android和Linux内核的区别:Android在底层Linux上加了 一 层Dalvik, Android的APP运行在Dalvik上 f.dexj和Android密切相关的Linux内核知识安全用户权限和文件目录权限内存管理确定是否有足够的内存来处理数据从可用的内存中获取一部分内存向可用内存池中区回部分内存,以使其可以由程序的其他 部分或者其紅程序使用

8、进程管理几个命令:ps、pstree、top、kill、nice谏备驱动、网络套接字分析Linux源代码很有必要三个前提:熟练使用Linux操作糸统拿握操作糸统理论基础拿握C语言基础源代码目录结构分析arch:和硬件体系结构相关的代码,每种平台占一个相应目录。 drivers:设备驱动程序,每个不同驱动占用一个子目录。fs:支持的各种文件系统,如EXT. FAT. NTFS. JFFS2. block:块设备驱动程序1/O调度。include:与系统相关的头文件放在include/linux下。init:内核初始化代码。kernel:内核最核心部分,和平台相关的一部分放在arch/*/kern

9、el mm:内存管理代码,和平台相关的一部分放在arch/*/mm scripts:用于配置内核的脚本文件。usr:实现了用于打包和压缩的cpio等。分析Linux源代码很有必要浏览源代码的工具Sourcel nsight为什么用汇编语言编写内核代码内核底层代码直接和硬件打交道,需要一些专用指令提高调用效率缩小代码空间两种形式:S文件;炭入到C语言中Linux内核的显著特性 GCC特性链蔻的重要性:内核链表为双向链表,在include/linux/list.h 文件中有定义Makefile4.Linux内核中增加源代码需要完成以下3项工作将编写的源代码拷入Linux内核源代码的相应目录在目录的

10、Kconfig丈件中增加关于新源代码对应项目的 需/妥4 齐名称顶层 Makefile*-1.configsarch/$(ARCH)/MakefileScripts/Makefile.*3它是所有Mak淞文件的核心,从总体上控制訥铀编译、连刪 配苴文件,在配i内核时生成.所有Makefile文件(包師层目录| 及各级子目录)瞬根駅哋来蚯使用哪些文刖:对应体系結构时Ivlakefile,它用采决定哪些体系結构相关的文件参 与内铀生成,并提上蹩歷生成持定格删内核映热 Mak血共用的通用规趾抑本等,各级子目录下曲Makefik,它们相对简单,被上一层Makefile调用 来编译当前目录下馭能Kbui

11、lt IVIakefilesMakefile决定偏诈邓些文件顶层Makefile决定内核根目录下智些子目录将彼编进内核(采 用递.归的方式)。arch/$(ARCH)/Makefile 决定arch/$(ARCH)目录下明卩些丈件、 哪些目录将彼编进内核。各级子哥录下的Makefile决定所在目录下智些丈件将彼编进 内核,哪些丈件将彼编成模块(即驱动程序),进入哪些子目 录继续调用它们的Makefile。怠样连接这些丈件,它们的顺序如何?arch/arm/Makefile:head"y1:= arch/arm/kernel/head 0 axch/axm/kexne 1/iniask

12、. 02*corey+= arch/arm./kernel/ arch/arn/nun/ arch/arm/cojTunon/-'corey仪+= $ (MACHINE) 4*libsy:=arch/arin/l ib/$ (Libs"y)顶层 Makefilexnx±y* dT-iven-sy nc tyLxbs?y=L11L±/<J= drivers/ sound/-*-'=nc t/*-1=Lib/corns3r=lasr/*-1coreykernel/ iron/ £3/ ipc/ sccuxity*/ cirypto/*-

13、1 顶层Makefile按照一定的顺序组织丈件,根据连接 脚本 arc/$(ARCH)/ kernel/ vmlinux.lds 生成内核映象丈 件 vmlinuxo obj-y用来走义哪些丈件菠编进(built-in)内核。obj-m用来定义哪些丈件被编诽成可加戟模块(Loadable module )lib-y用来定义哪些丈件菠编成库丈件。ob卜y、objm还可以用来指定要进入的下一层子目录。目标走艾定义智些内家作为模块编译,哪些要编译并连接进内核。obj-y +二foo.c:表示要由foo.c或者foo.sX件编译得到foo.o并 连接进内核。更常见的做法:根据.configx件中的CO

14、NFIG变量来决定丈 件编译方式,如:obj-$ (CONFIGJSDN) += isdn.o obj-$(CONFIG_ISDN_PPP_BSDCOMP)+二 isdn_bsdc。Linux内核及编程Kconfig一个丈本形式的丈件,其中主要作用是亦内核配置肘候,作为 配置选项,是各种配置界面的源丈件。内核的配置工具读取各 个Kconfig丈件,生成配置界面供开发人 员配置内核,最后生成配置丈件.configo内核的配置界面以树状的菜单形式组织,主菜单下有若干个子 菜单,子菜单下又有子菜单或配置选项。毎个子菜单或选项可 以有依赖关糸,这些依赖关糸用来确定它们是否显示。只有彼 依赖项的父项已经彼选中,子项才会显示。内核源码毎个子目录中,都有一个Makefile丈件和Kconfig丈件。Kconfigconfig条目config条目用来配置一个选项,它用于生成一个变量,这个变量会连同它的 值一起菠写入配置文件.config中。config出现的三种配置结杲:CONFIG_LEDS_S3C24XX二y #对应的丈件彼编进内核CONFIG_LEDS_S3C24XX二m #对应的文件彼编成模块 #CONFIG_LE6s_S3C24XX #对应的丈件没有彼使用config关键字,表示一个配置选项的开始。Linux内核及编程Kconfig> MakeFile> .

温馨提示

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

评论

0/150

提交评论