自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(15)
  • 收藏
  • 关注

转载 ios,设备标签与设备型号的对应关系

struct utsname systemInfo; uname(&systemInfo); NSString *deviceString = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];   通过,如上方式即可获取到设备的型号...

2013-02-05 15:26:00 201

转载 Eclipse+CDT+GDB调试android NDK程序

Eclipse+CDT+gdb调试android ndk程序 先介绍一下开发环境,在这个环境下,up主保证是没有问题的。 ubuntu 11.10 eclipse 3.7(indego) for java jdk 6 android sdk 2.2 andrid ndk r7 当然,在windows环境下通过cygwin等工具也是可以实现gdb调试的,我也确实...

2011-12-02 18:43:00 259

转载 第六章 休眠

在第五章并发与竞态中,介绍了一个当进程需要的资源被其他进程占用,而不得不等待该资源的情形。这里,要说的则是即便进程得到资源之后,由于资源本身的一些问题而不能预期的完成功能,必须休眠一段时间,直到它的要求得到满足。两种情形的区别是显而易见的,不过在使用上,实在是有点相似。其实最近学的一些东西都是这样,信号量,自旋锁....不管他们的内在区别的话,使用时无外乎就是初始化,然后在一个地方申请,...

2011-08-15 19:43:00 135

转载 第六章 iotcl

第三章介绍了一个简单的字符设备驱动程序,它是一块内存当做设备的。当时的scull还很简单(只是介绍了openreleasereadwrite四个函数),这一章将进入讲述字符设备驱动程序的一些高级操作。 ioctl函数,从函数名来看的话,iocontrol,看上去是用来操作IO的。更通俗的讲,对于硬件控制的代码应该置于此处。对于当前的scull来说,最常用的对...

2011-08-12 14:38:00 173

转载 第五章 completion 和锁

上一回主要介绍了使用信号量好处理竞态问题。有时候,驱动会碰见这种问题,就是一个线程在运行时,需要等待另外一个线程完成某个动作才能继续。这种情况跟竞态还是有点区别的,说不太清楚。当然这种情形可以用信号量来达到效果,但是这种方法有很多的缺点(对于这种特殊的情况来说)。于是内核就提供了一个全新的接口来专门处理这种情况。 Completion(定义在<linux/com...

2011-08-08 20:49:00 111

转载 第五章 信号量和互斥体

第三章介绍了一个以内存为设备的字符设备驱动。需要注意的是,第三章介绍的只是这个驱动的最基本的四个函数,open release read和write 有了这四个函数,这个驱动也就可以使用了。不过,从书本附带的源码中得到的scull工程的代码可远远不止这四个函数,它的很多代码时为了后面章节的扩展。同时,由于内核版本跟作者所使用的内核版本不一致,在编译这个scull的时候会...

2011-08-06 17:07:00 105

转载 第三章 scull的内存使用 read write函数

在设备驱动简介时,就提到过要编写特定硬件的设备,首先要相当的了解这个设备。scull的设备就是一片内存,了解scull的设备就得知道scull的内存使用了。 如图所示: 事实上,可以把scull的内存直接理解为一个3维数组了(类似)。第一维的单元是Scull_device结构,Scull_device结构的代码如下: 1 struct ...

2011-08-01 22:52:00 185

转载 第三章 open and release

也许我们可以这么理解,在上一篇介绍的三个数据结构中。file和inode代表着我们要操作的目标,而file_operation提供了对目标的操作。更重要的是,file_operation中的函数都是固定的,每一个函数在什么时候被调用都是内核规定的(事件机制??)。我们要做的事情就是把我们的代码写到对应的位置就是了。这样,就要了解每一个函数的具体作用,以及它究竟在何时会被内...

2011-07-31 17:50:00 110

转载 第三章 三个数据结构以及字符设备的注册

上一篇讲到了注册设备编号,显然,注册设备编号只是编写驱动代码的第一个步骤。为了完成以后的一些步骤,先介绍三个重要的内核数据结构。 file_operation囊括了所有设备操作到设备号的链接。在linux中驱动以文件的方式存在,而file_operation则是对文件(这里是是字符设备)的所有操作的集合。由于file_operation的成员太多,而当前scu...

2011-07-30 16:25:00 81

转载 第三章 scull 设备号

进入第三章了,这一章的目标是写一个完成的字符设备驱动。书中以一个scull项目为例,开始介绍字符设备驱动。值得一提的是,scull不依赖于特定的硬件设备,其实对于scull来说,它的设施就是一片内存空间。作者让内存来充当这个驱动的硬件设备。就这一章来说,内存模拟了四个“设备”:scull0 to scull3。这四个设备是全局静态的。虽然他们是由内存组成的,我们把他们当做实际的...

2011-07-29 19:43:00 113

转载 第二章 模块参数

有些模块在加载的时候可能需要根据不同的参数来产生不同的功能。这些参数的值可以直接由insmod或者modprobe命令在加载的时候指定。当然,你的代码在使用模块参数前,必须定义这些参数,并让这些参数可用。一个使用了模块参数的设备驱动模块源码如下,这个代码是在原来最基础的hello world的基础上修改的: 1 #include <linux/ini...

2011-07-28 21:07:00 214

转载 第二章 深入理解helloworld

上一篇主要介绍了一个最最简单的设备启动模块Hello world的编译,并将其加载到内核的一些步骤。现在对hello world的代码做一个详细的解析,并提出几个编写设备驱动程序代码时要注意的问题。 如上一篇文章所看到的源码一样,设备驱动的初始化函数一般定义如下: 1 static int __init initialization_function(void)2...

2011-07-28 14:16:00 95

转载 第二章 最简单的设备驱动模块 hello world

上一篇主要是介绍了设备驱动的定义,作用,以及编写设备驱动的原则等等,总之都是一些文字叙述。现在终于要开始和代码打交道了,很是激动啊。以下开始编写一个最最简单的设备驱动模块,经典的helloworld。下面所叙述的步骤都经过我的亲身体验。 首先,自然是需要一个linux的源码包了,可以去http://www.kernel.org/下载,注意选择源码包的版本。我使用的是2.6....

2011-07-27 19:23:00 115

转载 第一章 设备驱动简介

以Linux为首的免费操作系统的诸多优点之一是它们的内部是开放可见的。操作系统曾今是一个黑暗且神秘的境界,它的代码只有少数程序员知晓,然而现在,它已经能够被任何具备必要技能(当然是指计算机知识)的人来检查,理解,甚至是修改。Linux让操作系统更加的民主化。Linux依然是一个巨大而且复杂的代码机构,然而,想成为内核hacker的人需要一个入口点,这个入口点能够帮助他们进入...

2011-07-25 19:54:00 122

转载 android 通过操作像素来实现水波效果

最近又开始学习android了。 在当当网买了一本书《Android应用开发揭秘》,这本书的内容很丰富,讲的很详细,尤其适合我这样的初学者。 刚刚看到第二部分第五章,在做到一个实例的时候,发下代码居然有看不懂的地方,就仔细研究了一下。上网找了一些资料,终于是把问题弄清楚了,分享一下。 首先下载这本书附带的源码压缩包,这个例子为Examples_05_10。既然是实现水波效果,就不得...

2011-05-18 20:36:00 123

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除