#include /* all kernel modules need this */ #include /* provides initialization routines */ #include #include MODULE_LICENSE("GPL"); MODULE_AUTHOR("Vincent Batts "); MODULE_DESCRIPTION("just getting familiar"); MODULE_VERSION("1.0"); //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"; static int hello_print_hello(void) { printk(KERN_INFO "[%s] module loaded.\n", __this_module.name); return 0; } long hello_fib(long times, long n1, long n2) { long i = 0; long prev = n1; long curr = n2; long next = 0; while (i < times) { next = (prev + curr); prev = curr; curr = next; i++; } return next; } static int __init hello_init(void) { long f_int, f_cap, f_start1, f_start2; unsigned long sym_addr; char *sym_name; char filename[255]; hello_print_hello(); sym_name = "files"; printk("looking up '%s'\n", sym_name); sym_addr = kallsyms_lookup_name(sym_name); printk("%s 0x%lx\n", sym_name, sym_addr); strncpy(filename, (char *)sym_addr, 255); printk(KERN_INFO "[%s] %s (0x%lx): %s\n", __this_module.name, sym_name, sym_addr, filename); printk("[%s] jiffies: %lu\n", __this_module.name, jiffies); f_cap = 10000000; f_start1 = 0; f_start2 = 1; f_int = hello_fib(f_cap, f_start1, f_start2); printk("fib of %ld and %ld (up to %ld): %ld\n", f_start1, f_start2, f_cap, f_int); printk("[%s] jiffies: %lu\n", __this_module.name, jiffies); return 0; } static void __exit hello_cleanup(void) { printk(KERN_INFO "[%s] module unloaded.\n", __this_module.name); } module_init(hello_init); module_exit(hello_cleanup); // vim:set shiftwidth=4 softtabstop=4 expandtab: