Да, вы должны использовать структуры. Для конкретной команды ioctl будут некоторые предопределенные аргументы. Вам нужно обернуть все эти аргументы в объект структуры и передать адрес объекта. В стороне от ядра вам нужно набрать приведенный аргумент arg для указателя на структуру и получить доступ к аргументам. Например.
struct mesg {
int size;
char buf[100];
};
struct mesg msg1;
/*Fill in the structure object here and call ioctl like this*/
ret = ioctl(fd, SZ_NEW_DEV_FORMAT, &msg1);
Внутри ядра вы получаете к нему доступ так:
struct mesg *msg;
copy_from_user((char *)msg, (char *)arg, sizeof(*msg));