Linux 尝试访问结构文件私有\u数据时出错

Linux 尝试访问结构文件私有\u数据时出错,linux,module,linux-kernel,linux-device-driver,Linux,Module,Linux Kernel,Linux Device Driver,问题是: 我有一个指向结构文件flip的指针,一个int名为cmd,一个unsigned long名为arg。 struct file points中的private_数据字段 专用_数据结构定义如下: typedef struct { unsigned char key; int read_state; } my_private_data; int my_ioctl(struct inode *inode, struct file *filp, unsigned int cm

问题是: 我有一个指向结构文件flip的指针,一个int名为cmd,一个unsigned long名为arg。 struct file points中的private_数据字段 专用_数据结构定义如下:

typedef struct {
    unsigned char key;
    int read_state;
} my_private_data;
int my_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg)
{

    switch (cmd) {
        case CMD_CHANGE_KEY:
            filp->private_data->key = (char)cmd; 
            filp->private_data->read_state = (int)arg; 
            break;
        case CMD_SET_READ_STATE:
            filp->private_data->key = (char)cmd;
            filp->private_data->read_state = (int)arg;
            break;
        case CMD_ZERO:
            kfree(buff_caesar);
            break;
    }
    return 0;
}
ioctl函数定义如下:

typedef struct {
    unsigned char key;
    int read_state;
} my_private_data;
int my_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg)
{

    switch (cmd) {
        case CMD_CHANGE_KEY:
            filp->private_data->key = (char)cmd; 
            filp->private_data->read_state = (int)arg; 
            break;
        case CMD_SET_READ_STATE:
            filp->private_data->key = (char)cmd;
            filp->private_data->read_state = (int)arg;
            break;
        case CMD_ZERO:
            kfree(buff_caesar);
            break;
    }
    return 0;
}
但是,当我尝试编译代码时,我得到以下警告/错误:

Warning: dereferencing 'void *' pointer.
Requesting for Member 'key' in something not a struct or union.
Warning: dereferencing 'void *' pointer.
Requesting for Member 'read_state' in something not a struct or union.
我能做些什么来解决这个问题

以下是开放式方法:

int my_open(struct inode *inode, struct file *filp)
{
    int minor = MINOR(inode->i_rdev);

    
    if(minor == ONE) {
        /* Caesar*/
        filp->f_op = &fops_caesar;
    }
    else if(minor == TWO){
        /*Xor*/
        filp->f_op = &fops_xor;
    }
    else return -ENODEV;

    
    my_private_data* privateData = NULL;
    privateData = kmalloc(sizeof(my_private_date),GFP_KERNEL);
    if (privateData==NULL){
        return -1;
    }
    filp->private_data = privateData;

    return 0;
}

struct file
成员
.private\u data
被定义为
void*
,因此
filp->private\u data
本身没有成员。如果要将数据项存储到结构中,可以使用该类型的本地文件访问它们;例如,在
my\u ioctl()
中: