Hardware Support/ru: Difference between revisions

From KolibriOS wiki
Jump to navigation Jump to search
mNo edit summary
(→‎Список оборудования: Table format of hardware list.)
Line 48: Line 48:


=== Список оборудования ===
=== Список оборудования ===
* Контроллер шины PCI - поддерживается ядром ОС на вполне удовлетворительном уровне(kernel/bus/pci32.inc)
'''Системные шины и интерфейсы передачи данных'''
* Контроллер шины PCI Express - прямой поддержки нет; однако для AMD-процессоров реализовано определение важнейшей PCIe-фичи: адреса расширенного конфигурационного пространства. Для других процессоров этот адрес можно установить вручную (см. kernel/bus/PCIe.inc)
{| class="wikitable" border="1"
* Контроллер шины PCI-X - не поддерживается
! Шина/Интерфейс
* Контроллер шины SMBus или I2C - не поддерживается
! Поддержка в KolibriOS
* DMA контроллер - поддерживается ядром ОС
! Примечания
* Контроллер прерываний PIC - поддерживается ядром ОС
|-
* Контроллер прерываний APIC - не поддерживается
| PCI
* Контроллер PATA (IDE) - поддерживается драйверами соответствующих устройств в ядре (папка /kernel/blkdev).
| Поддерживается ядром ОС
Системой поддерживаются следующие IDE устройства:
| (см. /kernel/bus/pci32.inc)
*Floppy привод (flp_drv.inc)
|-
*CD/DVD привод (cd_drv.inc)
| PCI Express
*HDD привод (hd_drv.inc)
| Частично поддерживается ядром ОС
| Для AMD-процессоров реализовано определение важнейшего свойства PCIe: адреса расширенного конфигурационного пространства. Для других процессоров этот адрес можно установить вручную. (см. kernel/bus/PCIe.inc) Работает в режиме совместимости как шина PCI.
|-
| PCI-X
| Не поддерживается
| Работает в режиме совместимости как шина PCI.
|-
| AGP
| ?
|
|-
| ISA
| ?
|
|-
| EISA
| ?
|
|-
| ASUS Media Bus
| Не поддерживается
|
|-
| SMBus или I2C
| Не поддерживается
|
|-
| LPC
| Не поддерживается
|
|-
| USB
| Поддерживается драйвером
| Только для UHCI
|-
| FireWire
| Не поддерживается
|
|-
| HyperTransport
| Не поддерживается
|
|-
| InfiniBand
| Не поддерживается
|
|-
| RapidIO
| Не поддерживается
|
|-
| Fibre Channel
| Не поддерживается
|
|-
| BlueTooth
| Не поддерживается
|
|-
| IrDA
| Не поддерживается
|
|-
| Wi-Fi
| Не поддерживается
|
|-
| WiGig
| Не поддерживается
|
|-
| Light Peak
| Не поддерживается
|
|-
| Digital Visual Interface
| Не поддерживается
|
|-
| DisplayPort
| Не поддерживается
|
|-
| HDMI
| Не поддерживается
|
|}


* SATA контроллеры - системой не поддерживаются; однако в ряде случаев система может работать с SATA- и USB-дисками через BIOS Fn13h в виртуальном V86-режиме (скорость чтения/записи при этом оставляет желать лучшего).
'''Порты'''
* Контроллер шины LPC - не поддерживается
{| class="wikitable" border="1"
* Часы реального времени (Real Time Clock) - поддерживается ядром ОС
! Порт
* Управление питанием APM  - поддерживается ядром ОС  
! Поддержка в KolibriOS
* Управление питанием ACPI  - поддерживается драйвером ACPICA
|-
* Энергонезависимая память BIOS (CMOS) - поддерживается ядром ОС  
| PS2
* Звуковой контроллер AC97 - поддерживается драйверами соответствующих устройств. Поскольку AC97 стандарт стандартизует только функции кодека и AC-Link, отвечающего за взаимодействие контроллера и кодека, то для различных контроллеров AC97 требуются разные драйвера. В настоящее время система поддерживает контроллеры следующих Южных Мостов:
| Поддерживается ядром ОС
**Intel Corporation
|-
***ICH0
| COM
***ICH1
| Поддерживается ядром ОС
***ICH2
|-
***ICH3
| LPT
***ICH4
| Поддерживается ядром ОС
***ICH5
|-
***ICH6
| SPI
**NVidia
| Не поддерживается
***NForce
|-
***NForce2
| Game port
***NForce3
| Не поддерживается
***NForce4
|-
***NForce 500
| UHCI
**Silicon Integrated Systems
| Поддерживается драйвером
***SIS7012
|-
**ForteMedia
| OHCI
***FM801
| Не поддерживается
**VIA
|-
***VT8231
| EHCI
***VT8233
| Не поддерживается
***VT8233C
|-
***VT8235
| XHCI
***VT8237
| Не поддерживается
***VT8237R
|}
***VT8237R Plus
Также контроллер AC97 и аудиокодек могут находиться не на материнской плате компьютера, а на внешней аудиокарте, которая вставляется в слот расширения PCI или ISA.
Поддерживаются следующие ISA аудиокарты:
*Creative
**Sound Blaster 16
**Sound Blaster 16 ASP
**Sound Blaster 16 PnP
Поддерживаются следующие PCI аудиокарты:
*Creative
**EMU10K1X


* Звуковой контроллер Intel HDA - системой пока не поддерживается, работа над драйвером ведётся в настоящее время.
'''Устройства хранения информации'''
* Контроллер USB - частичная поддержка, с помощью драйвера. Поддерживается работа с контроллером, а также с мышью.
{| class="wikitable" border="1"
* Контроллер FireWire - не поддерживается  
! Контроллер
* Контроллер RAID - не поддерживается  
! Устройство
* Последовательный порт - поддерживается ядром ОС
! Поддержка в KolibriOS
* Параллельный порт  - поддерживается ядром ОС
! Примечания
|-
|rowspan="3" | IDE (ATA)
| FDD
| Поддерживается ядром ОС
| (см. /kernel/blkdev/flp_drv.inc)
|-
| CD/DVD
| Поддерживается ядром ОС
| (см. /kernel/blkdev/cd_drv.inc)
|-
| HDD
| Поддерживается ядром ОС
| (см. /kernel/blkdev/hd_drv.inc)
|-
|rowspan="2" | SATA
| CD/DVD
| Не поддерживается
|rowspan="6" | В ряде случаев система может работать с SATA- и USB-дисками через BIOS Fn13h в виртуальном V86-режиме (скорость чтения/записи при этом оставляет желать лучшего).
|-
| HDD
| Не поддерживается
|-
|rowspan="4" | USB
| CD/DVD
| Не поддерживается
|-
| SSD
| Не поддерживается
|-
| FlashDrive
| Не поддерживается
|-
| FlashCard
| Не поддерживается
|-
| RAID
| HDD
| ?
|
|}


'''Системные устройства'''
{| class="wikitable" border="1"
! Устройство
! Поддержка в KolibriOS
|-
| Контроллер прерываний PIC
| Поддерживается ядром ОС
|-
| Контроллер прерываний APIC
| Поддерживается ядром ОС (по умолчанию код включен только в ветке Kolibri-ACPI)
|-
| Контроллер DMA
| Поддерживается ядром ОС
|-
| Часы реального времени (Real Time Clock)
| Поддерживается ядром ОС
|-
| Энергонезависимая память BIOS (CMOS)
| Поддерживается ядром ОС
|}


* Контроллеры Ethernet - в настоящее время поддерживаются драйверами в составе ядра ОС, но ведётся активная работа по выносу кода в динамически подгружаемые драйвера и созданию нового сетевого стека в рамках Net ветки KolibriOS. В настоящее время системой поддерживаются следующие сетевые контроллеры:
'''Управление питанием'''
**3Com Corporation
{| class="wikitable" border="1"
***3c59x
! Стандарт
***3c900
! Поддержка в KolibriOS
***3c905
|-
***3c980
| APM
***3cSOHO100
| Поддерживается ядром ОС
***3c555
|-
***3c556
| ACPI
***3c595
| Драйвером ACPICA (по умолчанию код включен в ветке Kolibri-ACPI)
***3c575
|}
***3cCFE575BT
***3cCFE575CT
***3cCFE656
***3c450
**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)
***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
***i82801
**Silicon Integrated Systems
***SIS900
***SIS7016
**AMD
***pcnet32 (79c970 (PCnet32 LANCE), 79c978 (HomePNA))
**NVidia
***NForce
***NForce2
***NForce3
***MCP2A
***CK8S
***CK804
***MCP04
***MCP51
***MCP55
***MCP61
***MCP65
***MCP67
***MCP73
***MCP77
***MCP79
***MCP89


* Устройства ввода - поддерживаются либо ядром ОС, либо драйверами, либо не поддерживаются.
'''Аудио'''
**Устройства ввода графической информации
***Сканер - не поддерживается
***Видео- и Веб-камера - не поддерживается
***Цифровой фотоаппарат - не поддерживается
***Плата видеозахвата - не поддерживается
**Устройства ввода звука
***Микрофон - не поддерживается
***Цифровой диктофон - не поддерживается
***Модем - поддерживается ядром ОС
**Устройства ввода текстовой информации
***Клавиатура (PS/2) - поддерживается ядром ОС
***Клавиатура (USB) - не поддерживается
**Указательные (координатные) устройства с относительным указанием позиции (перемещения)
***Мышь (PS/2) - поддерживается ядром ОС
***Мышь (Com) - поддерживается драйвером
***Мышь (USB) - поддерживается драйвером
***Тачпад - поддерживается ядром ОС в режиме эмуляции мыши (PS/2)
***Трекбол - ?
***Трекпоинт - ?
***Джойстик (LPT) - поддерживается драйвером
***Джойстик (USB) - не поддерживается
**Указательные (координатные) устройства с возможностью указания абсолютной позиции
***Графический планшет - не поддерживается
***Световое перо - не поддерживается
**Игровые устройства ввода
***Педаль - не поддерживается
***Геймпад - не поддерживается
***Руль - не поддерживается
***Рычаг для симуляторов полёта - не поддерживается
**Устройства ввода общего назначения
***Сенсорный экран - не поддерживается


* Устройства вывода - поддерживаются либо ядром ОС, либо драйверами, либо не поддерживаются.
  Поддерживается только аудио перечисленное в данной таблице.
**Устройства вывода графической информации
{| class="wikitable" border="1"
***Монитор (дисплей) - поддерживаются видеодрайверами
! Стандарт
***Проектор - не поддерживается
! Производитель
***Принтер - не поддерживается
! Чипсет
***Графопостроитель - не поддерживается
! Примечание
**Устройства для вывода звука
|-
***Встроенный динамик - поддерживается ядром ОС, также есть драйвер работающий с [[HAL]] - драйвером [[Infinity]].
|rowspan="22" | AC97
***Колонки - поддерживаются аудиодрайверами.
|rowspan="7" | Intel Corporation
***Наушники - поддерживаются аудиодрайверами.
| ICH0
|rowspan="21" | Звуковой контроллер AC97 - поддерживается драйверами соответствующих устройств. Поскольку AC97 стандарт стандартизует только функции кодека и AC-Link, отвечающего за взаимодействие контроллера и кодека, то для различных контроллеров AC97 требуются разные драйвера.
|-
| ICH1
|-
| ICH2
|-
| ICH3
|-
| ICH4
|-
| ICH5
|-
| ICH6
|-
|rowspan="5" | NVidia
| NForce
|-
| NForce2
|-
| NForce3
|-
| NForce4
|-
| NForce500
|-
| Silicon Integrated Systems
| SIS7012
|-
| ForteMedia
| FM801
|-
|rowspan="7" | VIA Technologies
| VT8231
|-
| VT8233
|-
| VT8233C
|-
| VT8235
|-
| VT8237
|-
| VT8237R
|-
| VT8237R Plus
|-
|-
| Creative
| EMU10K1X
| Находится не на материнской плате компьютера, а на отдельной аудиокарте, которая вставляется в слот расширения PCI
|-
| HDA
|
|
| Системой пока не поддерживается, работа над драйвером ведётся в настоящее время.
|-
|rowspan="3" | SB16
|rowspan="3" | Creative
| SoundBlaster16
|rowspan="3" | Находится не на материнской плате компьютера, а на отдельной аудиокарте, которая вставляется в слот расширения ISA
|-
| SoundBlaster16 ASP
|-
| SoundBlaster16 PnP
|}


* Видеокарты - поддерживаются драйверами. Следует отметить, что основным видеодрайвером Колибри является драйвер стандартизованной графики [[VESA]], которая поддерживается абсолютным большинством современных компьютеров. Если VESA не поддерживается, то можно также воспользовать [[VGA]] видеодрайвером. Поддержка VESA и VGA осуществляется ядром ОС. Но есть возможность использовать также специализированные драйвера для видеокарт. Первым и на настоящее время единственным специализированным видеодрайвером в Колибри является драйвер для всех моделей '''ATI Radeon''', который поддерживает аппаратный курсор мыши, смену видеорежимом и акселерацию двумерной графики.
'''Видео'''
{| class="wikitable" border="1"
! Производитель(Стандарт)
! Поддержка в KolibriOS
! Примечания
|-
| VESA
| Поддерживается ядром ОС
| Поддерживается абсолютным большинством современных компьютеров.
|-
| VGA
| Поддерживается ядром ОС
|
|-
| AMD
| Драйвером для всех моделей ATI Radeon.
| Поддерживаются аппаратный курсор мыши, смена видеорежимов и акселерация двумерной графики.
|-
| NVidia
| Не поддерживается
|
|-
| Intel
| Не поддерживается
|
|-
| VIA
| Не поддерживается
|
|}
 
'''Сетевые контроллеры'''
  В настоящее время контроллеры Ethernet поддерживаются драйверами в составе ядра ОС,<br> но ведётся активная работа по выносу кода в динамически подгружаемые драйвера<br> и созданию нового сетевого стека в рамках Net ветки KolibriOS.
  В данной таблице перечислены сетевые контроллеры, поддерживаемые системой в настоящее время.
{| class="wikitable" border="1"
! Производитель
! Устройство
! Примечания
|-
|rowspan="13" | 3Com Corporation
| 3c59x
|
|-
| 3c900
|
|-
| 3c905
|
|-
| 3c980
|
|-
| 3cSOHO100
|
|-
| 3c555
|
|-
| 3c556
|
|-
| 3c595
|
|-
| 3c575
|
|-
| 3cCFE575BT
|
|-
| 3cCFE575CT
|
|-
| 3cCFE656
|
|-
| 3c450
|
|-
|rowspan="4" | 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)
|-
| 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)
|-
|rowspan="3" | 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)
|-
|rowspan="2" | 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)
|-
|rowspan="2" | Intel Corporation
| i8255x
|
|-
| i82801
|
|-
|rowspan="2" | Silicon Integrated Systems
| SIS900
|
|-
| SIS7016
|
|-
|rowspan="2" | AMD
| 79c970
| pcnet32 (PCnet32 LANCE)
|-
| 79c978
| pcnet32 (HomePNA)
|-
|rowspan="16" | NVidia
| NForce
|
|-
| NForce2
|
|-
| NForce3
|
|-
| MCP2A
|
|-
| CK8S
|
|-
| CK804
|
|-
| MCP04
|
|-
| MCP51
|
|-
| MCP55
|
|-
| MCP61
|
|-
| MCP65
|
|-
| MCP67
|
|-
| MCP73
|
|-
| MCP77
|
|-
| MCP79
|
|-
| MCP89
|
|-
|}
 
 
'''Устройства ввода'''
{| class="wikitable" border="1"
! Тип устройства
! Устройство
! Поддержка в KolibriOS
|-
|rowspan="4" | Устройства ввода графической информации
| Сканер
| Не поддерживается
|-
| Видео- и Веб-камера
| Не поддерживается
|-
| Цифровой фотоаппарат
| Не поддерживается
|-
| Плата видеозахвата
| Не поддерживается
|-
|rowspan="3" | Устройства ввода звука
| Микрофон
| Не поддерживается
|-
| Цифровой диктофон
| Не поддерживается
|-
| Модем
| Поддерживается ядром ОС
|-
|rowspan="2" | Устройства ввода текстовой информации
| Клавиатура (PS/2)
| Поддерживается ядром ОС
|-
| Клавиатура (USB)
| Не поддерживается
|-
|rowspan="8" | Указательные (координатные) устройства с относительным указанием позиции (перемещения)
| Мышь (PS/2)
| Поддерживается ядром ОС
|-
| Мышь (Com)
| Поддерживается драйвером
|-
| Мышь (USB)
| Поддерживается драйвером
|-
| Тачпад
| Поддерживается ядром ОС в режиме эмуляции мыши (PS/2)
|-
| Трекбол
| ?
|-
| Трекпоинт
| ?
|-
| Джойстик (LPT)
| Поддерживается драйвером
|-
| Джойстик (USB)
| Не поддерживается
|-
|rowspan="2" | Указательные (координатные) устройства с возможностью указания абсолютной позиции
| Графический планшет
| Не поддерживается
|-
| Световое перо
| Не поддерживается
|-
|rowspan="4" | Игровые устройства ввода
| Педаль
| Не поддерживается
|-
| Геймпад
| Не поддерживается
|-
| Руль
| Не поддерживается
|-
| Рычаг для симуляторов полёта
| Не поддерживается
|-
| Устройства ввода общего назначения
| Сенсорный экран
| Не поддерживается
|}
 
'''Устройства вывода'''
{| class="wikitable" border="1"
! Тип устройства
! Устройство
! Поддержка в KolibriOS
|-
|rowspan="4" | Устройства вывода графической информации
| Монитор (дисплей)
| Поддерживаются видеодрайверами
|-
| Проектор
| Не поддерживается
|-
| Принтер
| Не поддерживается
|-
| Графопостроитель
| Не поддерживается
|-
|rowspan="3" | Устройства для вывода звука
| Встроенный динамик
| Поддерживается ядром ОС, также есть драйвер работающий с [[HAL]] - драйвером [[Infinity]].
|-
| Колонки
| Поддерживаются аудиодрайверами
|-
| Наушники
| Поддерживаются аудиодрайверами.
|}


=== Ресурсы предоставляемые системой для контроля оборудования ===
=== Ресурсы предоставляемые системой для контроля оборудования ===

Revision as of 00:20, 2 November 2010

KolibriOS частично обеспечивает поддержку оборудования персонального компьютера. Часть оборудования поддерживается ядром ОС, часть динамически загружаемыми драйверами, мало того система предоставляет возможность прямого доступа к оборудованию прямо из пользовательского режима! Т.е. вы можете написать программу, которая сможет работать с оборудованием используя соответсвующий системный сервис. Правда этот подход лучше использовать исключительно в отладочных или исследовательских целях, а для "нормальной" поддержки оборудования всё-таки писать драйвера. Также нужно понимать, что существуют два вида драйверов:

  • Драйвер являющейся частью ядра, т.е. весь его код может находиться в отдельном модуле, но после компиляции ядра он станет частью кода ядра системы (например: hd_drv.inc).
  • Драйвер динамически подгружаемый в адресное пространство ядра уже после загрузки системы (например: sound.asm), эти драйвера находятся в специальной системной директории (/rd/1/drivers/).

Состав аппаратного обеспечения ПК

Итак из чего же состоит компьютер? Большинство пользователей, вспомнив уроки информатики, тут же назовут: системный блок, монитор, клавиатура, мышь. Многие подумав добавят HDD, CD/DVD, Floppy приводы, видео, аудио и сетевую карты. А если заглянуть поглубже?

В системном блоке основным элементом является материнская плата, а на ней находится сердце компьютера - центральный процессор (ЦПУ) и оперативная память (ОП). Программиста же решившего написать драйвер для поддержки какого-то устройства в KolibriOS, больше всего заинтересует Южный Мост, чип где сходятся большинство ниточек, контролирующих оборудование. Существует также Северный Мост, посредством которого Южный Мост и связан с ЦПУ и ОП, но его мы пока подробно рассматривать не будем ввиду его небольшой функциональности с точки зрения программиста.

Компоненты южного моста

Большинство устройств представлены в Южном Мосту в качестве так называемых контроллеров - программно-доступных электронных блоков, управляющих работой конкретного оборудования. Из-за огромного разнообразия, многофункциональности и слабой стандартизации современного компьютерного "железа", каждому такому контроллеру требуется уникальный драйвер - специальная системная программа, обеспечивающая инициализацию, конфигурирование, эффективное управление оборудованием в реальной системной среде, и (самое главное!-) быстрый и надежный ввод/вывод потоков информации через данное устройство.

Функционально южный мост включает в себя:

  • стандартный контроллер шины PCI;
  • контроллер шины PCI Express;
  • шина ISA, которая используется достаточно редко, но тем не менее остается неотъемлемой частью любого южного моста.
  • контроллер шины SMBus или I2C для связи с другими устройствами на материнской плате (например, для управления вентиляторами);
  • DMA контроллер с поддержкой древних ISA и LPC-протоколов прямого доступа к оперативной памяти без участия ЦПУ;
  • контроллеры прерываний: старый PIC и "продвинутый" APIC;
  • ATA (IDE) и SATA контроллеры;
  • контроллер шины LPC для передачи данных и управления SIO (это такие устройства, как клавиатура, мышь, параллельный, последовательный порт, инфракрасный порт и флоппи-контроллер) и BIOS ROM (флэш);
  • часы реального времени (Real Time Clock);
  • управление питанием (Power management (APM и ACPI) позволяющие переводить компьютер в «спящий режим» или выключать его;
  • энергонезависимую память BIOS (CMOS) с независимым электропитанием от батареи, включающая небольшую по область памяти для хранения системных настроек;
  • звуковой контроллер (обычно AC97 или Intel HDA).

Опционально южный мост также может включать в себя контроллер Ethernet, RAID-контроллеры, контроллеры USB, FireWire и аудио-кодек.

Некоторые южные мосты также включают поддержку клавиатуры, мыши и последовательных портов. Однако, на многих системных платах эти устройства подключены через другой чип — 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 Частично поддерживается ядром ОС Для AMD-процессоров реализовано определение важнейшего свойства PCIe: адреса расширенного конфигурационного пространства. Для других процессоров этот адрес можно установить вручную. (см. kernel/bus/PCIe.inc) Работает в режиме совместимости как шина PCI.
PCI-X Не поддерживается Работает в режиме совместимости как шина PCI.
AGP ?
ISA ?
EISA ?
ASUS Media Bus Не поддерживается
SMBus или I2C Не поддерживается
LPC Не поддерживается
USB Поддерживается драйвером Только для UHCI
FireWire Не поддерживается
HyperTransport Не поддерживается
InfiniBand Не поддерживается
RapidIO Не поддерживается
Fibre Channel Не поддерживается
BlueTooth Не поддерживается
IrDA Не поддерживается
Wi-Fi Не поддерживается
WiGig Не поддерживается
Light Peak Не поддерживается
Digital Visual Interface Не поддерживается
DisplayPort Не поддерживается
HDMI Не поддерживается

Порты

Порт Поддержка в KolibriOS
PS2 Поддерживается ядром ОС
COM Поддерживается ядром ОС
LPT Поддерживается ядром ОС
SPI Не поддерживается
Game port Не поддерживается
UHCI Поддерживается драйвером
OHCI Не поддерживается
EHCI Не поддерживается
XHCI Не поддерживается

Устройства хранения информации

Контроллер Устройство Поддержка в KolibriOS Примечания
IDE (ATA) FDD Поддерживается ядром ОС (см. /kernel/blkdev/flp_drv.inc)
CD/DVD Поддерживается ядром ОС (см. /kernel/blkdev/cd_drv.inc)
HDD Поддерживается ядром ОС (см. /kernel/blkdev/hd_drv.inc)
SATA CD/DVD Не поддерживается В ряде случаев система может работать с SATA- и USB-дисками через BIOS Fn13h в виртуальном V86-режиме (скорость чтения/записи при этом оставляет желать лучшего).
HDD Не поддерживается
USB CD/DVD Не поддерживается
SSD Не поддерживается
FlashDrive Не поддерживается
FlashCard Не поддерживается
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
ForteMedia FM801
VIA Technologies VT8231
VT8233
VT8233C
VT8235
VT8237
VT8237R
VT8237R Plus
Creative EMU10K1X Находится не на материнской плате компьютера, а на отдельной аудиокарте, которая вставляется в слот расширения PCI
HDA Системой пока не поддерживается, работа над драйвером ведётся в настоящее время.
SB16 Creative SoundBlaster16 Находится не на материнской плате компьютера, а на отдельной аудиокарте, которая вставляется в слот расширения ISA
SoundBlaster16 ASP
SoundBlaster16 PnP

Видео

Производитель(Стандарт) Поддержка в KolibriOS Примечания
VESA Поддерживается ядром ОС Поддерживается абсолютным большинством современных компьютеров.
VGA Поддерживается ядром ОС
AMD Драйвером для всех моделей ATI Radeon. Поддерживаются аппаратный курсор мыши, смена видеорежимов и акселерация двумерной графики.
NVidia Не поддерживается
Intel Не поддерживается
VIA Не поддерживается

Сетевые контроллеры

 В настоящее время контроллеры Ethernet поддерживаются драйверами в составе ядра ОС,
но ведётся активная работа по выносу кода в динамически подгружаемые драйвера
и созданию нового сетевого стека в рамках Net ветки KolibriOS. В данной таблице перечислены сетевые контроллеры, поддерживаемые системой в настоящее время.
Производитель Устройство Примечания
3Com Corporation 3c59x
3c900
3c905
3c980
3cSOHO100
3c555
3c556
3c595
3c575
3cCFE575BT
3cCFE575CT
3cCFE656
3c450
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)
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
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) Не поддерживается
Указательные (координатные) устройства с относительным указанием позиции (перемещения) Мышь (PS/2) Поддерживается ядром ОС
Мышь (Com) Поддерживается драйвером
Мышь (USB) Поддерживается драйвером
Тачпад Поддерживается ядром ОС в режиме эмуляции мыши (PS/2)
Трекбол ?
Трекпоинт ?
Джойстик (LPT) Поддерживается драйвером
Джойстик (USB) Не поддерживается
Указательные (координатные) устройства с возможностью указания абсолютной позиции Графический планшет Не поддерживается
Световое перо Не поддерживается
Игровые устройства ввода Педаль Не поддерживается
Геймпад Не поддерживается
Руль Не поддерживается
Рычаг для симуляторов полёта Не поддерживается
Устройства ввода общего назначения Сенсорный экран Не поддерживается

Устройства вывода

Тип устройства Устройство Поддержка в KolibriOS
Устройства вывода графической информации Монитор (дисплей) Поддерживаются видеодрайверами
Проектор Не поддерживается
Принтер Не поддерживается
Графопостроитель Не поддерживается
Устройства для вывода звука Встроенный динамик Поддерживается ядром ОС, также есть драйвер работающий с HAL - драйвером Infinity.
Колонки Поддерживаются аудиодрайверами
Наушники Поддерживаются аудиодрайверами.

Ресурсы предоставляемые системой для контроля оборудования

Для контроля оборудования используются обработчики аппаратных прерываний (IRQ), порты ввода/вывода и MMIO (memory-mapped IO или "отображённые на память зоны ввода-вывода"), которые BIOS выделил для конкретного оборудования. Поскольку у каждого системного устройства имеется свой уникальный адрес на шине PCI, то и доступ к ним разумно осуществлять через эту шину. Следует заметить, что новый стандарт системной шины PCI Express совместим "с верху вниз" с PCI, что позволяет проводить детектирование и базовый контроль ввода-вывода PCIe-устройств помощью стандартного сервиса PCI КолибриОС.

Как уже отмечалось, PCI устройства могут существенно отличаться друг от друга по используемым ресурсам и методам инициализации оборудования. Тем не менее, часть программно-доступных ресурсов является стандартной для всех устройств, что и позволяет точно идентифицировать имеющееся оборудование на шине. Прежде всего PCI устройство необходимо найти на шине, зайти в его конфигурационное пространство и обязательно проверить совпадение его вендора/версии с имеющимся шаблоном (иначе наш драйвер начнёт рулить каким-то совсем другим железом!), после чего можно приступать к диагностике и тонкой настройке режимов работы, подготавливая устройство для дальнейшей работы. Пример поиска оборудования на шине PCI см. в файле /drivers/sceleton.asm, этот файл является базой для многих новых драйверов.

Системой пока поддерживается только древний контроллер прерываний PIC, имеющий всего 16 линий запроса, при этом многие линии уже зарезервированы ядром. Важно, что на один IRQ-запрос в текущей версии Колибри можно повесить только один обработчик. Таким образом, если прерывание уже используется каким-то другим устройством, то для обеспечения корректной работы нужно либо разработать общий драйвер для конфликтующих устройств(!!), либо вручную переназначить номер IRQ, использовав ещё не занятую линию (обычно BIOS позволяет это разрулить через setup-меню).

Адреса поротов ввода-вывода и диапазонов MMIO содержатся в регистрах BAR0-BAR5 конфигурационного пространства PCI-устройства. Системный программист может узнать эти адреса только прочитав BAR-регистры: из драйвера - с помощью pci_read_reg (bus/pci/pci32.inc), из пользовательской программы - вызвав подфункцию 6 сисфункции 62. Чем отличаются порты от MMIO-памяти? Принципиально - ничем. И то, и другое служит для доступа к информационным шлюзам, связывающим ЦП с внешним миром. Есть некоторые нюансы электронной организации таких шлюзов (однотипные регистровые блоки имеет смысл упаковывать в MMIO, а уникальные - хранить в отдельных портах), но программисту можно этим не заморачиваться: с точки зрения программирования вся разница между этими ресурсами - в способе чтения и записи данных in/out для портов и mov для mmio.

Что необходимо для того, чтобы написать драйвер

Больше всего потребуется непреклонное желание добиться поставленной цели не смотря ни на какие сложности возникающие по ходу работы, это может быть основное, что вам понадобиться, как в принципе и при решении любой другой задачи. Кроме этого вам необходимо:

  • Прочитать статью "Пишем драйвер для КолибриОС"
  • Достать спецификацию (datasheet) на конкретный Южный Мост и/или конкретное устройство на которое пишется драйвер
  • Если уже существуют в Колибри драйвера аналогичных устройств, то неплохо было бы почитать их код (посмотреть "как это делается")
  • Очень желательно смотреть исходный код драйверов нужного устройства для других ОС для понимания в общем и целом способов управления устройством
  • Уметь искать необходимую для разработки информацию, чем больше полезной информации тем лучше
  • Не будет лишним также общаться с другими разработчиками драйвером, в случае возникновения сложных вопросов
  • Для просмотра списка устройств и их параметров на шине PCI, в Колибри есть специальное приложение pcidev. К примеру если устройство на которое вы пишете драйвер не может получить IRQ в своё монопольное распоряжение, то можно посмотреть какое ещё устройство получило это прерывание, чтобы исправить ситуацию.