When I ran into the problem where when I called make, I would see the following error:
make[2]: *** No rule to make target `kernel/bounds.c', needed by `kernel/bounds.
I chased around the interwebs for a bit. I found out that it looks like $(PWD) wasn't returning the present directory, so I updated it to shell pwd per this site: Labjack Forums
Here is my makefile (note that in front of commands are TABS, if you replace them with spaces your makefile won't work, you've been warned)
#!/usr/bin/make -f
obj-m += hello_world.o
KERNELDIR=/lib/modules/$(shell uname -r)/build
all:
make -C $(KERNELDIR) M=$(shell pwd) modules
clean:
make -C $(KERNELDIR) M=$(shell pwd) clean
And finally here is my hello world (keep in mind it's pulled from the above tutorial)
/*
* hello_world.c - The simplest kernel module.
*/
#include /* Needed by all modules */
#include /* Needed for KERN_INFO */
int init_module(void)
{
printk("<1>Hello world 1.\n");
/*
* A non 0 return means init_module failed; module can't be loaded.
*/
return 0;
}
void cleanup_module(void)
{
printk(KERN_ALERT "Goodbye world 1.\n");
}
Check it out. and give it a try. hopefully it works for you!
calling make all at the command line should compile it all,
and then a simple sudo insmod hello_world.ko
check out if your module was loaded via lsmod, look for it.
Now check your /var/log/messages file for your alert!
Finally do a sudo rmmod hello_world.ko to remove it from the kernel.
Thank you Caleb for the help various commands and the makefile!