LINUX.ORG.RU

Создание и обработка собственных ioctl кодов


0

0

Речь идет об обработке системных вызовов ioctl() в модульном драйвере.

Подскажите, пожалуйста, как поступить, если при создании с помощью макросов _IOWR (и ему подобных) собственного кода управления устройством я не знаю мажорный номер своего устройства (я получаю его автоматически при вызове register_chrdev() ) ?


а под какое ядро ты это ваяешь? под 2.4 по крайней мере это совсем необязательно знать

anonymous
()
Ответ на: комментарий от snilga

ну у меня это выглядит так :
--- cat ---
#define RESET 1
#define NAV 2
#define SET_TEST 3
static struct file_operations bos_fops = {
    .read	= bos_read,           /* read */
    .write	= bos_write,          /* write */
    .poll	= bos_poll,           /* poll */
    .ioctl	= bos_ioctl,          /* ioctl */ // !!!!
    .open	= bos_open,           /* open */
    .release	= bos_close,          /* int (*release) (struct inode *, struct file *) */
};
static int bos_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
{	
    switch(cmd) 
    {
	case RESET :
	{
	    break;
	} 
	case NAV :
	{
	    break;	       
	}	      
	case SET_TEST :
	{
	    break;
	}
	return 0;
}
--- cat ----
как видишь, ни MINOR, ни MAJOR здесь не присутствуют. правда и макросов твоих нет :-)

anonymous
()
Ответ на: комментарий от anonymous

надо было, наверное, добавить, что для общения с программами импользуются copy_to_user и copy_from_user...

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.