Ò»¸öÓÐÎÊÌâµÄÇý¶¯³ÌÐòÄ£¿é,¼±Çó¸÷λ´óÏÀÖ¸½Ì
#ifndef __KERNEL__#define __KERNEL__
#endif
#ifndef MODULE
#define MODULE
#endif
#include<linux/kernel.h>
//#include<linux/sched.h>
#include<linux/module.h>
#include<linux/fs.h>
//#include<asm-x86_64/uaccess.h>
#include<asm/io.h>
#define SCULL_NAME "scull"
int scull_major = 0;//the main device number.
static int dev_open_num = 0;
int scull_open(struct inode *inode, struct file *filp)
{
printk("\ndevice_open(%p, %p)\n", inode, filp);
if(dev_open_num)
return -EBUSY;
dev_open_num++;
MOD_INC_USE_COUNT;
return 0;
}
int scull_release(struct inode *inode, struct file *filp)
{
MOD_DEC_USE_COUNT;
return 0;
}
struct file_operations scull_fops = {
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
scull_open,
scull_release,
};
int init_module(void)
{
int retval;
printk("<1>successfully load module: scull!\n");
retval = register_chrdev(scull_major, SCULL_NAME, &scull_fops);
if(retval < 0)
return retval;
if(scull_major == 0)
{
scull_major = retval;
printk("scull_major: %d\n", scull_major);
return 0;
}
}
void cleanup_module(void)
{
unregister_chrdev(scull_major, SCULL_NAME);
printk("<1>successfully unload module: scull!\n");
}
ÓÃgcc - c scull.c ±àÒëʱ×ܳöÏÖÏÂÃæµÄÌáÐÑ, СµÜΪ´ËÓôÃÆºÜ³¤Ê±¼ä,¿ÒÇë¸÷λ´óÏÀÖ¸½Ì.
лл!1!
cull.c:29: warning: `struct file' declared inside parameter list
scull.c:29: warning: its scope is only this definition or declaration, which is
probably not what you want
scull.c:29: warning: `struct inode' declared inside parameter list
scull.c: In function `scull_open':
scull.c:33: `EBUSY' undeclared (first use in this function)
scull.c:33: (Each undeclared identifier is reported only once
scull.c:33: for each function it appears in.)
scull.c:35: union has no member named `usecount'
scull.c: At top level:
scull.c:40: warning: `struct file' declared inside parameter list
scull.c:40: warning: `struct inode' declared inside parameter list
scull.c: In function `scull_release':
scull.c:42: union has no member named `usecount'
scull.c: At top level:
scull.c:46: variable `scull_fops' has initializer but incomplete type
scull.c:47: warning: excess elements in struct initializer
scull.c:47: warning: (near initialization for `scull_fops')
scull.c:48: warning: excess elements in struct initializer
scull.c:48: warning: (near initialization for `scull_fops')
scull.c:49: warning: excess elements in struct initializer
scull.c:49: warning: (near initialization for `scull_fops')
scull.c:50: warning: excess elements in struct initializer
scull.c:50: warning: (near initialization for `scull_fops')
scull.c:51: warning: excess elements in struct initializer
scull.c:51: warning: (near initialization for `scull_fops')
scull.c:52: warning: excess elements in struct initializer
scull.c:52: warning: (near initialization for `scull_fops')
scull.c:53: warning: excess elements in struct initializer
scull.c:53: warning: (near initialization for `scull_fops')
scull.c:54: warning: excess elements in struct initializer
scull.c:54: warning: (near initialization for `scull_fops')
scull.c:55: warning: excess elements in struct initializer
scull.c:55: warning: (near initialization for `scull_fops')
scull.c:46: storage size of `scull_fops' isn't known ±àÒëµÄʱºòûÓÐÖ¸¶¨Í·Îļþ·¾¶ÁË ÄãÊÇÔÚ±àÒëÇý¶¯Âð£¿ÄãÊÇÔÚ±àÒëÓ¦ÓóÌÐò°¢£¿Çý¶¯ÊÇÔÚÄÚºËÀï±ßÖ´Ðеģ¬¿´Ò»Ï±àÒëÇý¶¯µÄÊé¾ÍÖªµÀÁËÉÙÒ»¸ö²ÎÊý£¡ ×¢ÒâÄÚºËÎļþµÄMakefileÎļþ£¬ºÍÄÚºËÄ£¿é±ØÐëµÄ°üº¬µÄÍ·Îļþ¡£ warning: µÄ¿ÉÒÔºöÂÔ¡£¡£¡£¡£
scull.c:33: `EBUSY' undeclared (first use in this function)----ûÓÐÉùÃ÷ `EBUSY' Õâ¸ö
Ò³:
[1]