2010-03-22 4 views
3

Я добавляю код в существующий драйвер устройства FreeBSD, и я пытаюсь передать char* из пользовательского пространства в драйвер. Я реализовал команду пользовательских ioctl() используя _IOW макрос так: #define TIBLOOMFILTER _IOW(0,253,char*)Выполнение команд ioctl() в FreeBSD

Мой вызов выглядит так:

int file_desc = open("/dev/ti0", O_RDWR); 
ioctl(file_desc, TIBLOOMFILTER, (*filter).getBitArray()); 
close(file_desc); 

Когда я называю ioctl() я получаю: Inappropriate ioctl for device как сообщение об ошибке. Любая догадка о том, что может делать неправильно? Я определил один и тот же макрос в своем драйвере устройства и добавил его в оператор case.

+2

Пожалуйста, разместите свой код обработчика ioctl в драйвере. А также отправьте регистрацию своего водителя. – osgx

ответ

1

ли вы зарегистрировать обработчик IOCTL с

.d_ioctl = ioctl_handler 

в? Devsw (обугленного/блок переключения устройства таблицы)?

+0

Нет, но обработчик уже был на месте, поскольку это был уже существующий драйвер, я просто добавлял еще одну команду к уже написанному обработчику. Это неправильно? – acoffman

+0

Используете ли вы правильный код возврата? Добавьте отладочные отпечатки непосредственно перед 'switch' и после вашего' case' – osgx

+0

Мы пробовали это, и кажется, что команда никогда не достигает указателя в драйвере. – acoffman

Смежные вопросы