2010-08-22 23:00:25

by runcoderen

[permalink] [raw]
Subject: ldd module param practice

hi all:

#include <linux/init.h>
#include <linux/module.h>
#include <linux/moduleparam.h>

MODULE_LICENSE("Dual BSD/GPL");

static char *whom = "world";
static char howmany = 1;

module_param(howmany, int, S_IRUGO);
module_param(whom, charp, S_IRUGO);

static int hello_init(void)
{
printk(KERN_ALERT "Hello, world\n");
return 0;
}

static void hello_exit(void)
{
printk(KERN_ALERT "Goodbye, cruel world\n");
}

module_init(hello_init);
module_exit(hello_exit);

insmod hellop.ko howmany=10 whom="Mom"

this code I want to printk "hello Mom" 10 times.

but it doesn't work. so I modified static int howmany = 10, it doesn't
work either.
I don't know whether it's my wronging use?

--

/****************************************
http://runcoderen.wordpress.com/
****************************************/


2010-08-23 02:12:18

by Randy Dunlap

[permalink] [raw]
Subject: Re: ldd module param practice

On Sun, August 22, 2010 4:00 pm, runcoderen wrote:
> hi all:
>
> #include <linux/init.h>
> #include <linux/module.h>
> #include <linux/moduleparam.h>
>
>
> MODULE_LICENSE("Dual BSD/GPL");
>
>
> static char *whom = "world"; static char howmany = 1;


What happens if you make 'howmany' an int instead of
a char?


> module_param(howmany, int, S_IRUGO); module_param(whom, charp, S_IRUGO);
>
> static int hello_init(void) {
> printk(KERN_ALERT "Hello, world\n"); return 0; }
>
>
> static void hello_exit(void) {
> printk(KERN_ALERT "Goodbye, cruel world\n"); }
>
>
> module_init(hello_init); module_exit(hello_exit);
>
> insmod hellop.ko howmany=10 whom="Mom"
>
> this code I want to printk "hello Mom" 10 times.
>
> but it doesn't work. so I modified static int howmany = 10, it doesn't
> work either. I don't know whether it's my wronging use?

2010-08-23 02:17:16

by Cong Wang

[permalink] [raw]
Subject: Re: ldd module param practice

On Mon, Aug 23, 2010 at 07:00:18AM +0800, runcoderen wrote:
>hi all:
>
>#include <linux/init.h>
>#include <linux/module.h>
>#include <linux/moduleparam.h>
>
>MODULE_LICENSE("Dual BSD/GPL");
>
>static char *whom = "world";
>static char howmany = 1;
>
>module_param(howmany, int, S_IRUGO);
>module_param(whom, charp, S_IRUGO);
>
>static int hello_init(void)
>{
>printk(KERN_ALERT "Hello, world\n");
>return 0;
>}
>
>static void hello_exit(void)
>{
>printk(KERN_ALERT "Goodbye, cruel world\n");
>}
>
>module_init(hello_init);
>module_exit(hello_exit);
>
>insmod hellop.ko howmany=10 whom="Mom"
>
>this code I want to printk "hello Mom" 10 times.


How can it work? You neither have a loop nor use 'whom'
in your hello_init()...

You need:

statick int hello_init(void)
{
int i;
for (i=0; i<howmany; i++)
printk(KERN_WARNING "Hello, %s\n", whom);
return 0;
}