Я пытаюсь передать два аргумента из программы пользовательского пространства, чтобы изменить размер буфера и количество буфера на устройстве char. Я попробовал несколько актеров я получаю всегда отбрасывать ошибка позиционированияПередача нескольких аргументов ioct
error: cannot convert to a pointer type copy_from_user((char *)msg, arg, sizeof(msg));
или
cannot convert to a pointer typecopy_from_user((char *)msg, (char *)arg, sizeof(msg));
header.h
struct ioctl_arguments {
int block_number;
int block_size;
};
модуль ядра и программа с включают как header.h
c program
#define DEVICE_PATH "/dev/driver"
#define MAGIC_NO 'k'
struct ioctl_arguments args;
#define IOCTL_CMD _IOWR(MAGIC_NO, 0, args)
int main()
{
int fd;
args.block_number = 10;
args.block_size = 10;
fd = open(DEVICE_PATH, O_RDWR);
ioctl(fd, IOCTL_CMD,&args);
close(fd);
return 0;
}
драйвер
static int BlockNumber = 20;
static int BlockSize = 5;
struct ioctl_arguments msg;
static int sample_ioctl (struct file *filp, unsigned int cmd, unsigned long arg);
static int sample_ioctl (struct file *filp, unsigned int cmd, unsigned long arg)
{
// copy two parameters from outside, we use struct
copy_from_user((char *)msg, (char *)arg, sizeof(msg));
Возможный дубликат [char device catch multiple (int) ioctl-arguments] (https://stackoverflow.com/questions/8849445/char-device-catch-multiple-int-ioctl-arguments) –