分类: LINUX
2012-01-06 14:02:28
貌似每个最基本的程序都是要输出hello world 啊,不知是谁定的。首先,模块编程的一个重要头文件就是
对于这个简单的模块编程来说,其实有好多地方都能查到,我就不多说了,我想说的重点是下面的Makefile的编写。在Linux工程程序设计中,我们几乎只能看到成堆的.c文件和成堆的.h文件,然后再加上一个Makefile文件(对于多级目录形式存放的工程,可能是每一个文件夹内有一个Makefile),而在VC中要是创建一个工程的话,会产生好多.XX文件,我们是不会看到这些文件的内容的,其实我们也没有必要去管它的内容,但是在Linux的环境下,我们想要弄一个工程出来,就要我们自己动手去写这些.XX文件,这就是Makefile文件,它就像是一个“加工厂”一样,.c和.h文件进去,生产出我们要的可执行程序,在模块编程中,我们想要得到的“产品”就是.ko文件(2.6以后的版本是.ko,之前的是.o,因为没有接触过以前的版本,就没有发言权了,所以只说.ko文件),下面看看对于这个模块程序来说,它的Makefile文件是怎样的:
对于一些Makefile的语法就不多说了,因为涉及到的内容会有很多,先说一点值得注意的,第6行的make之前是一个tab符,在Makefile文件中,在一个命令之前必须是一个tab符,否则它是不认识的。
编译这个模块程序,需要在该目录下输入 make 执行,make的工作原理就是在你输入指令以后,就在当前目录下搜索Makefile文件(而且字母“M”必须是大写的),然后通过Makefile文件中的配置和命令,来对相应的文件进行操作。所以可以说对于一个大的Linux工程来说,Makefile是它的核心,而且如果你的Makefile文件写的很好,那么你可以对于多个项目使用同一个Makefile文件,不过这样的要求就比较高了。
原理基本就是这个原理,个人感觉,其实Makefile就是一个应用型的语言,就是你需要用的时候,对照着查一下手册就行了,对于其中的语法不必深入记忆,给大家贴出一个网址,就是Makefile的手册: 。
Makefile就说到这,然后就是对它们进行编译了,就是在它们(.c文件和Makefile文件)所在的目录下,输入命令: make ,如果没有错误提示的话,就会生成一些文件,目前我们只关心hellomod.ko)这个文件,如果有的话,就正确了。然后输入: sudo insmod hellomod.ko,如果没有任何提示,说明正确,然后输入: dmesg ,查看系统日志,可以在后面几行看到一句话,内容就是Hello Kernel World,说明模块正确加载到系统中。下面就是卸载模块,输入命令: sudo rmmod hellomod ,在输入dmesg查看日志,会看到Good bye Kernel,卸载成功!其实就是先进门,然后又出门的过程。要说的一点就是,一个模块,如果已经插入到系统中,就不能再次插入了。
这只是一个简单的模块编程的例子,目的与C语言中输出hello world是一样的,就是入门,希望大家在kernel的世界里,不止是能够hello一下,里面的世界还很精彩,后面呈现。。。
文章转自CSDN:http://blog.csdn.net/wzyhb123456789/article/details/5880325
genehang2012-01-07 00:38:37
Linux设备模型之platform总线
http://linux.ctocio.com.cn/401/12174401.shtml