LINUX.ORG.RU

в чём может быть проблема с write()?


0

0

взял из исходников (usc/src/linuxXXX/drivers/char/serial.c -- он одинаковый по крайней мере в rh9 и в slackware9) драйвер ком-порта, переделал только детектирование платы и имя устройства в devfs. создал своё имя при помощи mknod fscm 4 111. то же самое прописываю в структуру для регистрации драйвера. из тестовой программки драйвер открывается успешно open-ом, ioctl тоже работает, т.е. вызываются обработчики драйвера на вызовы этих функций. однако при вызове write он возвращает 0 и errno == 5, до обработчика write-а в драйвере не доходит, т.е. вообще никаких фукнций не вызывается. подскажите хотя бы откуда начать поиск ошибки и где искать исходник тела write-а?


А смысл этого занятия? Я так понял что это какая-то мультипортовка и к ней таким образом драйвер делается? а надо ли? может setserial использовать и никаких драйверов не разводить? или с его помощью провериить работоспособность сочетания стандартного драйвера COM порта и твоей железячки, чтоб отсечь ошибки которые могли возникнуть при модификации?

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

смысл составляют 2е причины: 1. нужна специальная нестандартная процедура включения на плате ком порта; 2. плата не мультипортовка, там просто есть действительно совершенно стандартный порт, который надо использовать, но помиио прочего, есть и другой функционал, который собираюсь в ioctl поместить; к тому же базовый адрес непросто как-то настроить, пока не знаю, как сказать, чтоб 3ий диапазон брал стандартный драйвер.

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

если стандартный сом порт (8 подрят идущих регистров, и тд), я б сначала через setserial проверил что работает (предварительно выполнив "нестандартную процедуру включения"), чтоб убедиться что стандартный драйвер будет с ним работать, а потом уже перетягивать куски стандартного драйвера и изменять под себя.

Вот ты взял serial.c, переделал под себя, и во время тестов

> "до обработчика write-а в драйвере не доходит, т.е. вообще никаких фукнций не вызывается",

то есть та функция rs_write не вызывается?

А ты обработчик прерывания под своё irq переделал? сдаётся беда в этом.

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

ну, да, так и есть

буду пробовать стандартный сначала драйвер... обработчик прерываний там есть, его ж я не трогал. вообще только имя поменял и поиск, мне больше и не надо было. делал то же самое под виндой, так вообще легко получилось, а тут...

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