Hardware Support/ru: Difference between revisions
No edit summary |
|||
(25 intermediate revisions by 7 users not shown) | |||
Line 1: | Line 1: | ||
KolibriOS частично обеспечивает поддержку оборудования персонального компьютера. Часть оборудования поддерживается ядром ОС, часть динамически загружаемыми драйверами, | KolibriOS частично обеспечивает поддержку оборудования персонального компьютера. Часть оборудования поддерживается ядром ОС, часть динамически загружаемыми драйверами. Более того, система предоставляет возможность прямого доступа к оборудованию прямо из пользовательского режима, т.е. присутствует возможность написать программу, которая сможет работать с оборудованием используя соответствующий системный сервис. Правда, этот подход лучше использовать исключительно в отладочных или исследовательских целях, а для "нормальной" поддержки оборудования всё-таки лучше писать драйвера. Также нужно понимать, что существуют два вида драйверов: | ||
* Драйвер являющейся частью ядра, т.е. весь его код может находиться в отдельном модуле, но после компиляции ядра он станет частью кода ядра системы (например: hd_drv.inc). | * Драйвер, являющейся частью ядра, т.е. весь его код может находиться в отдельном модуле, но после компиляции ядра он станет частью кода ядра системы (например: hd_drv.inc). | ||
* Драйвер динамически подгружаемый в адресное пространство ядра уже после загрузки системы (например: sound.asm) | * Драйвер, динамически подгружаемый в адресное пространство ядра уже после загрузки системы (например: sound.asm). Эти драйвера находятся в специальной системной директории (/rd/1/drivers/). | ||
== Состав аппаратного обеспечения ПК == | == Состав аппаратного обеспечения ПК == | ||
В системном блоке основным элементом является материнская плата, а на ней находится сердце компьютера — центральный процессор (ЦПУ) и оперативная память (ОЗУ — оперативное запоминающее устроство). Наибольший интерес для программиста представляет Южный Мост — чип, обеспечивающий контроль над большинством оборудования. | |||
Существует также Северный Мост, посредством которого Южный Мост и связан с ЦПУ и ОЗУ (см. [http://ru.wikipedia.org/wiki/Северный_интерфейс Северный и Южный интерфейс]), но в этой статье он не будет подробно расписан ввиду его небольшой функциональности с точки зрения программиста. | |||
В системном блоке основным элементом является материнская плата, а на ней находится сердце компьютера | |||
Существует также Северный Мост, посредством которого Южный Мост и связан с ЦПУ и | |||
== Компоненты южного моста == | == Компоненты южного моста == | ||
Большинство устройств представлены в Южном Мосту в качестве так называемых ''контроллеров'' | Большинство устройств представлены в Южном Мосту в качестве так называемых ''контроллеров'' — программно-доступных электронных блоков, управляющих работой конкретного оборудования. Из-за огромного разнообразия, многофункциональности и слабой стандартизации современного компьютерного "железа" каждому такому контроллеру требуется уникальный ''драйвер'' — специальная системная программа, обеспечивающая инициализацию, конфигурирование, эффективное управление оборудованием в реальной системной среде и, самое главное, быстрый и надежный ввод/вывод потоков информации через данное устройство. | ||
<!-- Asper: This information mainly from http://ru.wikipedia.org/wiki/Southbridge page.--> | <!-- Asper: This information mainly from http://ru.wikipedia.org/wiki/Southbridge page.--> | ||
Функционально южный мост включает в себя: | Функционально южный мост включает в себя: | ||
* стандартный контроллер шины [ | * стандартный контроллер шины [http://ru.wikipedia.org/wiki/PCI PCI]; | ||
* контроллер шины [ | * контроллер шины [http://ru.wikipedia.org/wiki/PCI_Express PCI Express]; | ||
* шина [ | * шина [http://ru.wikipedia.org/wiki/ISA ISA], которая используется достаточно редко, но тем не менее остается неотъемлемой частью любого южного моста; | ||
* контроллер шины SMBus или [ | * контроллер шины [http://ru.wikipedia.org/wiki/SMBus SMBus] или [http://ru.wikipedia.org/wiki/I2C I2C] для связи с другими устройствами на материнской плате (например, для управления вентиляторами); | ||
* [ | * [http://ru.wikipedia.org/wiki/DMA DMA] контроллер с поддержкой древних ISA и [http://ru.wikipedia.org/wiki/LPC LPC]-протоколов прямого доступа к [http://ru.wikipedia.org/wiki/Оперативная_память оперативной памяти] без участия ЦПУ; | ||
* контроллеры прерываний: старый [ | * контроллеры прерываний: старый [http://ru.wikipedia.org/wiki/PIC PIC] и "продвинутый" [http://ru.wikipedia.org/wiki/APIC APIC]; | ||
* [ | * [http://ru.wikipedia.org/wiki/ATA ATA] (IDE) и [http://ru.wikipedia.org/wiki/SATA SATA] контроллеры; | ||
* контроллер шины LPC для передачи данных и управления | * контроллер шины LPC для передачи данных и управления устройствами ввода/вывода (клавиатура, мышь, [http://ru.wikipedia.org/wiki/параллельный_порт параллельный порт], [http://ru.wikipedia.org/wiki/последовательный_порт последовательный порт], [http://ru.wikipedia.org/wiki/инфракрасный_порт инфракрасный порт] и [http://ru.wikipedia.org/wiki/Дискета флоппи-контроллер]) и BIOS ROM; | ||
* [ | * [http://ru.wikipedia.org/wiki/RTC часы реального времени] (Real Time Clock); | ||
* управление питанием (Power management ([ | * управление питанием (Power management ([http://ru.wikipedia.org/wiki/Advanced_Power_Management APM] и [http://ru.wikipedia.org/wiki/ACPI ACPI]) позволяющие переводить компьютер в «спящий режим» или выключать его); | ||
* энергонезависимую память [ | * энергонезависимую память [http://ru.wikipedia.org/wiki/BIOS BIOS] ([http://ru.wikipedia.org/wiki/CMOS CMOS]) с независимым электропитанием от батареи, включающая небольшую по область памяти для хранения системных настроек; | ||
* звуковой контроллер (обычно [ | * звуковой контроллер (обычно [http://ru.wikipedia.org/wiki/AC'97 AC'97] или [http://ru.wikipedia.org/wiki/Intel_High_Definition_Audio Intel HDA]). | ||
Опционально южный мост также может включать в себя контроллер Ethernet, RAID-контроллеры, контроллеры [ | Опционально южный мост также может включать в себя контроллер [http://ru.wikipedia.org/wiki/Ethernet Ethernet], [http://ru.wikipedia.org/wiki/RAID RAID]-контроллеры, контроллеры [http://ru.wikipedia.org/wiki/USB USB], [http://ru.wikipedia.org/wiki/IEEE_1394 IEEE 1394] и [http://ru.wikipedia.org/wiki/Аудиокодек аудиокодек]. | ||
Некоторые южные мосты также включают поддержку | Некоторые южные мосты также включают поддержку клавиатуры, мыши и последовательных портов. Однако, на многих системных платах эти устройства подключены через другой чип — [http://ru.wikipedia.org/wiki/Super_I/O Super I/O] (контроллер ввода-вывода). | ||
Возникает резонный вопрос: если все эти электронные фишки такие разные, как вообще возможен нормальный старт компьютера и загрузка операционной системы - ведь никаких драйверов в этот момент еще нет, а каждое устройство по-своему уникально и нестандартно? | Возникает резонный вопрос: если все эти электронные фишки такие разные, как вообще возможен нормальный старт компьютера и загрузка операционной системы - ведь никаких драйверов в этот момент еще нет, а каждое устройство по-своему уникально и нестандартно? | ||
Line 37: | Line 35: | ||
Во-первых, кое-какая стандартизация всё-таки имеется. Пожалуй, главный и наиболее последовательный стандарт, общий для всех современных ПК-платформ - спецификация шины PCI, включающая единообразные средства идентификации, конфигурации и (в определенных рамках) диагностики устройств. Кроме него, имеется де-факто стандарт древней (legacy) архитектуры IBM PC/AT, низкоуровневая совместимость с которой до сих пор требуется от всех х86-платформ. | Во-первых, кое-какая стандартизация всё-таки имеется. Пожалуй, главный и наиболее последовательный стандарт, общий для всех современных ПК-платформ - спецификация шины PCI, включающая единообразные средства идентификации, конфигурации и (в определенных рамках) диагностики устройств. Кроме него, имеется де-факто стандарт древней (legacy) архитектуры IBM PC/AT, низкоуровневая совместимость с которой до сих пор требуется от всех х86-платформ. | ||
Во-вторых, существует ряд спецификаций базовой системы ввода-вывода | Во-вторых, существует ряд спецификаций базовой системы ввода-вывода BIOS, определяющих основные протоколы и структуры данных для работы с контроллерами устройств. После включения питания специальная программа POST (power-on self test) диагностирует и конфигурирует конкретное "железо" в соответствии с их требованиями; по завершении своей работы BIOS осуществляет загрузку операционной системы согласно ''BIOS Boot Specification''. | ||
Примитивный и медленный (но - надёжный и универсальный!) сервис BIOS в той или иной мере используется всеми операционными системами. Особенно велика его роль на этапе загрузки, пока ядро не успело обрасти драйверами и сконфигурировать свои собственные, быстрые и эффективные процедуры взаимодействия с имеющимся оборудованием. | Примитивный и медленный (но - надёжный и универсальный!) сервис BIOS в той или иной мере используется всеми операционными системами. Особенно велика его роль на этапе загрузки, пока ядро не успело обрасти драйверами и сконфигурировать свои собственные, быстрые и эффективные процедуры взаимодействия с имеющимся оборудованием. | ||
Line 75: | Line 73: | ||
| AGP | | AGP | ||
| ограниченная поддержка | | ограниченная поддержка | ||
| см. видеодрайвер ATIKMS | | см. драйвер AGP, а также видеодрайвер ATIKMS | ||
|- | |- | ||
| ISA | | ISA | ||
| ? | | ? | ||
| | | Драйвером звука поддерживается Creative SB16 (см ниже), также система запускалась с видеокартой ISA Trident TVGA9000B. | ||
|- | |- | ||
| EISA | | EISA | ||
Line 98: | Line 96: | ||
|- | |- | ||
| USB | | USB | ||
| Поддерживается | | Поддерживается ядром и драйверами | ||
| | | Работа с UHCI/OHCI/EHCI. В настоящее время поддерживает клавиатуру, мышь, запоминающие устройства (mass storage). (До этого были только драйвера для UHCI, USB клавиатуры и мыши.) | ||
|- | |- | ||
| FireWire | | FireWire | ||
Line 150: | Line 148: | ||
|- | |- | ||
| HDMI | | HDMI | ||
| | | ограниченная поддержка | ||
| | | см. видеодрайвера ATIKMS и i915 | ||
|} | |} | ||
Line 175: | Line 173: | ||
|- | |- | ||
| UHCI | | UHCI | ||
| Поддерживается драйвером | | Поддерживается ядром и драйвером. (см. http://board.kolibrios.org/viewtopic.php?f=30&t=1785, http://board.kolibrios.org/viewtopic.php?f=30&t=2305) | ||
|- | |- | ||
| OHCI | | OHCI | ||
| | | Поддерживается ядром и драйвером. (см. http://board.kolibrios.org/viewtopic.php?f=30&t=1785, http://board.kolibrios.org/viewtopic.php?f=30&t=2305) | ||
|- | |- | ||
| EHCI | | EHCI | ||
| | | Поддерживается ядром и драйвером. (см. http://board.kolibrios.org/viewtopic.php?f=30&t=1785, http://board.kolibrios.org/viewtopic.php?f=30&t=2305) | ||
|- | |- | ||
| XHCI | | XHCI | ||
Line 194: | Line 192: | ||
! Примечания | ! Примечания | ||
|- | |- | ||
|rowspan=" | |rowspan="4" | IDE (ATA) | ||
| FDD | | FDD | ||
| Поддерживается ядром ОС | | Поддерживается ядром ОС | ||
Line 203: | Line 201: | ||
| (см. /kernel/blkdev/cd_drv.inc) | | (см. /kernel/blkdev/cd_drv.inc) | ||
|- | |- | ||
| HDD | | HDD/SSD | ||
| Поддерживается ядром ОС | | Поддерживается ядром ОС | ||
| (см. /kernel/blkdev/hd_drv.inc) | | (см. /kernel/blkdev/hd_drv.inc) | ||
Line 209: | Line 207: | ||
|rowspan="2" | SATA | |rowspan="2" | SATA | ||
| CD/DVD | | CD/DVD | ||
| | | Поддерживается ядром чтение в режиме IDE (ATAPI в PIO режиме) (http://board.kolibrios.org/viewtopic.php?f=1&t=2343). | ||
|rowspan=" | |rowspan="7" | В ряде случаев система может работать с SATA- и USB-дисками через BIOS Fn13h в виртуальном V86-режиме (скорость чтения/записи при этом оставляет желать лучшего). | ||
|- | |- | ||
| HDD | | HDD | ||
| | | Поддерживается ядром чтение и запись в режиме IDE и SATA. Драйвер AHCI (SATA) реализован в kernel/blkdev/ahci.inc | ||
|- | |||
|rowspan="6" | USB | |||
| FDD | |||
| ? | |||
|- | |- | ||
| CD/DVD | | CD/DVD | ||
| Не поддерживается | | Не поддерживается | ||
|- | |- | ||
| SSD | | HDD/SSD | ||
| | | Поддерживается ядром и драйвером. (см. http://board.kolibrios.org/viewtopic.php?f=30&t=1785, http://board.kolibrios.org/viewtopic.php?f=30&t=2305) | ||
|- | |- | ||
| FlashDrive | | FlashDrive | ||
| | | Поддерживается ядром и драйвером. (см. http://board.kolibrios.org/viewtopic.php?f=30&t=1785, http://board.kolibrios.org/viewtopic.php?f=30&t=2305) | ||
|- | |- | ||
| FlashCard | | FlashCard | ||
| | | Поддерживается ядром и драйвером. (см. http://board.kolibrios.org/viewtopic.php?f=30&t=1785, http://board.kolibrios.org/viewtopic.php?f=30&t=2305) | ||
|- | |- | ||
| RAID | | RAID | ||
Line 276: | Line 277: | ||
! Примечание | ! Примечание | ||
|- | |- | ||
|rowspan=" | |rowspan="23" | AC97 | ||
|rowspan="7" | Intel Corporation | |rowspan="7" | Intel Corporation | ||
| ICH0 | | ICH0 | ||
|rowspan=" | |rowspan="22" | Звуковой контроллер AC97 - поддерживается драйверами соответствующих устройств. Поскольку AC97 стандарт стандартизует только функции кодека и AC-Link, отвечающего за взаимодействие контроллера и кодека, то для различных контроллеров AC97 требуются разные драйвера. | ||
|- | |- | ||
| ICH1 | | ICH1 | ||
Line 306: | Line 307: | ||
| Silicon Integrated Systems | | Silicon Integrated Systems | ||
| SIS7012 | | SIS7012 | ||
|- | |||
| AMD | |||
| CS5536 | |||
|- | |- | ||
| ForteMedia | | ForteMedia | ||
Line 333: | Line 337: | ||
| | | | ||
| | | | ||
| | | Работа над драйвером ведётся в настоящее время (см. [[Intel_High_Definition_Audio/ru|HDA]]). Драйвер работает на большинстве тестовых систем. | ||
|- | |- | ||
|rowspan="3" | SB16 | |rowspan="3" | SB16 | ||
Line 368: | Line 372: | ||
|- | |- | ||
| Intel | | Intel | ||
| | | Драйвером i915. | ||
| | | Поддерживаются аппаратный курсор мыши, смена видеорежимов и акселерация двумерной графики. Также есть драйвер для установки "родного" разрешения для ноутбуков. | ||
|- | |- | ||
| VIA | | VIA | ||
Line 423: | Line 427: | ||
| 3c450 | | 3c450 | ||
| | | | ||
|- | |||
|rowspan="1" | RDC Semiconductor Co. | |||
| r6040 | |||
| 10/100 Mbit PCI controller | |||
|- | |- | ||
|rowspan="4" | Realtek Semiconductor Co., Ltd. | |rowspan="4" | Realtek Semiconductor Co., Ltd. | ||
Line 433: | Line 441: | ||
| rtl8168 | | rtl8168 | ||
| RTL8111/8168B PCI Express Gigabit Ethernet controller (rtl8169) | | RTL8111/8168B PCI Express Gigabit Ethernet controller (rtl8169) | ||
|- | |||
| rtl8167 | |||
| RTL-8169 Gigabit Ethernet, RTL-8110SC/8169SC Gigabit Ethernet | |||
|- | |- | ||
| rtl8169 | | rtl8169 | ||
Line 506: | Line 517: | ||
| 10/100/1000 Mbps PCI Network Card (rtl8169) | | 10/100/1000 Mbps PCI Network Card (rtl8169) | ||
|- | |- | ||
|rowspan=" | |rowspan="3" | Intel Corporation | ||
| i8255x | | i8255x | ||
| | |||
|- | |||
| i82562 | |||
| | | | ||
|- | |- | ||
Line 613: | Line 627: | ||
|- | |- | ||
| Клавиатура (USB) | | Клавиатура (USB) | ||
| | | Поддерживается ядром и драйвером. (см. http://board.kolibrios.org/viewtopic.php?f=30&t=1785, http://board.kolibrios.org/viewtopic.php?f=30&t=2305) | ||
|- | |- | ||
|rowspan="8" | Указательные (координатные) устройства с относительным указанием позиции (перемещения) | |rowspan="8" | Указательные (координатные) устройства с относительным указанием позиции (перемещения) | ||
Line 623: | Line 637: | ||
|- | |- | ||
| Мышь (USB) | | Мышь (USB) | ||
| Поддерживается драйвером | | Поддерживается ядром и драйвером. (см. http://board.kolibrios.org/viewtopic.php?f=30&t=1785, http://board.kolibrios.org/viewtopic.php?f=30&t=2305) | ||
|- | |- | ||
| Тачпад | | Тачпад | ||
Line 632: | Line 646: | ||
|- | |- | ||
| Трекпоинт | | Трекпоинт | ||
| | | Поддерживается ядром ОС | ||
|- | |- | ||
| Джойстик (LPT) | | Джойстик (LPT) | ||
Line 679: | Line 693: | ||
|- | |- | ||
| Принтер | | Принтер | ||
| | | Тестовая поддержка (см. http://board.kolibrios.org/viewtopic.php?f=30&t=2285) | ||
|- | |- | ||
| Графопостроитель | | Графопостроитель | ||
Line 686: | Line 700: | ||
|rowspan="3" | Устройства для вывода звука | |rowspan="3" | Устройства для вывода звука | ||
| Встроенный динамик | | Встроенный динамик | ||
| Поддерживается ядром ОС, также есть драйвер работающий с [ | | Поддерживается ядром ОС, также есть драйвер работающий с [http://ru.wikipedia.org/wiki/Слой_аппаратных_абстракций HAL] - драйвером Infinity. | ||
|- | |- | ||
| Колонки | | Колонки | ||
Line 701: | Line 715: | ||
Для контроля оборудования используются обработчики аппаратных прерываний ('''IRQ'''), '''порты''' ввода/вывода и '''MMIO''' (memory-mapped IO или "отображённые на память зоны ввода-вывода"), которые BIOS выделил для конкретного оборудования. Поскольку у каждого системного устройства имеется свой уникальный адрес на шине PCI, то и доступ к ним разумно осуществлять через эту шину. Следует заметить, что новый стандарт системной шины ''PCI Express'' совместим "с верху вниз" с PCI, что позволяет проводить детектирование и базовый контроль ввода-вывода PCIe-устройств помощью стандартного сервиса PCI КолибриОС. | Для контроля оборудования используются обработчики аппаратных прерываний ('''IRQ'''), '''порты''' ввода/вывода и '''MMIO''' (memory-mapped IO или "отображённые на память зоны ввода-вывода"), которые BIOS выделил для конкретного оборудования. Поскольку у каждого системного устройства имеется свой уникальный адрес на шине PCI, то и доступ к ним разумно осуществлять через эту шину. Следует заметить, что новый стандарт системной шины ''PCI Express'' совместим "с верху вниз" с PCI, что позволяет проводить детектирование и базовый контроль ввода-вывода PCIe-устройств помощью стандартного сервиса PCI КолибриОС. | ||
Как уже отмечалось, PCI устройства могут существенно отличаться друг от друга по используемым ресурсам и методам инициализации оборудования. Тем не менее, часть программно-доступных ресурсов является стандартной для всех устройств, что и позволяет точно идентифицировать имеющееся оборудование на шине. Прежде всего PCI устройство необходимо найти на шине, зайти в его [ | Как уже отмечалось, PCI устройства могут существенно отличаться друг от друга по используемым ресурсам и методам инициализации оборудования. Тем не менее, часть программно-доступных ресурсов является стандартной для всех устройств, что и позволяет точно идентифицировать имеющееся оборудование на шине. Прежде всего PCI устройство необходимо найти на шине, зайти в его [http://ru.wikipedia.org/wiki/Конфигурационное_пространство_PCI конфигурационное пространство] и обязательно проверить совпадение его вендора/версии с имеющимся шаблоном (иначе наш драйвер начнёт рулить каким-то совсем другим железом!), после чего можно приступать к диагностике и тонкой настройке режимов работы, подготавливая устройство для дальнейшей работы. Пример поиска оборудования на шине PCI см. в файле /drivers/sceleton.asm, этот файл является базой для многих новых драйверов. | ||
Системой | Системой поддерживается древний контроллер прерываний PIC, имеющий всего 16 линий запроса, при этом многие линии которого уже зарезервированы ядром. Также поддерживается контроллер прерываний APIC, включение поддержки которого требует некоторые [http://board.kolibrios.org/viewtopic.php?p=37822#p37822 дополнительные действия от пользователя]. | ||
Адреса | Адреса портов ввода-вывода и диапазонов MMIO содержатся в регистрах BAR0-BAR5 конфигурационного пространства PCI-устройства. Системный программист может узнать эти адреса только прочитав BAR-регистры: из драйвера - с помощью ''pci_read_reg'' (bus/pci/pci32.inc), из пользовательской программы - вызвав подфункцию 6 сисфункции 62. | ||
Чем отличаются порты от MMIO-памяти? Принципиально - ничем. И то, и другое служит для доступа к информационным шлюзам, связывающим ЦП с внешним миром. Есть некоторые нюансы электронной организации таких шлюзов (однотипные регистровые блоки имеет смысл упаковывать в MMIO, а уникальные - хранить в отдельных портах), но программисту можно этим не заморачиваться: с точки зрения программирования вся разница между этими ресурсами - в способе чтения и записи данных '''in/out''' для портов и '''mov''' для '''mmio'''. | Чем отличаются порты от MMIO-памяти? Принципиально - ничем. И то, и другое служит для доступа к информационным шлюзам, связывающим ЦП с внешним миром. Есть некоторые нюансы электронной организации таких шлюзов (однотипные регистровые блоки имеет смысл упаковывать в MMIO, а уникальные - хранить в отдельных портах), но программисту можно этим не заморачиваться: с точки зрения программирования вся разница между этими ресурсами - в способе чтения и записи данных '''in/out''' для портов и '''mov''' для '''mmio'''. | ||
Line 717: | Line 731: | ||
* Очень желательно смотреть исходный код драйверов нужного устройства для других ОС для понимания в общем и целом способов управления устройством | * Очень желательно смотреть исходный код драйверов нужного устройства для других ОС для понимания в общем и целом способов управления устройством | ||
* Уметь искать необходимую для разработки информацию, чем больше полезной информации тем лучше | * Уметь искать необходимую для разработки информацию, чем больше полезной информации тем лучше | ||
* Не будет лишним также общаться с другими разработчиками | * Не будет лишним также общаться с другими разработчиками драйверов, в случае возникновения сложных вопросов | ||
* Для просмотра списка устройств и их параметров на шине PCI, в Колибри есть специальное приложение '''pcidev'''. К примеру если устройство на которое вы пишете драйвер не может получить IRQ в своё монопольное распоряжение, то можно посмотреть какое ещё устройство получило это прерывание, чтобы исправить ситуацию. | * Для просмотра списка устройств и их параметров на шине PCI, в Колибри есть специальное приложение '''pcidev'''. К примеру если устройство на которое вы пишете драйвер не может получить IRQ в своё монопольное распоряжение, то можно посмотреть какое ещё устройство получило это прерывание, чтобы исправить ситуацию. | ||
[[Category:Системная документация]] | [[Category:Системная документация]] |
Latest revision as of 18:45, 20 March 2024
KolibriOS частично обеспечивает поддержку оборудования персонального компьютера. Часть оборудования поддерживается ядром ОС, часть динамически загружаемыми драйверами. Более того, система предоставляет возможность прямого доступа к оборудованию прямо из пользовательского режима, т.е. присутствует возможность написать программу, которая сможет работать с оборудованием используя соответствующий системный сервис. Правда, этот подход лучше использовать исключительно в отладочных или исследовательских целях, а для "нормальной" поддержки оборудования всё-таки лучше писать драйвера. Также нужно понимать, что существуют два вида драйверов:
- Драйвер, являющейся частью ядра, т.е. весь его код может находиться в отдельном модуле, но после компиляции ядра он станет частью кода ядра системы (например: hd_drv.inc).
- Драйвер, динамически подгружаемый в адресное пространство ядра уже после загрузки системы (например: sound.asm). Эти драйвера находятся в специальной системной директории (/rd/1/drivers/).
Состав аппаратного обеспечения ПК
В системном блоке основным элементом является материнская плата, а на ней находится сердце компьютера — центральный процессор (ЦПУ) и оперативная память (ОЗУ — оперативное запоминающее устроство). Наибольший интерес для программиста представляет Южный Мост — чип, обеспечивающий контроль над большинством оборудования. Существует также Северный Мост, посредством которого Южный Мост и связан с ЦПУ и ОЗУ (см. Северный и Южный интерфейс), но в этой статье он не будет подробно расписан ввиду его небольшой функциональности с точки зрения программиста.
Компоненты южного моста
Большинство устройств представлены в Южном Мосту в качестве так называемых контроллеров — программно-доступных электронных блоков, управляющих работой конкретного оборудования. Из-за огромного разнообразия, многофункциональности и слабой стандартизации современного компьютерного "железа" каждому такому контроллеру требуется уникальный драйвер — специальная системная программа, обеспечивающая инициализацию, конфигурирование, эффективное управление оборудованием в реальной системной среде и, самое главное, быстрый и надежный ввод/вывод потоков информации через данное устройство.
Функционально южный мост включает в себя:
- стандартный контроллер шины PCI;
- контроллер шины PCI Express;
- шина ISA, которая используется достаточно редко, но тем не менее остается неотъемлемой частью любого южного моста;
- контроллер шины SMBus или I2C для связи с другими устройствами на материнской плате (например, для управления вентиляторами);
- DMA контроллер с поддержкой древних ISA и LPC-протоколов прямого доступа к оперативной памяти без участия ЦПУ;
- контроллеры прерываний: старый PIC и "продвинутый" APIC;
- ATA (IDE) и SATA контроллеры;
- контроллер шины LPC для передачи данных и управления устройствами ввода/вывода (клавиатура, мышь, параллельный порт, последовательный порт, инфракрасный порт и флоппи-контроллер) и BIOS ROM;
- часы реального времени (Real Time Clock);
- управление питанием (Power management (APM и ACPI) позволяющие переводить компьютер в «спящий режим» или выключать его);
- энергонезависимую память BIOS (CMOS) с независимым электропитанием от батареи, включающая небольшую по область памяти для хранения системных настроек;
- звуковой контроллер (обычно AC'97 или Intel HDA).
Опционально южный мост также может включать в себя контроллер Ethernet, RAID-контроллеры, контроллеры USB, IEEE 1394 и аудиокодек.
Некоторые южные мосты также включают поддержку клавиатуры, мыши и последовательных портов. Однако, на многих системных платах эти устройства подключены через другой чип — Super I/O (контроллер ввода-вывода).
Возникает резонный вопрос: если все эти электронные фишки такие разные, как вообще возможен нормальный старт компьютера и загрузка операционной системы - ведь никаких драйверов в этот момент еще нет, а каждое устройство по-своему уникально и нестандартно?
Во-первых, кое-какая стандартизация всё-таки имеется. Пожалуй, главный и наиболее последовательный стандарт, общий для всех современных ПК-платформ - спецификация шины PCI, включающая единообразные средства идентификации, конфигурации и (в определенных рамках) диагностики устройств. Кроме него, имеется де-факто стандарт древней (legacy) архитектуры IBM PC/AT, низкоуровневая совместимость с которой до сих пор требуется от всех х86-платформ.
Во-вторых, существует ряд спецификаций базовой системы ввода-вывода BIOS, определяющих основные протоколы и структуры данных для работы с контроллерами устройств. После включения питания специальная программа POST (power-on self test) диагностирует и конфигурирует конкретное "железо" в соответствии с их требованиями; по завершении своей работы BIOS осуществляет загрузку операционной системы согласно BIOS Boot Specification.
Примитивный и медленный (но - надёжный и универсальный!) сервис BIOS в той или иной мере используется всеми операционными системами. Особенно велика его роль на этапе загрузки, пока ядро не успело обрасти драйверами и сконфигурировать свои собственные, быстрые и эффективные процедуры взаимодействия с имеющимся оборудованием.
Зависимость КолибриОС от сервиса BIOS очень высока, а специализированные системные драйверы - пока очень немногочисленны.
Поддержка аппаратного обеспечения в KolibriOS
Рассмотрим как же работает с оборудованием KolibriOS.
Список оборудования
Системные шины и интерфейсы передачи данных
Шина/Интерфейс | Поддержка в KolibriOS | Примечания |
---|---|---|
PCI | Поддерживается ядром ОС
(/kernel/bus/pci32.inc) |
|
PCI Express | В официальном ядре по умолчанию не поддерживается |
|
PCI-X | Не поддерживается | Работает в режиме совместимости как шина PCI. |
AGP | ограниченная поддержка | см. драйвер AGP, а также видеодрайвер ATIKMS |
ISA | ? | Драйвером звука поддерживается Creative SB16 (см ниже), также система запускалась с видеокартой ISA Trident TVGA9000B. |
EISA | ? | |
ASUS Media Bus | Не поддерживается | |
SMBus или I2C | Не поддерживается | |
LPC | Не поддерживается | |
USB | Поддерживается ядром и драйверами | Работа с UHCI/OHCI/EHCI. В настоящее время поддерживает клавиатуру, мышь, запоминающие устройства (mass storage). (До этого были только драйвера для UHCI, USB клавиатуры и мыши.) |
FireWire | Не поддерживается | |
HyperTransport | Официальным ядром не поддерживается | ограниченная поддержка в Kolibri-A |
InfiniBand | Не поддерживается | |
RapidIO | Не поддерживается | |
Fibre Channel | Не поддерживается | |
BlueTooth | Не поддерживается | |
IrDA | Не поддерживается | |
Wi-Fi | Не поддерживается | |
WiGig | Не поддерживается | |
Light Peak | Не поддерживается | |
Digital Visual Interface | Не поддерживается | |
DisplayPort | Не поддерживается | |
HDMI | ограниченная поддержка | см. видеодрайвера ATIKMS и i915 |
Порты
Порт | Поддержка в KolibriOS |
---|---|
PS2 | Поддерживается ядром ОС |
COM | Поддерживается ядром ОС |
LPT | Поддерживается ядром ОС |
SPI | Не поддерживается |
Game port | Не поддерживается |
UHCI | Поддерживается ядром и драйвером. (см. http://board.kolibrios.org/viewtopic.php?f=30&t=1785, http://board.kolibrios.org/viewtopic.php?f=30&t=2305) |
OHCI | Поддерживается ядром и драйвером. (см. http://board.kolibrios.org/viewtopic.php?f=30&t=1785, http://board.kolibrios.org/viewtopic.php?f=30&t=2305) |
EHCI | Поддерживается ядром и драйвером. (см. http://board.kolibrios.org/viewtopic.php?f=30&t=1785, http://board.kolibrios.org/viewtopic.php?f=30&t=2305) |
XHCI | Не поддерживается |
Устройства хранения информации
Контроллер | Устройство | Поддержка в KolibriOS | Примечания |
---|---|---|---|
IDE (ATA) | FDD | Поддерживается ядром ОС | (см. /kernel/blkdev/flp_drv.inc) |
CD/DVD | Поддерживается ядром ОС | (см. /kernel/blkdev/cd_drv.inc) | |
HDD/SSD | Поддерживается ядром ОС | (см. /kernel/blkdev/hd_drv.inc) | |
SATA | CD/DVD | Поддерживается ядром чтение в режиме IDE (ATAPI в PIO режиме) (http://board.kolibrios.org/viewtopic.php?f=1&t=2343). | В ряде случаев система может работать с SATA- и USB-дисками через BIOS Fn13h в виртуальном V86-режиме (скорость чтения/записи при этом оставляет желать лучшего). |
HDD | Поддерживается ядром чтение и запись в режиме IDE и SATA. Драйвер AHCI (SATA) реализован в kernel/blkdev/ahci.inc | ||
USB | FDD | ? | |
CD/DVD | Не поддерживается | ||
HDD/SSD | Поддерживается ядром и драйвером. (см. http://board.kolibrios.org/viewtopic.php?f=30&t=1785, http://board.kolibrios.org/viewtopic.php?f=30&t=2305) | ||
FlashDrive | Поддерживается ядром и драйвером. (см. http://board.kolibrios.org/viewtopic.php?f=30&t=1785, http://board.kolibrios.org/viewtopic.php?f=30&t=2305) | ||
FlashCard | Поддерживается ядром и драйвером. (см. http://board.kolibrios.org/viewtopic.php?f=30&t=1785, http://board.kolibrios.org/viewtopic.php?f=30&t=2305) | ||
RAID | HDD | ? |
Системные устройства
Устройство | Поддержка в KolibriOS |
---|---|
Контроллер прерываний PIC | Поддерживается ядром ОС |
Контроллер прерываний APIC | Поддерживается ядром ОС (по умолчанию код включен только в ветке Kolibri-ACPI) |
Контроллер DMA | Поддерживается ядром ОС |
Часы реального времени (Real Time Clock) | Поддерживается ядром ОС |
Энергонезависимая память BIOS (CMOS) | Поддерживается ядром ОС |
Управление питанием
Стандарт | Поддержка в KolibriOS |
---|---|
APM | Поддерживается ядром ОС |
ACPI | Драйвером ACPICA (по умолчанию код включен в ветке Kolibri-ACPI) |
Аудио
Поддерживается только аудио перечисленное в данной таблице.
Стандарт | Производитель | Чипсет | Примечание |
---|---|---|---|
AC97 | Intel Corporation | ICH0 | Звуковой контроллер AC97 - поддерживается драйверами соответствующих устройств. Поскольку AC97 стандарт стандартизует только функции кодека и AC-Link, отвечающего за взаимодействие контроллера и кодека, то для различных контроллеров AC97 требуются разные драйвера. |
ICH1 | |||
ICH2 | |||
ICH3 | |||
ICH4 | |||
ICH5 | |||
ICH6 | |||
NVidia | NForce | ||
NForce2 | |||
NForce3 | |||
NForce4 | |||
NForce500 | |||
Silicon Integrated Systems | SIS7012 | ||
AMD | CS5536 | ||
ForteMedia | FM801 | ||
VIA Technologies | VT8231 | ||
VT8233 | |||
VT8233C | |||
VT8235 | |||
VT8237 | |||
VT8237R | |||
VT8237R Plus | |||
Creative | EMU10K1X | Находится не на материнской плате компьютера, а на отдельной аудиокарте, которая вставляется в слот расширения PCI | |
HDA | Работа над драйвером ведётся в настоящее время (см. HDA). Драйвер работает на большинстве тестовых систем. | ||
SB16 | Creative | SoundBlaster16 | Находится не на материнской плате компьютера, а на отдельной аудиокарте, которая вставляется в слот расширения ISA |
SoundBlaster16 ASP | |||
SoundBlaster16 PnP |
Видео
Производитель(Стандарт) | Поддержка в KolibriOS | Примечания |
---|---|---|
VESA | Поддерживается ядром ОС | Поддерживается абсолютным большинством современных компьютеров. |
VGA | Поддерживается ядром ОС | |
AMD | Драйвером для всех моделей ATI Radeon. | Поддерживаются аппаратный курсор мыши, смена видеорежимов и акселерация двумерной графики. |
NVidia | Не поддерживается | |
Intel | Драйвером i915. | Поддерживаются аппаратный курсор мыши, смена видеорежимов и акселерация двумерной графики. Также есть драйвер для установки "родного" разрешения для ноутбуков. |
VIA | Не поддерживается |
Сетевые контроллеры
В настоящее время контроллеры Ethernet поддерживаются драйверами в составе ядра ОС,
но ведётся активная работа по выносу кода в динамически подгружаемые драйвера
и созданию нового сетевого стека в рамках Net ветки KolibriOS. В данной таблице перечислены сетевые контроллеры, поддерживаемые системой в настоящее время.
Производитель | Устройство | Примечания |
---|---|---|
3Com Corporation | 3c59x | |
3c900 | ||
3c905 | ||
3c980 | ||
3cSOHO100 | ||
3c555 | ||
3c556 | ||
3c595 | ||
3c575 | ||
3cCFE575BT | ||
3cCFE575CT | ||
3cCFE656 | ||
3c450 | ||
RDC Semiconductor Co. | r6040 | 10/100 Mbit PCI controller |
Realtek Semiconductor Co., Ltd. | rtl8029 | RTL-8029(AS) |
rtl8139 | RTL-8139/8139C/8139C+, RT8139 (B/C) Cardbus Fast Ethernet Adapter | |
rtl8168 | RTL8111/8168B PCI Express Gigabit Ethernet controller (rtl8169) | |
rtl8167 | RTL-8169 Gigabit Ethernet, RTL-8110SC/8169SC Gigabit Ethernet | |
rtl8169 | RTL-8169 Gigabit Ethernet, RTL-8110SC/8169SC Gigabit Ethernet | |
Accton Technology Corporation | SMC2-1211TX | (rtl8139) |
DELTA Electronics, Inc | RTL81xx | RealTek Ethernet (rtl8139) |
Addtron Technology Co, Inc. | RTL8139 | Ethernet (rtl8139) |
D-Link System Inc | RTL8139 Ethernet | (rtl8139) |
DGE-528T | Gigabit Ethernet Adapter (rtl8169) | |
DFE-690TXD | CardBus PC Card (rtl8139) | |
Abocom Systems Inc | RTL8139 (FE2000VX) | CardBus Fast Ethernet Attached Port Adapter (rtl8139) |
Allied Telesyn International | RTL81xx | Fast Ethernet (rtl8139) |
Planex Communications, Inc | FNW-3603-TX | CardBus Fast Ethernet (rtl8139) |
RTL81xx | RealTek Ethernet (rtl8139) | |
Sega Enterprises Ltd | RTL81xx | Fast Ethernet (rtl8139) |
Edimax Computer Co. | RTL81xx | Fast Ethernet (rtl8139) |
SpeedStream | 1012 PCMCIA 10/100 Ethernet Card (RTL81xx) | (rtl8139) |
LevelOne | FPC-0106TX misprogrammed (RTL81xx) | (rtl8139) |
Northern Telecom | 10/100BaseTX (RTL81xx) | (rtl8139) |
Peppercon AG | ROL/F-100 Fast Ethernet Adapter with ROL | (rtl8139) |
Compaq Computer Corporation | HNE-300 | (RealTek RTL8139c) (iPaq Networking) (rtl8139) |
U.S. Robotics | USR997902 | 10/100/1000 Mbps PCI Network Card (rtl8169) |
Intel Corporation | i8255x | |
i82562 | ||
i82801 | ||
Silicon Integrated Systems | SIS900 | |
SIS7016 | ||
AMD | 79c970 | pcnet32 (PCnet32 LANCE) |
79c978 | pcnet32 (HomePNA) | |
NVidia | NForce | |
NForce2 | ||
NForce3 | ||
MCP2A | ||
CK8S | ||
CK804 | ||
MCP04 | ||
MCP51 | ||
MCP55 | ||
MCP61 | ||
MCP65 | ||
MCP67 | ||
MCP73 | ||
MCP77 | ||
MCP79 | ||
MCP89 |
Устройства ввода
Тип устройства | Устройство | Поддержка в KolibriOS |
---|---|---|
Устройства ввода графической информации | Сканер | Не поддерживается |
Видео- и Веб-камера | Не поддерживается | |
Цифровой фотоаппарат | Не поддерживается | |
Плата видеозахвата | Не поддерживается | |
Устройства ввода звука | Микрофон | Не поддерживается |
Цифровой диктофон | Не поддерживается | |
Модем | Поддерживается ядром ОС | |
Устройства ввода текстовой информации | Клавиатура (PS/2) | Поддерживается ядром ОС |
Клавиатура (USB) | Поддерживается ядром и драйвером. (см. http://board.kolibrios.org/viewtopic.php?f=30&t=1785, http://board.kolibrios.org/viewtopic.php?f=30&t=2305) | |
Указательные (координатные) устройства с относительным указанием позиции (перемещения) | Мышь (PS/2) | Поддерживается ядром ОС |
Мышь (Com) | Поддерживается драйвером | |
Мышь (USB) | Поддерживается ядром и драйвером. (см. http://board.kolibrios.org/viewtopic.php?f=30&t=1785, http://board.kolibrios.org/viewtopic.php?f=30&t=2305) | |
Тачпад | Поддерживается ядром ОС в режиме эмуляции мыши (PS/2) | |
Трекбол | ? | |
Трекпоинт | Поддерживается ядром ОС | |
Джойстик (LPT) | Поддерживается драйвером | |
Джойстик (USB) | Не поддерживается | |
Указательные (координатные) устройства с возможностью указания абсолютной позиции | Графический планшет | Не поддерживается |
Световое перо | Не поддерживается | |
Игровые устройства ввода | Педаль | Не поддерживается |
Геймпад | Не поддерживается | |
Руль | Не поддерживается | |
Рычаг для симуляторов полёта | Не поддерживается | |
Устройства ввода общего назначения | Сенсорный экран | Не поддерживается |
Устройства вывода
Тип устройства | Устройство | Поддержка в KolibriOS |
---|---|---|
Устройства вывода графической информации | Монитор (дисплей) | Поддерживаются видеодрайверами |
Проектор | Не поддерживается | |
Принтер | Тестовая поддержка (см. http://board.kolibrios.org/viewtopic.php?f=30&t=2285) | |
Графопостроитель | Не поддерживается | |
Устройства для вывода звука | Встроенный динамик | Поддерживается ядром ОС, также есть драйвер работающий с HAL - драйвером Infinity. |
Колонки | Поддерживаются аудиодрайверами | |
Наушники | Поддерживаются аудиодрайверами. |
Ресурсы предоставляемые системой для контроля оборудования
Для контроля оборудования используются обработчики аппаратных прерываний (IRQ), порты ввода/вывода и MMIO (memory-mapped IO или "отображённые на память зоны ввода-вывода"), которые BIOS выделил для конкретного оборудования. Поскольку у каждого системного устройства имеется свой уникальный адрес на шине PCI, то и доступ к ним разумно осуществлять через эту шину. Следует заметить, что новый стандарт системной шины PCI Express совместим "с верху вниз" с PCI, что позволяет проводить детектирование и базовый контроль ввода-вывода PCIe-устройств помощью стандартного сервиса PCI КолибриОС.
Как уже отмечалось, PCI устройства могут существенно отличаться друг от друга по используемым ресурсам и методам инициализации оборудования. Тем не менее, часть программно-доступных ресурсов является стандартной для всех устройств, что и позволяет точно идентифицировать имеющееся оборудование на шине. Прежде всего PCI устройство необходимо найти на шине, зайти в его конфигурационное пространство и обязательно проверить совпадение его вендора/версии с имеющимся шаблоном (иначе наш драйвер начнёт рулить каким-то совсем другим железом!), после чего можно приступать к диагностике и тонкой настройке режимов работы, подготавливая устройство для дальнейшей работы. Пример поиска оборудования на шине PCI см. в файле /drivers/sceleton.asm, этот файл является базой для многих новых драйверов.
Системой поддерживается древний контроллер прерываний PIC, имеющий всего 16 линий запроса, при этом многие линии которого уже зарезервированы ядром. Также поддерживается контроллер прерываний APIC, включение поддержки которого требует некоторые дополнительные действия от пользователя.
Адреса портов ввода-вывода и диапазонов MMIO содержатся в регистрах BAR0-BAR5 конфигурационного пространства PCI-устройства. Системный программист может узнать эти адреса только прочитав BAR-регистры: из драйвера - с помощью pci_read_reg (bus/pci/pci32.inc), из пользовательской программы - вызвав подфункцию 6 сисфункции 62. Чем отличаются порты от MMIO-памяти? Принципиально - ничем. И то, и другое служит для доступа к информационным шлюзам, связывающим ЦП с внешним миром. Есть некоторые нюансы электронной организации таких шлюзов (однотипные регистровые блоки имеет смысл упаковывать в MMIO, а уникальные - хранить в отдельных портах), но программисту можно этим не заморачиваться: с точки зрения программирования вся разница между этими ресурсами - в способе чтения и записи данных in/out для портов и mov для mmio.
Что необходимо для того, чтобы написать драйвер
Больше всего потребуется непреклонное желание добиться поставленной цели не смотря ни на какие сложности возникающие по ходу работы, это может быть основное, что вам понадобиться, как в принципе и при решении любой другой задачи. Кроме этого вам необходимо:
- Прочитать статью "Пишем драйвер для КолибриОС". В статье говорится о написании драйверов в формате MS COFF.
Кроме этого система позволяет писать драйвера в формате PE. Также для сведения, в рамках ветки Kolibri-ACPI создается новая драйверная архитектура (тема на форуме). - Достать спецификацию (datasheet) на конкретный Южный Мост и/или конкретное устройство на которое пишется драйвер.
Например на форуме KolibriOS. - Если уже существуют в Колибри драйвера аналогичных устройств, то неплохо было бы почитать их код (посмотреть "как это делается")
- Очень желательно смотреть исходный код драйверов нужного устройства для других ОС для понимания в общем и целом способов управления устройством
- Уметь искать необходимую для разработки информацию, чем больше полезной информации тем лучше
- Не будет лишним также общаться с другими разработчиками драйверов, в случае возникновения сложных вопросов
- Для просмотра списка устройств и их параметров на шине PCI, в Колибри есть специальное приложение pcidev. К примеру если устройство на которое вы пишете драйвер не может получить IRQ в своё монопольное распоряжение, то можно посмотреть какое ещё устройство получило это прерывание, чтобы исправить ситуацию.