URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 2722
[ Назад ]

Исходное сообщение
"ioctl в freebsd"

Отправлено apels1n , 26-Мрт-04 15:21 
Имеется система freebsd 2.2.x
Там в мане по ioctl такое:

для вызова ioctl(int fd, unsigned long request, char *argp)

An ioctl request has encoded in it whether the argument is an in parameter or out parameter, and the size of the argument argp in bytes. Macros and defines used in specifying an ioctl request are located in the file <sys/ioctl.h>.

Но как запихивать в параметр request все это нигде не описано. Помогите разобраться...


Содержание

Сообщения в этом обсуждении
"ioctl в freebsd"
Отправлено sas , 27-Мрт-04 12:03 
>Имеется система freebsd 2.2.x
>Там в мане по ioctl такое:
>
>для вызова ioctl(int fd, unsigned long request, char *argp)
>
>An ioctl request has encoded in it whether the argument is an in parameter or out parameter, and the size of the argument argp in bytes. Macros and defines used in specifying an ioctl request are located in the file <sys/ioctl.h>.
>
>Но как запихивать в параметр request все это нигде не описано. Помогите
>разобраться...

Взгляните на http://www.unet.univie.ac.at/aix/libs/basetrf1/ioctl32.htm

Удачи
--- sas


"ioctl в freebsd"
Отправлено apels1n , 27-Мрт-04 14:46 
>>Имеется система freebsd 2.2.x
>>Там в мане по ioctl такое:
>>
>>для вызова ioctl(int fd, unsigned long request, char *argp)
>>
>>An ioctl request has encoded in it whether the argument is an in parameter or out parameter, and the size of the argument argp in bytes. Macros and defines used in specifying an ioctl request are located in the file <sys/ioctl.h>.
>>
>>Но как запихивать в параметр request все это нигде не описано. Помогите
>>разобраться...
>
>Взгляните на http://www.unet.univie.ac.at/aix/libs/basetrf1/ioctl32.htm
>
>Удачи
>--- sas

Спасибо большое, но по-моему это немного не то.
Поподробней опишу проблему. Пишу драйвер под сабж.
Нужно сделать интерфейс с устройством через ioctl.
В ядре/драйвере параметры такие:
static int mydev_ioctl (dev_t dev, int cmd, caddr_t data, int flag, struct proc *p);
А в пользовательской программе такие:
ioctl(int fd, unsigned long request, char *argp)

Если посылать от юзера request то он приходит на cmd в драйвере.
Но указатель char * argp не приходит на caddr_t data (char * data).
И то есть получается я не могу никакие данные передать в драйвер.
Судя по ману я решил, что в параметре request необходимо еще как-то
задавать размер и свойства argp/data.

Это так? Или я что-то неправильно делаю....
Буду очень благодарен за любую помощь.



"ioctl в freebsd"
Отправлено sas , 28-Мрт-04 03:05 
>>>Имеется система freebsd 2.2.x
>>>Там в мане по ioctl такое:
>>>
>>>для вызова ioctl(int fd, unsigned long request, char *argp)
>>>
>>>An ioctl request has encoded in it whether the argument is an in parameter or out parameter, and the size of the argument argp in bytes. Macros and defines used in specifying an ioctl request are located in the file <sys/ioctl.h>.
>>>
>>>Но как запихивать в параметр request все это нигде не описано. Помогите
>>>разобраться...
>>
>>Взгляните на http://www.unet.univie.ac.at/aix/libs/basetrf1/ioctl32.htm
>>
>>Удачи
>>--- sas
>
>Спасибо большое, но по-моему это немного не то.
>Поподробней опишу проблему. Пишу драйвер под сабж.
>Нужно сделать интерфейс с устройством через ioctl.
>В ядре/драйвере параметры такие:
>static int mydev_ioctl (dev_t dev, int cmd, caddr_t data, int flag, struct
>proc *p);
>А в пользовательской программе такие:
>ioctl(int fd, unsigned long request, char *argp)
>
>Если посылать от юзера request то он приходит на cmd в драйвере.
>
>Но указатель char * argp не приходит на caddr_t data (char *
>data).
>И то есть получается я не могу никакие данные передать в драйвер.
>
>Судя по ману я решил, что в параметре request необходимо еще как-то
>
>задавать размер и свойства argp/data.
>
>Это так? Или я что-то неправильно делаю....
>Буду очень благодарен за любую помощь.

Взгляните на определение _IO; _IOR; _IOW and _IORW макросов и на пример

http://mail-index.netbsd.org/netbsd-bugs/1998/11/22/0000.html

Успехов
--- sas


"ioctl в freebsd"
Отправлено sas , 28-Мрт-04 03:18 
И еще пример

http://minnie.tuhs.org/UnixTree/2.11BSD-UFS/ufs_disksubr.c.html

Успехов
--- sas

>>>Имеется система freebsd 2.2.x
>>>Там в мане по ioctl такое:
>>>
>>>для вызова ioctl(int fd, unsigned long request, char *argp)
>>>
>>>An ioctl request has encoded in it whether the argument is an in parameter or out parameter, and the size of the argument argp in bytes. Macros and defines used in specifying an ioctl request are located in the file <sys/ioctl.h>.
>>>
>>>Но как запихивать в параметр request все это нигде не описано. Помогите
>>>разобраться...
>>
>>Взгляните на http://www.unet.univie.ac.at/aix/libs/basetrf1/ioctl32.htm
>>
>>Удачи
>>--- sas
>
>Спасибо большое, но по-моему это немного не то.
>Поподробней опишу проблему. Пишу драйвер под сабж.
>Нужно сделать интерфейс с устройством через ioctl.
>В ядре/драйвере параметры такие:
>static int mydev_ioctl (dev_t dev, int cmd, caddr_t data, int flag, struct
>proc *p);
>А в пользовательской программе такие:
>ioctl(int fd, unsigned long request, char *argp)
>
>Если посылать от юзера request то он приходит на cmd в драйвере.
>
>Но указатель char * argp не приходит на caddr_t data (char *
>data).
>И то есть получается я не могу никакие данные передать в драйвер.
>
>Судя по ману я решил, что в параметре request необходимо еще как-то
>
>задавать размер и свойства argp/data.
>
>Это так? Или я что-то неправильно делаю....
>Буду очень благодарен за любую помощь.