helloworld驱动加强版

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 hellop
goodbye world

结束语:

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

 

 

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值