mod_hello/mod_hello.c

71 lines
1.5 KiB
C
Raw Normal View History

2014-09-17 20:51:24 +00:00
#include <linux/module.h> /* all kernel modules need this */
#include <linux/init.h> /* provides initialization routines */
#include <linux/kallsyms.h>
static char __initdata hello_hellomsg[] = KERN_NOTICE "Hello, Kernel, I'm in\n";
static char __exitdata hello_byemsg[] = KERN_NOTICE "Bye, I'm out\n";
2014-09-17 20:51:24 +00:00
static int hello_print_hello(void)
2014-09-17 20:51:24 +00:00
{
unsigned long i;
char *symbol_name;
printk(hello_hellomsg);
2014-09-17 20:51:24 +00:00
symbol_name = "free_pages";
printk("looking up '%s'\n", symbol_name);
i = kallsyms_lookup_name(symbol_name);
printk("%s 0x%lx\n", symbol_name, i);
return 0;
}
long hello_fib(long times, long n1, long n2)
2014-09-17 20:51:24 +00:00
{
long i = 0;
long prev = n1;
long curr = n2;
long next = 0;
2014-09-17 20:51:24 +00:00
while (i < times)
{
next = (prev + curr);
prev = curr;
curr = next;
i++;
}
return next;
}
static int __init start_hello_world(void)
{
long f_int, f_cap, f_start1, f_start2;
2014-09-17 20:51:24 +00:00
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Vincent Batts <vbatts@hashbangbash.com>");
MODULE_DESCRIPTION("just getting familiar");
2014-09-17 20:51:24 +00:00
MODULE_VERSION("1.0");
hello_print_hello();
f_cap = 10000000;
f_start1 = 0;
f_start2 = 1;
f_int = hello_fib(f_cap, f_start1, f_start2);
2014-09-17 20:51:24 +00:00
printk("fib of %ld and %ld (up to %ld): %ld\n", f_start1, f_start2, f_cap, f_int);
2014-09-17 20:51:24 +00:00
return 0;
}
static void __exit hello_go_away(void)
2014-09-17 20:51:24 +00:00
{
printk(hello_byemsg);
2014-09-17 20:51:24 +00:00
}
module_init(start_hello_world);
module_exit(hello_go_away);
2014-09-17 20:51:24 +00:00
// vim:set shiftwidth=4 softtabstop=4 expandtab: