11

I'm making a very simple hello world kernel module and getting some crazy behavior. This worked until I upgraded to kernel 3.3.8 and now it... Well, it's calling the init function on exit, and the exit function on initialize. I've made sure my names are correct

// 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);

Sample output:

root@cop4610:/home/cop4610/Downloads/linux-3.3.8/mymodule# insmod mymodule.ko root@cop4610:/home/cop4610/Downloads/linux-3.3.8/mymodule# tail /var/log/syslog Oct 12 10:08:20 cop4610 kernel: [ 633.567832] Module was unloaded, this is the printk

The following is a video of this happening live: http://www.youtube.com/watch?v=8aJNSpCd7as&feature=youtu.be

Ben
  • 2,867
  • 2
  • 22
  • 32

2 Answers2

24

It needed a newline!!!!!! Arrggg!!!

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

and

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

It seems it wasn't really doing them out of order, it just appeared to, because the first one was not showing up until the second one was issued as the buffer was not flushed.

Ben
  • 2,867
  • 2
  • 22
  • 32
1

This is my basic example:

#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);

My basic 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
b3h3m0th
  • 1,330
  • 1
  • 11
  • 22