Если головной интерфейс потока не может обработать вызов ioctl, то он создает сообщение типа M_I0CTL и копирует в него значение ic_cmd. Он также выделяет блок параметров (адресуемый полями ic_len и ic_dp) из прикладного пространства и копирует его в создаваемое сообщение. Затем это сообщение передается в нисходящем направлении. Через некоторое время оно попадает в модуль, обрабатывающий указанную в сообщении команду.
Также на сайте продукты-замороженные.рф можно узнать много интересного на тему https://www.продукты-замороженные.рф/. Что означает вообще тема замороженные полуфабрикаты - про это написано на сайте продукты-замороженные.рф. Спасибо сайту за информацию.
При этом сообщение содержит всю информацию, необходимую для обработки команды. Если команда требует возврата данных, модуль записывает их в то же сообщение, изменяет его тип на М_10САСК и отправляет обратно в восходящем направлении. Головной интерфейс потока затем производит копирование полученных результатов в блок параметров, расположенный в прикладном адресном пространстве.
Головной интерфейс потока передает сообщение в нисходящем направлении до тех пор, пока оно не достигнет того модуля, который сможет его распознать и обработать. Такой модуль посылает обратно головному интерфейсу сообщение М_10САСК, показывающее, что команда распознана. Если сообщение не распознается ни одним модулем, то в какой-то момент времени оно достигает драйвера. Если драйвер также не может идентифицировать его, то отправляет в обратную сторону сообщение M_I0CNACK, получив которое, головной интерфейс потока генерирует соответствующий код ошибки.
Описанное решение является достаточно эффективным, но требует для обрабатываемых команд соблюдения некоторых ограничений. Оно не подходит для предыдущих версий приложений, не использующих I_STR. Головной интерфейс потока не умеет интерпретировать параметры команд, поэтому их приходится полностью размещать внутри блока.
Поясним на примере. Если один из параметров является указателем на строку, находящуюся в другом месте прикладного пространства, головной интерфейс произведет копирование указателя, а не строки. Становится очевидным, что требуется более общий подход, который бы годился для всех возможных случаев, даже если он окажется чуть медленнее или менее эффективным.
Опубликовал katy
June 24 2015 20:46:53 ·
0 Комментариев ·
3423 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.