Предположим, я определил следующее.
#define MY_IOCTL_CMD1 _IOR(MAGIC_NUMBER, 0x01, arg1)
#define MY_IOCTL_CMD2 _IOW(MAGIC_NUMBER, 0x02, arg2)
#ifdef CONFIG_COMPAT
#define MY_COMPAT_IOCTL_CMD1 _IOR(MAGIC_NUMBER, 0x01, compat_arg1)
#define MY_COMPAT_IOCTL_CMD2 _IOW(MAGIC_NUMBER, 0x02, compat_arg2)
#endif
Теперь, когда мы делаем ioctl из пространства пользователя, мы обычно делаем
ioctl(fd, MY_IOCTL_CMD1, &arg1)
Q: Нам действительно нужен ioctl с MY_COMPAT_IOCTL_CMD1
в качестве запроса?
В коде devide у меня есть обработчики, определенные следующим образом.
ioctl: device_ioctl
#ifdef CONFIG_COMPAT
compat_ioctl: device_compat_ioctl
#endif
Кто-нибудь может дать некоторые объяснения по этому поводу?