2012-10-12 16 views
8

Tworzę bardzo prosty moduł hello world jądra i robię szalone zachowanie. To działało, dopóki nie zaktualizowałem jądra do wersji 3.3.8, a teraz ... Cóż, to wywołuje funkcję init przy wyjściu i exit po inicjalizacji. Zrobiłem pewien, że moi nazwy są poprawne wyjścieFunkcje modułu Init i Exit modułu jądra są wywoływane w niewłaściwej kolejności.

// Needed for module definitions 
#include <linux/module.h> 
// Needed for initilization modules 
#include <linux/init.h> 

// Must declare some license 
MODULE_LICENSE("Dual BSD/GPL"); 

// Function to be called on insmod 
// Returns 0 on success 
static int __init mymod_init(void) 
{ 
     // Prints kernel alert. Check /var/log/syslog 
     printk(KERN_ALERT "Module was loaded, this is the printk."); 

     return 0; 
} 

// Function to be called on rmmod 
static void __exit mymod_exit(void) 
{ 
     // Prints kernel alert. Check /var/log/syslog 
     printk(KERN_ALERT "Module was unloaded, this is the printk"); 
} 

// Register these functions 
module_init(mymod_init); 
module_exit(mymod_exit); 

Próbka:

root @ cop4610: /home/cop4610/Downloads/linux-3.3.8/mymodule# insmod mymodule.ko korzeń @ cop4610: /home/cop4610/Downloads/linux-3.3.8/mymodule# ogon/var/log/syslog 12 października 10:08:20 cop4610 jądro: [633.567832] Moduł został wyładowany, jest to wydruk

Poniżej znajduje się wideo z tego happ ening live: http://www.youtube.com/watch?v=8aJNSpCd7as&feature=youtu.be

+0

dokonały odbudować dla modułu po aktualizacji? –

+0

Przeprojektowałem go od zera od czasu aktualizacji jądra;) – Ben

+0

to makro __init i __exit teraz opcjonalne? –

Odpowiedz

13

Potrzebował nowej linii !!!!!! Arrggg !!!

printk(KERN_ALERT "Module was unloaded, this is the printk\n"); 

i

printk(KERN_ALERT "Module was loaded, this is the printk\n"); 

Wydaje się, że tak naprawdę nie robią ich w porządku, po prostu wydawało się, ponieważ pierwsza nie pokazywał aż druga została wydana jako bufor nie został spłukany.

+1

Dzięki za udostępnienie rozwiązania. Miałem ten sam problem i byłem zakłopotany. Ma to sens teraz po zobaczeniu twojej odpowiedzi. – russoue

+0

Dziękujemy za udostępnienie rozwiązania. – Midhun

1

To mój podstawowy przykład:

#include <linux/module.h> 
#include <linux/kernel.h> 

#define MODULE_NAME "hello_md" 

MODULE_LICENSE("GPL"); 
MODULE_AUTHOR("B3h3m0th"); 
MODULE_DESCRIPTION("Basic LKM; hello world module"); 
MODULE_VERSION("0.0"); 

static int __init insert_mod(void) 
{ 
    printk(KERN_ALERT "[%s] Init: \"Hello World\"\n", MODULE_NAME); 
    return 0; 
} 


static void __exit remove_mod(void) 
{ 
    printk(KERN_ALERT "[%s] Exit\n", MODULE_NAME); 
} 

module_init(insert_mod); 
module_exit(remove_mod); 

Moje podstawowe Makefile:

obj-m += basic_module.o 

KERNELVERSION = $(shell uname -r) 

all: 
    $(MAKE) -C /lib/modules/$(KERNELVERSION)/build M=$(PWD) modules 
clean: 
    $(MAKE) -C /lib/modules/$(KERNELVERSION)/build M=$(PWD) clean 
Powiązane problemy