Ваши функции для proc_read
и proc_write
не соответствуют месту, в котором вы их используете, как указал компилятор со своими предупреждениями. В вашем struct file_operations
у вас есть:
int proc_read(char *buffer,char **buffer_location,off_t offset,int buffer_length,int
*eof,void *data);
int proc_write(struct file *file, const char *buffer, unsigned long count,void *data);
Они оба используются в struct file_operations
, но в include / linux / fs.h типы указателей функций в этом struct
:
ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);
ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);
Если int
не то же самое, то ssize_t
int
не то же самое, что size_t
(маловероятно, поскольку один подписан, а другой нет), тогда вы увидите проблемы, но ваш 1018 * там есть более серьезные проблемы - у вас есть char **
, где он ожидает char *
.
Компилятор был рад принять ваше слово, что именно это вы и хотели сделать, но я не думаю, что это так.
Это read
больше похоже на read_proc_t
в struct proc_dir_entry
, но это не то, что вы устанавливаете в своем dev_proc_ops
.
(В качестве примечания, я думаю, вы, вероятно, захотите сделать остальные функции также static
, так как они отображаются через указатели функций)