Sometimes it's not possible without modifying the kernel itself
Not every kernel symbol is exported
...now you're distributing a kernel patch instead of a module, and need to track each release
Requires the module to be recompiled each time the kernel is recompiled
If you've never done it before, there's a substantial learning curve:
No libc functions are available, only those exported by the kernel
Requires much more planning to be safe on SMP and preemptive systems
Memory allocation is much different than in user space
For a very good introduction, see O'Reilly's Linux Device Drivers,