View Single Post
Old 07-01-2005, 10:42   #6
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Cittā: Roma
Messaggi: 15625
Passare parametri a un driver

Piccola variazione sull'esempio precedente: rendiamo configurabili il messaggio stampato e il delay:

Codice:
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/kthread.h>
#include <linux/delay.h>

static struct task_struct *ktask;

static char *kmsg = "tick";
static ushort kdelay = 1000;
 
static int kparm_thread(void *arg)
{
	while (!kthread_should_stop()) {
		printk(KERN_INFO "%s\n", kmsg);
		msleep(kdelay);
	}
	return 0;
}

static int __init kparm_init(void)
{
	ktask = kthread_create(kparm_thread, NULL, "kthread");
	if (IS_ERR(ktask))
		return PTR_ERR(ktask);
	else {
		wake_up_process(ktask);
		printk(KERN_INFO "msg=%s delay=%d ms\n", kmsg, kdelay);
	}
	return 0;
}

static void __exit kparm_exit(void)
{
	kthread_stop(ktask);
}

module_param(kmsg, charp, 0444);
MODULE_PARM_DESC(kmsg, "Message to print");
module_param(kdelay, ushort, 0644);
MODULE_PARM_DESC(kdelay, "Printing delay (ms)");

module_init(kparm_init);
module_exit(kparm_exit);

MODULE_LICENSE("GPL");
MODULE_AUTHOR("ilsensine");
MODULE_DESCRIPTION("modparm test module");
L'utilizzo di module_param e MODULE_PARM_DESC č abbastanza intuitivo. I parametri del vostro driver compariranno magicamente in /sys/module/<nome del vostro modulo>/. Quelli che risultano scrivibili (kdelay nell'esempio precedente, per il quale ho impostato i permission bits a 0644), possono essere modificabili runtime con un semplice echo (quindi nell'esempio possiamo modificare runtime il tempo di delay). Nota: non rendete una stringa scrivibile. Siete stati avvertiti
I parametri disponibili saranno visualizzati eseguendo modinfo sul modulo. Possono essere impostati in fase di insmod; ad es:
insmod <modulo.ko> kdelay=500 kmsg="Ciao"
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12

Ultima modifica di ilsensine : 13-12-2006 alle 09:11.
ilsensine č offline