ЖУРНАЛ «СТА» №2/2006

68 СТА 2/2006 ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ДРАЙВЕРЫ www.cta.ru В ВЕДЕНИЕ Современный уровень аппаратных средств, используемых в автоматиза- ции, давно «размыл» чёткую границу между компьютерами верхнего уровня и контроллерами полевого уровня, с точки зрения используемого систем- ного программного обеспечения. Ап- паратные ресурсы современных конт- роллеров позволяют использовать на них не только оптимизированные к минимальным аппаратным требова- ниям операционные системы, напри- мер Windows CE .NET, но и стандарт- ные ОС класса Windows или Linux. Кроме того, из встраиваемых, но более ресурсоёмких операционных систем, всё более активно применяющихся на рынке автоматизации отечественной промышленности, можно назвать Embedded Windows XP, общая струк- турная организация которой во многом схожа с организацией стан- дартного (офисного) варианта. Воз- можность «конструирования» разра- ботчиком образа этой ОС из большого числа компонентов не влияет на ос- новные принципы общей организации ОС в части затрагиваемых в этой ста- тье вопросов, поэтому рассматрива- емые здесь возможности написания драйверов уровня ядра применимы и для этой ОС. На текущий момент до- минирующее положение среди стан- дартных ОС Windows в сфере автома- тизации занимают ОС Windows 2000/XP, поэтому дальнейшее изложе- ние материала касается именно этих ОС. Использование стандартных ОС позволяет максимально использовать опыт программирования, накоплен- ный специалистами, привыкшими ра- ботать со знакомым набором API (Application Programming Interface — интерфейс прикладного программи- рования). В числе решаемых програм- мистами задач, кроме собственно на- писания прикладной программы, мо- жет возникнуть необходимость в на- писании драйвера, например, если по какимлибо причинам драйверы под ОС Windows не поставляются (напри- мер, платы вводавывода в формате MicroPC фирмы Octagon Systems или Fastwel) или речь идёт о плате собст- венной разработки. Несмотря на боль- шое количество технической литера- туры, посвящённой программирова- нию в ОС Windows, проблемы написа- ния драйверов практически не осве- щаются. Безусловно, этот вопрос дос- таточно специфичен для программи- стов общего плана, но для специали- стов, работающих в сфере автоматиза- ции производства, эта тема представ- ляет большой интерес. Даже если про- граммисту не придётся непосредствен- но заниматься написанием драйверов, более глубокое понимание функцио- нирования этой подсистемы ОС Windows даст более чёткое представле- ние о возможностях функционирова- Основы написания драйвера уровня ядра для ОС Windows 2000, XP и XP Embedded Статья посвящена практическим аспектам написания драйверов уровня ядра в операционных системах семейства NT — Windows 2000/XP (XP Embedded). Для понимания работы подсистемы ввода-вывода, составляющим звеном которой являются драйверы, дано краткое описание структурной организации ОС в целом. Приводится рабочий пример простейшего драйвера уровня ядра. Валерий Яковлев ния ОС в целом. Это позволяет трезво оценивать временн ые возможности стандартных драйверов и при необхо- димости получения лучших времен- ны ' х показателей проектируемой сис- темы в целом написать свой, возможно менее функциональный, но более бы- стрый драйвер. Тема драйверов доста- точно обширна и не укладывается в рамки одной статьи, поэтому мы огра- ничимся минимально необходимым общим материалом по структуре Windows 2000/XP и затем решим при- кладную задачу – напишем простей- ший драйвер, осуществляющий доступ к регистрам платы, установленной в слот ISA (пусть это будет модуль UNIOXX5 фирмы Fastwel). Выбор уст- ройства на шине ISA обусловлен более простой схемой программного взаи- модействия с таким устройством, на самом деле это может быть и плата, ус- тановленная в слот PCI, или любой другой системный ресурс, обращение к которому на уровне регистров запре- щено из программ режима пользовате- ля. При этом усложняется алгоритм взаимодействия с устройством, но принцип доступа через порты вво- давывода остаётся. Драйвер напишем на языке ассемблера, который наибо- лее эффективно используется именно при написании драйверов, где требо- вания к минимизации кода и, как следствие, малое время исполнения объективно необходимы.

RkJQdWJsaXNoZXIy MTQ4NjUy