LINUX.ORG.RU

Разработка драйвера USB и сохранность файлового дескриптора


0

1

Вопрос сформулирую коротко без ссылок на код программирования OpenSuse 11.3 ядро 2.6.34 Суть такова, что при подключении устройства USB в разрабатываемом драйвере вызывается метод «probe» в котором регистрируется файловое устройство, например, «usb0» . Пользовательское приложение открывает файловое устройство и получает файловый дескриптор «fd». Теперь отключаем устройство с порта USB. В драйвере вызывается метод «дисконект» и отключается файловое устройство usb0. Теперь такого устройства нет, но в пользовательском приложении остался файловый дескриптор «fd». Куда этот дескриптор указывает? Можно ли продолжать пользоваться этим дескриптором, если устройство снова подключить? Т.е. пользовательское приложение не закрывалось и держало файловое устройство отрытым, а в драйвере за это время удалилось файловое устройство и снова создалось.



Последнее исправление: Demitreus (всего исправлений: 1)

>Вопрос сформулирую коротко без ссылок на код программирования OpenSuse 11.3 ядро 2.6.34 Суть такова,

Я мозги сломал об это. Выучи русский, потом пиши.

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

Простите, все переносы строк удалились, моя не виноват

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

На сколько я понимаю, то именно мой драйвер должен вернуть -ENODEV, поскольку все обращения по данному дескриптору перенаправляются в драйвер.

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

Не факт. Ядро скорее увидит, что идёт обращение к невалидному дескриптору и ответит на него соответственно.

кури код ядра, там всё сказано.

Dark_SavanT ★★★★★
()
Ответ на: комментарий от Demitreus

На сколько я понимаю, то именно мой драйвер должен вернуть -ENODEV, поскольку все обращения по данному дескриптору перенаправляются в драйвер.

Дык исчезает уствойство и отпинывать должна VFS, а не какой-то драйвер.

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

Да, я изучал подобные статьи, и может эту самую. Будет ли это действовать с виртуальной ФС конкретно с файловыми устройствами, ведь в этом файле нет данных, нет носителя в привычном понимании, есть набор интерфейсов, в частности указатели функций на реализации в мойм драйвере, такие как read, write, ioctl...

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

Файл и устройство - таки разные вещи, несмотря на схожесть.

В конце-концов, прицепи флешку, открой /dev/sd* редактором, оторви флешку и попытайся записать.

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

Если я вставлю флешку, то подгрузится драйвер «юсбстораге», который будет обслуживать все обращения к флешке из редактора.

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

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

Demitreus
() автор топика

> Можно ли продолжать пользоваться этим дескриптором, если устройство снова подключить?

Нет.

iBliss
()

Смотреть лень, но могу предположить. Думаю, с файловым дескриптором ничего не случится, только файловые операции будут возвращать -EIO. После повторного подключения ничего не изменится (-EIO)

ttnl ★★★★★
()
Ответ на: комментарий от iBliss

>>Думаю, с файловым дескриптором ничего не случится, только файловые операции будут возвращать -EIO
Вопрос как раз и заключается в том, кто должен возвращать -EIO - система или мой драйвер.

А исходники посмотреть влом?

Какие исходники? Ядра? Исходники своего драйвера я знаю :)
Хочу понять принцип работы, поэтому и задаю вопрос здесь... может кто-то уже разбирался с подобной задачей.

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