error: initialization from incompatible pointer type [-Werror=incompatible-pointer-types]
.read = read_proc,
error: initialization from incompatible pointer type [-Werror=incompatible-pointer-types]
.write = write_proc,
Ожидаемая подпись функции чтения:
ssize_t R (struct file *, char __user *, size_t, loff_t *);
Ожидаемая подпись функции записи:
ssize_t W (struct file *, const char __user *, size_t, loff_t *);
( https://linux-kernel-labs.github.io/refs/heads/master/labs/device_drivers.html)
Имена функций и их параметров не имеют значения, но имеют значение тип возвращаемого значения и число, порядок и типы аргументов.
Ваш read_proc()
не соответствует вообще. Я предполагаю, что это возможно, что это ближе к праву для какой-то другой версии ядра, чем описанная мной do c. Ваша write_proc()
функция ближе, но unsigned long
, вероятно, не того же типа, что и size_t
, а void *
, вероятно, не того же типа, что и loff_t *
. Любого из этих расхождений достаточно для несоответствия типов указателей, и они могут вызвать подлинные поведенческие проблемы.
error: dereferencing pointer to incomplete type ‘struct proc_dir_entry’
Our_Proc_File->read_proc = read_proc;
Нет необходимости иметь определение struct proc_dir_entry
для объявления указатель на этот тип, но необходимо , чтобы иметь определение для доступа к членам экземпляра, через такой указатель или иным образом. В тот момент, когда вы пытаетесь сделать
Our_Proc_File->read_proc = read_proc;
, такое определение не входит в сферу применения. Возможно, вы забыли включить соответствующий заголовок. Кроме того, возможно, вы ошиблись тегом структуры.