Hi, I am a new kernel hacker and I am trying to write my first character device
driver. I want to develop the driver as module so I get "Linux Kernel Module
Programming Guide" and I begin writing....
After I have writed the basic code such as init_module() and cleanup_module()
I have tryed to compile the module but I obtain an infinite number of errors.
The errors are relative to the standard include files.
This is the output of my compiler (the first lines):
gcc -D__KERNEL__ -D__SMP__ -Wall -DMODULE -DMODVERSIONS -c -o idx_module.o idx_module.c
In file included from /usr/include/linux/dcache.h:7,
from /usr/include/linux/fs.h:19,
from idx_module.c:7:
/usr/include/linux/mount.h:32: parse error before `uid_t'
/usr/include/linux/mount.h:32: warning: no semicolon at end of struct or union
/usr/include/linux/mount.h: In function `mntget':
/usr/include/linux/mount.h:38: dereferencing pointer to incomplete type
/usr/include/linux/mount.h: In function `mntput':
/usr/include/linux/mount.h:45: dereferencing pointer to incomplete type
/usr/include/linux/mount.h:46: warning: implicit declaration of function `printk_Rsmp_1b7d4074'
In file included from /usr/include/linux/string.h:21,
from /usr/include/linux/fs.h:23,
from idx_module.c:7:
/usr/include/asm/string.h: At top level:
/usr/include/asm/string.h:47: parse error before `size_t'
/usr/include/asm/string.h: In function `strncpy':
/usr/include/asm/string.h:61: `src' undeclared (first use in this function)
/usr/include/asm/string.h:61: (Each undeclared identifier is reported only once
/usr/include/asm/string.h:61: for each function it appears in.)
/usr/include/asm/string.h:61: `dest' undeclared (first use in this function)
/usr/include/asm/string.h:61: `count' undeclared (first use in this function)
/usr/include/asm/string.h:63: warning: control reaches end of non-void function
My module source file is this:
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/modversions.h>
/* For character devices. */
#include <linux/types.h>
#include <linux/fs.h>
#include <linux/wrapper.h>
#include <asm/uaccess.h>
/* Initialize the module - Register the character device */
int init_module()
{
/* Register the character device. */
Major = module_register_chrdev(0, DEVICE_NAME, &Fops);
if (Major < 0)
{
printk("Register device failed\n");
return Major;
}
printk("Device register with major <%d>!!\n", Major);
return 0;
}
/* Cleanup function. */
void cleanup_module()
{
int ret;
/* Unregister the device. */
ret = module_unregister_chrdev(Major, DEVICE_NAME);
if (ret < 0)
printk("Error <%d> when try to unloading module!!\n", ret);
}
I try to compile the module on a system running kernel 2.4.0 in SMP mode.
Anyone can help me to solve this problem?
Thanks Tiziano Fagni