写了个简单的设备驱动,调试出了问题,请高手指正!!!
时间:2007-08-12
来源:互联网
test1.C:47: sorry, not implemented: non-trivial labeled initializers
test1.C:47: invalid conversion from `ssize_t (*)(file*, char*, unsigned int,
loff_t*)' to `loff_t (*)(file*, long long int, int)'
test1.C:47: sorry, not implemented: non-trivial labeled initializers
test1.C:47: invalid conversion from `ssize_t (*)(file*, const char*, unsigned
int, loff_t*)' to `ssize_t (*)(file*, char*, unsigned int, loff_t*)'
test1.C:47: sorry, not implemented: non-trivial labeled initializers
test1.C:47: invalid conversion from `int (*)(inode*, file*)' to `ssize_t
(*)(file*, const char*, unsigned int, loff_t*)'
test1.C:47: sorry, not implemented: non-trivial labeled initializers
test1.C:47: invalid conversion from `int (*)(inode*, file*)' to `int (*)(file*,
void*, int (*)(void*, const char*, int, long long int, long unsigned int,
unsigned int))'
请各位给点解决意见,谢谢!

$ gcc -D_KERNEL_ -DMODULE -DLINUX -I/usr/src/linux-2.4.20-8/include -c test1.C
源代码如下:
#ifndef __KERNEL__
#define __KERNEL__
#endif
#ifndef MODULE
#define MODULE
#endif
#include <linux/config.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/kernel.h> // printk()
#include <linux/types.h> // size_t
#include <asm/delay.h>
#include <asm/uaccess.h>
MODULE_LICENSE("GPL");
#define MAJOR_NUM 0 //主设备号
static int test_var = 66;
static ssize_t test_read(struct file *filp, char *buf, size_t len, loff_t *f_pos);
static ssize_t test_write(struct file *filp, const char *buf, size_t len, loff_t *f_pos);
static int test_open(struct inode *inode, struct file *file);
static int test_release(struct inode *inode, struct file *file);
static int test_init(void);
static void test_exit(void);
static struct file_operations test_fops ={
owner: THIS_MODULE,
read: test_read,
write: test_write,
open: test_open,
release: test_release,
};
static int test_init(void)
{
int ret=register_chrdev(MAJOR_NUM, "test", &test_fops);
if(ret)
{
printk("test register failure");
}
else
{
printk("test register success!");
}
return ret;
}
static void test_exit(void)
{
int ret=unregister_chrdev(MAJOR_NUM, "test");
if(ret)
{
printk("test unregister failure");
}
else
{
printk("test unregister success");
}
}
static ssize_t test_read(struct file *filp, char *buf, size_t len, loff_t *f_pos)
{
if(copy_to_user(buf, &test_var, sizeof(int)))
{
return - EFAULT;
}
return sizeof(int);
}
static ssize_t test_write(struct file *filp, const char *buf, size_t len, loff_t *f_pos)
{
if(copy_from_user(&test_var, buf, sizeof(int)))
{
return - EFAULT;
}
return sizeof(int);
}
static int test_open(struct inode *inode,struct file *file)
{
MOD_INC_USE_COUNT;
return 0;
}
static int test_release(struct inode *inode,struct file *file)
{
MOD_DEC_USE_COUNT;
return (0);
}
module_init(test_init);
module_exit(test_exit);
作者: robin_lu 发布时间: 2007-08-12
编译命令或许路径有问题
作者: AIKO_sex 发布时间: 2007-08-13
作者: robin_lu 发布时间: 2007-08-13
看起来是redhat8
你的如果不是路径就有问题编译器如果也不是也可能有问题
作者: AIKO_sex 发布时间: 2007-08-13
我知道问题了
把 test1.C 改为 test1.c 就OK了
其他 没有问题 正常编译通过!!



作者: robin_lu 发布时间: 2007-08-13

作者: yuzheng110 发布时间: 2007-08-22
作者: tengqian 发布时间: 2007-08-22
作者: luotuo2761 发布时间: 2007-09-17
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28