helloworld驱动加强版

来源:互联网 发布:声卡变音软件 编辑:程序博客网 时间:2024/05/01 15:00


helloworld——加强版

这篇文章相比上一篇文章主要是增加了一个模块参数

运行环境:TQ2440开发板,内核版本2.6.30.4

开发环境:Window下的Source Insight以及PC机上的红帽企版5虚拟机

实验环境前提条件:拥有一个制作好的NFS文件系统

 

/**********************************hellop.c*************************************/#include<linux/init.h>#include<linux/module.h>#include<linux/moduleparam.h>static char *who="world";static int howmany=1;module_param(who, charp, S_IRUGO);module_param(howmany,int,S_IRUGO);static int __init hello_init(void){     int i;     for(i=0;i<howmany;i++)     {           printk(KERN_WARNING "(%d) hello,%s\n",i,who);     }     return 0;}static void __exit hello_exit(void){          printk(KERN_WARNING "goodbye world\n");}module_init(hello_init);module_exit(hello_exit);MODULE_LICENSE("GPL");MODULE_AUTHOR("lwj");MODULE_DESCRIPTION("Just a simple module for hello world"); 


正如你所见,相比上一篇文章仅多了红色部分。模块参数拥有非常大的价值,日后你将会发现的啦,这里简单介绍一下怎么使用模块参数。

1、我们可以使用下面的命令来装载该模块

insmod hellop howmany=10 who="lwj"


2、在insmod改变模块参数之前,模块必须让这些参数对insmod命令可见,所以我们使用了module_param宏来声明,这个宏在moduleparam.h中定义,module_param需要三个参数,如:module_param(who, charp, S_IRUGO);

第一参数是变量的名称、第二个参数是变量的类型、第三个是访问权限,S_IRUGO是任何人均可读,但不能修改。

3、内核支持的模块参数类型有bool、invbool、charp(字符指针)、int、long、short、uint、ulong、ushort

4、模块装载器还支持数组参数,但是比较特殊,需要用下面这个宏来声明

module_param_array(name,type,num,perm);

其中,name是数组的名称,type是数组元素的类型,num是一个整数变量,而perm是常见的访问权限

 

Makefile编写与上一篇文章基本相同,只需修改obj-m :=hello.o改为obj-m :=hellop.o即可。

 

实验操作步骤:

一、虚拟机上的操作

1、建立一个单独的文件夹用于存放hellop模块以及Makefile(方便开发)

2、编译模块,拷贝模块到制作好的NFS文件系统。

二、开发板上的操作

[\u@\h \W]# insmod hellop.ko howmany=10 who="lwj"(0) hello,lwj(1) hello,lwj(2) hello,lwj(3) hello,lwj(4) hello,lwj(5) hello,lwj(6) hello,lwj(7) hello,lwj(8) hello,lwj(9) hello,lwj[\u@\h \W]# rmmod hellopgoodbye world


结束语:

               在这里先给大家说明点,这二节都比较简单,陆续的文章将会呈现难度逐渐增加的驱动分析。只要大家坚持下来,一定能学会驱动,最后,祝大家学习愉快。

0 0