Как стать автором
Обновить

Комментарии 39

Это уже уровень «мастера», мы же решили начать с самых базовых фактов и объяснений.
Или вот такие, например.
Хм. И только в конце статьи выяснил что тема про драйвер под ЛИНУКС. Даже теги 3 раза перечитал… но нет.
Вот ведь западлянка…
Мы планируем посвятить более детальную публикацию разработке драйвера под Windows, как наиболее распространенной ОС.
Здесь же линукс чисто для примера.
О, это хорошо!
Отличная тема и интересная, обязательно пишите больше об этом!
А что за схема в шапке? Напомнила мою дипломную работу с автоматическим включателем света
Похоже на диодную лампочку с удаленным управлением на микроконтроллере.
Это лазерный передатчик. Или световой модем, раньше так баловались. Пара лазерных указок, большие линзы с фотодиодами + соответствующие схемы и готов оптический канал связи на 100...500 метров подключаемый к последовательному порту и с трудом работающий на 38400 бод.
Очень очень нужна статья! как раз сейчас! как раз недавно стал интересоваться как написать драйвера
Если вы пишете про модули ядра, так и пишите!
Я, честно говоря, ожидал, что рассказ будет о каких-нибудь приводах двигателей и т.п. Но никак не модулях ядра!

«Драйвер». Бгггг! Ну и терминология! Вы еще системный блок «процессором» назовите.
«Обеспечитель интерфейса» звучит круче, да…
В следующий раз обязательно напишем про модули ядра, спасибо за ваш комментарий.
«Драйвер». Бгггг! Ну и терминология! Вы еще системный блок «процессором» назовите.

А в чем проблема-то? Всю жизнь в русском языке встречался с тем, что программа обслуживания устройства называлась драйвером. То, что в Линуксе это называется «модули ядра» — это вещь специфичная исключительно для Линукса.

В MS-DOS, Windows и многих других операционных системах (даже просто средах исполнения, не обязательно ОС) такие программы принято называть «драйверами», на жаргоне — «дрова». В некоторых средах исполнения нет понятия «ядро», и поэтому программа обслуживания устройства в принципе не может являться модулем ядра. С другой стороны, в Windows есть так называемые User-mode drivers, которые тоже никаким боком не являются частью ядра ОС.
Проще говоря, в Linux любой драйвер — модуль ядра, но обратное в общем случае неверно. А Eddy_em просто лорчанка.
«Драйвер» применительно к софту говорят только вантузятники.
А то сейчас ppd-файл обзовет кто-нибудь «драйвером принтера», а minicom — «драйвером последовательного порта».
Акститесь! Со своей программой вы сейчас лишаете бесплатного секса чая с печеньем тысячи подростков по всей стране! Я вас умоляю, опомнитесь!
Совершенно бесполезный рекламный пост, не дотягивающий даже до аналогичной статьи в русскоязычной Википедии, и при этом в «лучшем за сутки»…
И кто теперь поступает «некрасиво» и «невежливо»?
НЛО прилетело и опубликовало эту надпись здесь
В этой статье вообще есть много моментов, вызывающих сомнения в компетентности её автора:
низкоуровневые машинные команды являются двоичным кодом (прерываниями) которые на выходе отправляют в драйвер результат, полученный в ходе выполнения этой самой инструкции
При создании драйвера для Линукса, вам необходимо знать не только тип шины и ее адрес, но и схематику самого устройства, а также весь набор электрических прерываний, в ходе исполнения которых устройство отдает результат драйверу.
Резонно, подправили.
Я понимаю, что краткость — сестра таланта, но это несколько не то, чего я обычно ожидаю от статьи на Хабре.
Для всего остального нужен драйвер, который переводит команды операционной системы в последовательность прерываний – пресловутый «двоичный код».

Последний раз такое слышал на уроках ОС в универе. Вела женщина не способная отличить компьютер от компилятора.
Нет такой команды на уровне ядра как «форматирование» диска. Есть команда записать нули в определенные блоки, например в суперблок и таблицу айнод при быстром форматировании. «Форматирование» это человеческий термин, который сам жесткий диск, как устройство, не понимает.
Я не критикую, просто уточняю.
Если уж уточняете, что в НЖМД для военных/спец. служб обычно есть аппаратная «самоудалялка», которой достаточно передать что-то вроде «FORMAT» для начала работы. И таки да, она именно заформатирует винт и отдаст комманду «Готово» по окончании
Самоудалялка есть и в современных винчестерах. Называется «security erase», вызывается так же специальной командой.
Вообще-то команда есть, но для современных винчестеров она не актуальна. Такая команда была еще на древних винчестерах, я помню еще то время когда в БИОС-е была такая утилита для форматирования винчестера. На современных такой уже нет, а команда отданная винчестеру в зависимости от производителя либо ничего не делает либо делает REMAP тех секторов которые находятся в ожидании замены на резерв. т.е. технически команда такая есть, результат её работы нынче зависит от производителя железа.
Ни о чём статья. Драйвер не является компилятором. Драйвер не является интерпретатором. Драйвер не является браузером. Драйвер не является архиватором. Драйвер не является программой 3д-моделирования.

В контексте драйверов, даже про верхнюю/нижнюю часть не рассказали, не говоря уже про нюансики работы с NUMA.
Пойду обновлю все драйверы на драйверы с вашего сайта. Ведь драйверы на официальных сайтах часто устаревшие. А главное, драйверам с вашего сайта всегда можно доверять! Не то что всяким стрёмным исполняемым файлам с сайта асуса или интела.
Не покидает ощушение, что статья либо плохой перевод, либо человек ее писавший сам лично этой темой не занимается. Каким-то странным языком написано.

Для каждого устройства существует свой строгий порядок выполнения команд, называемой «инструкцией». Не зная инструкцию к устройству, невозможно написать для него драйвер, так как низкоуровневые машинные команды являются двоичным кодом (прерываниями) которые на выходе отправляют в драйвер результат, полученный в ходе выполнения этой самой инструкции.

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

Несколько раз перечитал, каша какая-то. Что за инструкция такая? В коробку с устройством ее чтоли вкладывают?
Каким образом некие низкоуровневые команды вдруг стали машинным кодом да плюс к тому еще и прерываниями? Примером такого симбиоза не поделитесь?

Ну и стрелочки на диаграмме я бы поосторожней рисовал. У вас там приложение пользователя напрямую ныряет в разные подсистемы ядра причем минуя само ядро.
машинный код — это код которым общаются машины. На человеческом языке — это двоичный код, который плохо воспринимается человеком.
Они им не общаются, они его исполняют. Об этом даже Wikipedia пишет. Общение между устройствами осуществляется посредством протоколов более высокого уровня которые абстрагированы от системы команд конкретной вычислительной машины.
Единственный случай, который я могу вспомнить, когда драйвер передает в устройство машинный код — это когда он грузит в устройство прошивку на этапе инициализации.
Какое-то у вас узкое понимание двоичного кода.
Исполняемый код — это лишь частный случай двоичного кода.
Двоичный код — это именно двоичный код а не только инструкции процессора.
Характерная черта двоичного кода — человеку его трудно воспринять. Например когда числа кодируются в двоичном виде 0xD623 или 54819 в удобной для восприятия человеком.

Пример НЕ двоичного кода — это HTML, XML или JSON но на низком уровне это не практично.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий