摘要: 有些模块在加载的时候可能需要根据不同的参数来产生不同的功能。这些参数的值可以直接由insmod或者modprobe命令在加载的时候指定。当然,你的代码在使用模块参数前,必须定义这些参数,并让这些参数可用。一个使用了模块参数的设备驱动模块源码如下,这个代码是在原来最基础的hello world的基础上修改的: 1 #include <linux/init.h> 2 #include <linux/module.h> 3 MODULE_LICENSE("Dual BSD/GPL"); 4 static char *whom = "world&q 阅读全文
posted @ 2011-07-28 21:07 自由泳的青蛙 阅读(285) 评论(0) 推荐(0) 编辑
摘要: 上一篇主要介绍了一个最最简单的设备启动模块Hello world的编译,并将其加载到内核的一些步骤。现在对hello world的代码做一个详细的解析,并提出几个编写设备驱动程序代码时要注意的问题。 如上一篇文章所看到的源码一样,设备驱动的初始化函数一般定义如下:1 static int __init initialization_function(void)2 {3 /* Initialization code here */4 }5 module_init(initialization_function); 每一个设备驱动的初始化函数都应该像上面那样子定义。首先,这个初始化函数应该定义为静 阅读全文
posted @ 2011-07-28 14:16 自由泳的青蛙 阅读(375) 评论(0) 推荐(0) 编辑
摘要: 上一篇主要是介绍了设备驱动的定义,作用,以及编写设备驱动的原则等等,总之都是一些文字叙述。现在终于要开始和代码打交道了,很是激动啊。以下开始编写一个最最简单的设备驱动模块,经典的helloworld。下面所叙述的步骤都经过我的亲身体验。首先,自然是需要一个linux的源码包了,可以去http://www.kernel.org/下载,注意选择源码包的版本。我使用的是2.6.39.3。最好把源码包放到用户主目录下去操作。关于编译源码需要的工具,环境什么的,这里就不赘述了,有很多资料可以参考。在源码的drivers/char目录下建立一个文件夹examples,这个目录用于存放我们的设备驱动模块的源 阅读全文
posted @ 2011-07-27 19:23 自由泳的青蛙 阅读(659) 评论(0) 推荐(2) 编辑
摘要: 以Linux为首的免费操作系统的诸多优点之一是它们的内部是开放可见的。操作系统曾今是一个黑暗且神秘的境界,它的代码只有少数程序员知晓,然而现在,它已经能够被任何具备必要技能(当然是指计算机知识)的人来检查,理解,甚至是修改。Linux让操作系统更加的民主化。Linux依然是一个巨大而且复杂的代码机构,然而,想成为内核hacker的人需要一个入口点,这个入口点能够帮助他们进入代码的内部而不被代码的复杂性压倒。通常情况下,设备驱动就是这个入口点。 设备驱动在Linux内核里扮演者一个特殊的角色。他们是特殊的“黑箱子“,使一个特定的硬件响应一个定义良好的内部编程接口;它们完全隐藏了设备工作的细节。. 阅读全文
posted @ 2011-07-25 19:54 自由泳的青蛙 阅读(447) 评论(0) 推荐(0) 编辑
摘要: 最近又开始学习android了。在当当网买了一本书《Android应用开发揭秘》,这本书的内容很丰富,讲的很详细,尤其适合我这样的初学者。刚刚看到第二部分第五章,在做到一个实例的时候,发下代码居然有看不懂的地方,就仔细研究了一下。上网找了一些资料,终于是把问题弄清楚了,分享一下。首先下载这本书附带的源码压缩包,这个例子为Examples_05_10。既然是实现水波效果,就不得不用到水波算法了。关于水波算法,我是看了这里才晓得的,他这上面讲的很清楚。感谢作者的分享。在工程代码中找到GameView.java文件。在Android中,每一个图像像素通过一个4字节整数来展现:最高位字节用作alpha 阅读全文
posted @ 2011-05-18 20:36 自由泳的青蛙 阅读(1862) 评论(5) 推荐(3) 编辑