|
|
从书上照搬的一个驱动程序,编译出现你多错误,请大家帮忙看看:程序在下面
In file included from /usr/include/linux/sched.h:14,
from demo_drv.c:5:
/usr/include/linux/timex.h:173: field `time' has incomplete type
In file included from /usr/include/linux/bitops.h:69,
from /usr/include/asm/system.h:7,
from /usr/include/linux/sched.h:16,
from demo_drv.c:5:
/usr/include/asm/bitops.h:327:2: warning: #warning This includefile is not available on all architectures.
/usr/include/asm/bitops.h:328:2: warning: #warning Using kernel headers in userspace: atomicity not guaranteed
In file included from /usr/include/linux/signal.h:4,
from /usr/include/linux/sched.h:25,
from demo_drv.c:5:
/usr/include/asm/signal.h:107: parse error before "sigset_t"
/usr/include/asm/signal.h:110: parse error before '}' token
In file included from /usr/include/linux/sched.h:81,
from demo_drv.c:5:
/usr/include/linux/timer.h:32: field `vec' has incomplete type
/usr/include/linux/timer.h:37: field `vec' has incomplete type
/usr/include/linux/timer.h:45: parse error before "spinlock_t"
/usr/include/linux/timer.h:53: parse error before '}' token
/usr/include/linux/timer.h:63: field `list' has incomplete type
/usr/include/linux/timer.h:67: parse error before "tvec_base_t"
/usr/include/linux/timer.h:101: parse error before "tvec_bases"
/usr/include/linux/timer.h: In function `init_timer':
/usr/include/linux/timer.h:105: dereferencing pointer to incomplete type
/usr/include/linux/timer.h:105: dereferencing pointer to incomplete type
/usr/include/linux/timer.h:106: dereferencing pointer to incomplete type
/usr/include/linux/timer.h: In function `timer_pending':
/usr/include/linux/timer.h:121: dereferencing pointer to incomplete type
demo_drv.c: At top level:
demo_drv.c:12: warning: `struct file' declared inside parameter list
demo_drv.c:12: warning: its scope is only this definition or declaration, which is probably not what you want
demo_drv.c:12: warning: `struct inode' declared inside parameter list
demo_drv.c:13: warning: `struct file' declared inside parameter list
demo_drv.c:13: warning: `struct inode' declared inside parameter list
demo_drv.c:15: warning: `struct file' declared inside parameter list
demo_drv.c:15: warning: `struct inode' declared inside parameter list
不明白这么会有这么多错误!!
程序如下:
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/errno.h>
#include <linux/sched.h>
#define DEMO_MAJOR 125
#define COMMAND1 1
#define COMMAND2 2
static int demo_init(void);
static int demo_open(struct inode *inode, struct file *file);
static int demo_close(struct inode *inode ,struct file *file);
//static ssize_t demo_read(struct file *file,char *buf ,size_t count,loff_t *offset);
static int demo_ioctl(struct inode *inode,struct file *file,unsigned int cmd,unsigned long arg);
static void demo_cleanup(void);
int demo_param=9;
static int demo_initialized=0;
static volatile int demo_flag=0;
static struct file_operations demo_fops=
{
#if LINUX_KERNEL_VERSION >= KERNEL_VERSION(2,4,0)
owner:THIS_MODULE,
#endif
llseek:NULL,
read:NULL,
write:NULL,
ioctl:demo_ioctl,
open:demo_opon,
release:demo_close
};
static int demo_init(void)
{
int i;
if(demo_initialized==1)
return 0;
i=register_chrdev(DEMO_MAJOR,"demo_drv",&demo_fops);
if(i<0)
{ printk(KERN_CRIT"DEMO:i=%d\n",i);
return -EIO;
}
printf(KERN_CRIT"DEMO:demo_drv registerred sucessfully\n");
return 0;
}
static int demo_open(static inode *inode,struct file *file)
{
if(demo_flag==1) return -1;
printk(KERN_CRIT"DEMO,demo opoen\n");
MOD_INC_USE_COUNT;
demo_flag=1;
return 0;
}
static int demo_close(struct inode *inode,struct file *file)
{
if(demo_flag==0)
return 0;
printk(KERN_CRIT"DEMO,demo close\n");
MOD_DEC_USE_COUNT;
demo_flag==0;
return 0;
}
static int demo_ioctl(struct inode *inode ,struct file *file,unsigned int cmd,unsigned long arg)
{
if(cmd==COMMAND1)
{ printk(KERN_INFO"DEMO,demo command 1\n");
return 0;
}
if(cmd==COMMAND2)
{ printk(KERN_INFO"DEMO,demo command2 \n");
return 0;
}
printk(KERN_INFO"DEMO,demo set command wrong\n");
return 0;
}
static void demo_cleanup(void)
{
if(demo_initialized==1)
{
unregister_chrdev(DEMO_MAJOR,"demo_drv");
demo_initialized=0;
printk(KERN_INFO"DEMO,demo clean up\n");
}
return;
}
#ifdef MODULE
MODULE_AUTHOR("DAPART 981");
MODULE_DESCRIPTION("DEMO DRIVER");
MODULE_PARM(demo_param,"i");
MODULE_PARM_DESC(demo_param,"parameter sent to driver");
int init_module(void)
{return demo_init();
}
void cleanup_module(void)
{
demo_cleanup();
}
#endif
刚开始学驱动,编译这么这么多错误啊~~~
下面是makefile文件
INCLUDE = /usr/linux/include
EXTRA_CFLAGS = -D_KERNEL_ -DMODULE -I $(INCLUDE) -O2 -Wall
all:demo.o test
demo.o:demo_drv.c
gcc $(CFLAGS) &(EXTRA_CFLAGS) -c demo_drv.c -o demo.o
test:test.c
gcc -g test.c -o test
clean:
rm -rf demo.o
rm -rf test |
|