fresh_linuxer 发表于 2004-2-5 13:29:31

驱动程序里的奇怪错误

以下我的第一个驱动程序代码,但似乎我对编写驱动程序的理解不对
在编译时有奇怪的错误,大虾们帮忙指点一下
#include<linux/kernel.h>
#include<linux/module.h>
#include<linux/fs.h>

static int major;

int my_open(struct inode *inode,struct file *filp)
{
    MOD_INC_USE_COUNT;
    printk(KERN_ALERT"Device is open\n");
    return 0;
}

int my_release(struct inode *inode, struct file *filp)
{
    MOD_DEC_USE_COUNT;
    printk(KERN_ALERT"Device is closed\n");
    return 0;
}

struct file_operations my_ops={
                open: my_open,
               release:my_release,
                               };
                           
int init_module(void)
{
    major=register_chrdev(0,"mydriver",&my_ops);
    if(major<=0)
    {
       printk(KERN_ALERT"Fails to register_chrdev()\n");
       return major;
    }
    return 0;
}

void cleanup_module(void)
{
    major=unregister_chrdev(major,"mydriver");
    if(major!=0)
      printk(KERN_ALERT"Fails to call unregister_chrdev()\n");
}


gcc -Wall -O2 -D__KERNEL__ -DMODULE -c mydriver.c

提示错误信息:my_ops的大小不能确定,且不识别open和release
还有警告信息:在用户区程序里使用了核心的头文件

muddog 发表于 2004-2-5 20:34:50

Re: 驱动程序里的奇怪错误

struct file_operations my_ops={
                open: my_open,
               release:my_release,
                               };

c里的结构定义,初始化怎么会这么写呢?

fresh_linuxer 发表于 2004-2-5 21:37:30

是我的struct file_operations用错了吗? 可是不少书上是如此的呀?

_z_ 发表于 2004-2-5 21:45:56

Re: 驱动程序里的奇怪错误

struct file_operations my_ops={
                open: my_open,
               release:my_release,
                               };

c里的结构定义,初始化怎么会这么写呢?

gcc对c的扩展

_z_ 发表于 2004-2-5 21:47:31

release:my_release,


这个后面有逗号??

fresh_linuxer 发表于 2004-2-6 00:58:35

我刚刚找到错误了,是由于Makefile中的头文件地址没写正确,是个老问题了。


release:my_release,


这个后面有逗号??

有些书上是没有这个逗号的,但似乎系统源文件中是有的。

muddog 发表于 2004-2-6 09:45:52

说说这个扩展的含义,
release:my_release
是不是release是指向my_release的指针?

_z_ 发表于 2004-2-6 13:18:28

说说这个扩展的含义,
release:my_release
是不是release是指向my_release的指针?

将release初始化my_release
页: [1]
查看完整版本: 驱动程序里的奇怪错误