摘要: 在数字科技日新月异的今天,软件和硬件的完美结合,造就了智能移动设备的流行。今天大家对iOS 和Android 系统的趋之若鹜,一定程度上是由于这两个系统上有着丰富多彩的各种应用软件。因此,软件和硬件的关系,在一定程度上可以说,硬件是为软件服务的。硬件工程师研发出一款硬件设备,自然少了软件工程师为其编写驱动程序;而驱动程序的最终目的,是为了使得最上层的应用程序能够使用这些硬件提供的服务来为用户提供软件功能。对Android 系统上的应用软件来说,就是要在系统的Application Frameworks 层为其提供硬件服务。在前面的几篇文章中,我们着重介绍了Linux 内核层、硬件抽象层和运行时 阅读全文
posted @ 2013-05-23 20:57 老z的博客 阅读(1485) 评论(0) 推荐(1) 编辑
摘要: 我们介绍了如何为Android 系统的硬件编写驱动程序,包括如何在Linux 内核空间实现内核驱动程序和在用户空间实现硬件抽象层接口。实现这两者的目的是为了向更上一层提供硬件访问接口,即为Android 的Application Frameworks 层提供硬件服务。我们知道,Android 系统的应用程序是用Java 语言编写的,而硬件驱动程序是用C 语言来实现的,那么,Java 接口如何去访问C 接口呢?众所周知,Java 提供了JNI 方法调用,同样,在Android 系统中,Java 应用程序通过JNI 来调用硬件抽象层接口。在这一篇文章中,我们将介绍如何为Android 硬件抽象层接 阅读全文
posted @ 2013-05-23 15:15 老z的博客 阅读(3207) 评论(0) 推荐(0) 编辑
摘要: 简单来说,硬件驱动程序一方面分布在Linux 内核中,另一方面分布在用户空间的硬件抽象层中。接着,在Ubuntu 上为Android系统编写Linux 内核驱动程序一文中举例子说明了如何在Linux 内核编写驱动程序。在这一篇文章中,我们将继续介绍Android 系统硬件驱动程序的另一方面实现,即如何在硬件抽象层中增加硬件模块来和内核驱动程序交互。在这篇文章中,我们还将学习到如何在Android 系统创建设备文件时用类似Linux 的udev 规则修改设备文件模式的方法。step1: 进入到在hardware/libhardware/include/hardware 目录,新建hello.h 阅读全文
posted @ 2013-05-23 11:52 老z的博客 阅读(2839) 评论(0) 推荐(0) 编辑
摘要: 在第一篇文章中,我们介绍了如何在Ubuntu 上为Android 系统编写Linux内核驱动程序。在这个名为hello 的Linux 内核驱动程序中,创建三个不同的文件节点来供用户空间访问,分别是传统的设备文件/dev/hello、proc 系统文件/proc/hello 和devfs 系统属性文件/sys/class/hello/hello/val。进一步,还通过cat 命令来直接访问/proc/hello 和/sys/class/hello/hello/val 文件来,以验证驱动程序的正确性。在这一篇文章里,我们将通过自己编写的C 可执行程序来访问设备文件/dev/hello。可能读者会觉 阅读全文
posted @ 2013-05-22 15:28 老z的博客 阅读(2788) 评论(0) 推荐(0) 编辑
摘要: 在Ubuntu 上为Android 系统编写Linux 内核驱动程序这里,我们不会为真实的硬件设备编写内核驱动程序。为了方便描述为Android 系统编写内核驱动程序的过程,我们使用一个虚拟的硬件设备,这个设备只有一个4 字节的寄存器,它可读可写。想起我们第一次学习程序语言时,都喜欢用“Hello, World”作为例子,这里,我们就把这个虚拟的设备命名为“hello”,而这个内核驱动程序也命名为hello 驱动程序。其实,Android 内核驱动程序和一般Linux 内核驱动程序的编写方法是一样的,都是以Linux 模块的形式实现的,具体可参考前面Android 学习启动篇一文中提到的Lin 阅读全文
posted @ 2013-05-22 14:49 老z的博客 阅读(5526) 评论(0) 推荐(0) 编辑
摘要: 这几天看到了一篇“Android驱动开发”的文章,觉得不错,但这篇文章稍微有点老,里面的程序有部分是不能编译的,因此想到了重新整理下,文章的结构和原文差不多。我的实际开发验证环境为Ubuntu+Galaxy Nexus+CM。 目录一. 在Android 内核源代码工程中编写硬件驱动程序二. 在Android 系统中增加C 可执行程序来访问硬件驱动程序三. 在Android 硬件抽象层增加接口模块访问硬件驱动程序四. 在Android 系统中编写JNI 方法在应用程序框架层提供Java 接口访问硬件五. 在Android 系统的应用程序框架层增加硬件服务接口六. ... 阅读全文
posted @ 2013-05-22 14:33 老z的博客 阅读(616) 评论(0) 推荐(0) 编辑
摘要: 1 两者最大的相同便是:都是从 C 演化而来的面向对象语言, 两者都兼容标准 C 语言.2 两者最大的不同便是:Objective C 是完全动态的,而 C++是部分动态的。Objective C 支持在运行时动态类型决议(dynamic typing),动态绑定(dynamic binding)以及动态装载(dynamic loading);C++ 是编译时静态绑定,通过嵌入类(多重继承)和虚函数(虚表)来模拟实现。Objective C 在语言层次上支持动态消息转发,其消息发送语法为 [object function]; 而且C++ 为 object->function()。 两者的 阅读全文
posted @ 2012-07-26 12:21 老z的博客 阅读(3028) 评论(0) 推荐(0) 编辑
摘要: 看完此图,对UI***的类的关系,了然于心,毫无压力。 UIKit class hierarchy 阅读全文
posted @ 2012-07-25 14:34 老z的博客 阅读(333) 评论(0) 推荐(0) 编辑
摘要: Category的主要知识点1. 扩展类的功能Category提供了一种比继承(inheritance)更为简洁的方法来对class进行扩展,我们可以为任何已经存在的class添加方法(不包括数据成员)却不需要访问该class的实现文件。新添加的方法和原有的方法具有同等的地位,可以访问class的数据成员,并且完全植入到class的继承体系之中,子类同样会继承新添加的方法。 利用category对类进行扩展可以避免使类的继承体系过于臃肿,复杂,降低了维护成本。另外,新添加的方法如果和已经存在的方法具有相同的 prototype,那么新添加的方法将会覆盖已经存在的方法,也就是category使得 阅读全文
posted @ 2012-07-13 13:51 老z的博客 阅读(6418) 评论(0) 推荐(1) 编辑
摘要: UIKit中包含了UIGestureRecognizer类,用于检测发生在设备中的手势。UIGestureRecognizer是一个抽象类,定义了所有手势的基本行为,它有下面一些子类用于处理具体的手势: 1、拍击UITapGestureRecognizer (任意次数的拍击) 2、向里或向外捏UIPinchGestureRecognizer (用于缩放) 3、摇动或者拖拽UIPanGestureRecognizer 4、滑动UISwipeGestureRecognizer (以任意方向) 5、旋转UIRotationGestureRecognizer (手指朝相反方向移动) 6... 阅读全文
posted @ 2012-07-11 17:09 老z的博客 阅读(19093) 评论(1) 推荐(0) 编辑