求助: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before

praticing 2016-05-16 04:58:46
在学做字符设备驱动设计时候遇到问题,会不会是头文件的问题,但是当我没注释掉部分头文件,会显示没有那几个头文件,网上也说可能是linux版本2.6以后没那些头文件了。求助各位大大,希望给点建议。。

demo_drv.c

//#include<linux/config.h>
#include<linux/kernel.h>
//#include<linux/init.h>
#include<linux/fs.h>
//#include<linux/devfs_fs_kernel.h>
//#include<linux/module.h>
#define Demo_MAJOR 98
#define Demo_DEBUG
#define VERSION "Demo_Driver"


void showversin(void)
{
printk("******************\n");
printk("\t %s \t\n", VERSION);
printk("******************\n\n");
}

static int Demo_temp_count=0;

ssize_t Demo_read(struct file *file,char *buf,size_t count,loff_t *f_ops)
{
#ifdef Demo_DEBUG
printk("Demo_read[--kernel--]\n");
#endif
return count;
}

ssize_t Demo_write(struct file *file,const char *buf,size_t count,loff_t *f_ops)
{
#ifdef Demo_DEBUG
printk("Demo_write[--kernel--]\n");
#endif
return count;
}

int Demo_ioctl(struct inode *inode,struct file *file,unsigned int cmd,unsigned long data)
{
#ifdef Demo_DEBUG
printk("Demo_ioctl[--kernel--]\n");
#endif
return 0;
}

int Demo_open(struct inode * inode,struct file * file)
{
#ifdef Demo_DEBUG
printk("Demo_open[--kernel--]\n");
#endif
MOD_INC_USE_COUNT;
return 0;
}

int Demo_release(struct inode *inode,struct file *file)
{
#ifdef Demo_DEBUG
printk("Demo_release[-kernel-]\n");
#endif
MOD_DEC_USE_COUNT;
return 0;
}

struct file_operations Test_ctl_ops={
open: Demo_open,
read: Demo_read,
write: Demo_write,
ioctl: Demo_ioctl,
release: Demo_release,
};

static int HW_Test_CTL_init(void)
{
int ret = -ENODEV;
ret =devfs_register_chrdev(Demo_MAJOR,"demo_drv",&Test_ctl_ops);

showversion();

if(ret<0)
{
printk("Demo_module failed with %d\n[--kernel--]",ret);
return ret;
}
else
{
printk("Demo_driver register success!!![--kernel--]\n");
}
printk("\n...\nret=%x\n...\n",ret);
return ret;
}

static int __init Demo_Test_CTL_init(void)
{
int ret = -ENODEV;
#ifdef Demo_DEBUG
printk("Demo_Test_CTL_init[--kernel--]\n");
#endif
ret = HW_Test_CTL_init();
if(ret)
return ret;
return 0;
}


static void __exit cleanup_Test_ctl(void)
{
#ifdef Demo_DEBUG
printk("cleanup_INT_CTL[--kernel--]\n");
#endif
devfs_unregister_chrdev(Demo_MAJOR,"demo_drv");
}


MODULE_DESCRIPTION("simple int drive module");
MODULE_LICENSE("GPL");
module_init(Demo_Test_CTL_init);

module_exit(cleanup_Test_ctl);





makefile文件
KERNELDIR = /usr/src/linux-2.6.27.5-117.fc10.i686
INCLUDEDIR = $(KERNELDIR)/include
CROSS_COMPILE=
CC=$(CROSS_COMPILE)gcc
CFLAGS + = -I..
CFLAGS + = -Wall -O -D_KERNEL_ -DMODULE -I $(INCLUDEDIR)
TARGET = demo_drv.o
all: $(TARGET)
demo_drv.o:demo_drv.c
$(CC) -c $(CFLAGS) $^ -o $@
clean:
rm -f *.o *~ core.depend

...全文
873 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xigua1102 2016-05-20
  • 打赏
  • 举报
回复
一般这种报错就是前面那个ssize_t 不认识 你试试 <sys/types.h>
HeroKern 2016-05-20
  • 打赏
  • 举报
回复
你结构体函数指针赋值格式错误, .open= Demo_open, .read= Demo_read, .write= Demo_write, .ioctl= Demo_ioctl, .release= Demo_release,
renwotao2009 2016-05-17
  • 打赏
  • 举报
回复
类型不识别,一楼的方法试试
nswcfd 2016-05-16
  • 打赏
  • 举报
回复
应该是编译器不认识ssize_t或者loff_t
常书 2016-05-16
  • 打赏
  • 举报
回复
楼主包含下面头文件试试 #include <linux/types.h>

1,318

社区成员

发帖
与我相关
我的任务
社区描述
主要是开发驱动技术
社区管理员
  • 驱动程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧