What to prepare before start Linux kernel module development?

view story

http://unix.stackexchange.com – I have couple years C programming experience. Now I decided to working towards Linux kernel module development. However, I can't even get started. I have compiled this code in Ubuntu: #include <linux/module.h> int init_module(void){ printk("<1> hellp"); return 0;} void cleanup_module(void){ printk("<1> bye");} However, the insmod is not working the error message is "Invalid module format". After googling I figured it may be some problem with version compatibility. Is there really no good way to solve it? So can some real kernel module developer give me some advice? What (HowTos)