Hardware Support/ru
KolibriOS частично обеспечивает поддержку оборудования персонального компьютера. Часть оборудования поддерживается ядром ОС, часть динамически загружаемыми драйверами, мало того система предоставляет возможность прямого доступа к оборудованию прямо из пользовательского режима! Т.е. вы можете написать программу, которая сможет работать с оборудованием используя соответсвующий системный сервис. Правда этот подход лучше использовать исключительно в отладочных или исследовательских целях, а для "нормальной" поддержки оборудования всё-таки писать драйвера. Также нужно понимать, что существуют два вида драйверов:
- Драйвер являющейся частью ядра, т.е. весь его код может находиться в отдельном модуле, но после компиляции ядра он станет частью кода ядра системы (например: hd_drv.inc).
- Драйвер динамически подгружаемый в адресное пространство ядра уже после загрузки системы (например: sound.asm), эти драйвера находятся в специальной системной директории (/rd/1/drivers/).
Состав аппаратного обеспечения ПК
Итак из чего же состоит компьютер? Большинство пользователей, вспомнив уроки информатики, тут же назовут: системный блок, монитор, клавиатура, мышь. Многие подумав добавят HDD, CD/DVD, Floppy приводы, видео, аудио и сетевую карты. А если заглянуть поглубже?
В системном блоке основным элементом является материнская плата, а на ней находится сердце компьютера - центральный процессор(ЦПУ) и оперативная память(ОП). Программиста же решившего написать драйвер для поддержки какого-то устройства в KolibriOS, больше всего заинтересует Южный Мост, где сходятся большинство ниточек, контролирующих оборудование. Существует также Северный Мост, посредством которго Южный Мост и связан с ЦПУ и ОП, но его мы пока подробно рассматривать не будем ввиду его небольшой функциональности с точки зрения программиста.
Компоненты южного моста
Большинство устройств представлены в Южном Мосту в качестве так называемых контроллеров. Немалая часть большинства драйверов посвящена инициализации, конфигурированию и дальнейшей работе с устройством с помощью этих контроллеров.
Функционально южный мост включает в себя:
- контроллер шины PCI (устаревший);
- контроллер шины PCI Express;
- контроллер шины SMBus или I2C;
- DMA контроллер;
- контроллер прерываний PIC и APIC;
- PATA (IDE) и SATA контроллеры;
- контроллер шины LPC;
- часы реального времени (Real Time Clock);
- управление питанием (Power management (APM и ACPI);
- энергонезависимую память BIOS (CMOS);
- звуковой контроллер (обычно AC97 или Intel HDA).
Опционально южный мост также может включать в себя контроллер Ethernet, RAID-контроллеры, контроллеры USB, контроллеры FireWire и аудио-кодек.
Реже южный мост включает в себя поддержку клавиатуры, мыши и последовательных портов, но обычно эти устройства подключаются с помощью другого устройства — Super I/O (контроллера ввода-вывода). Поддержка шины PCI включает в себя традиционную спецификацию PCI, но может также обеспечивать поддержку шины PCI-X и PCI Express. Хотя поддержка шины ISA используется достаточно редко, она осталась, что интересно, неотъемлемой частью современного южного моста. Шина SM используется для связи с другими устройствами на материнской плате (например, для управления вентиляторами). Контроллер DMA позволяет устройствам на шине ISA или LPC получать прямой доступ к оперативной памяти, обходясь без помощи центрального процессора.
Контроллер прерываний обеспечивает механизм информирования ПО, исполняющегося на ЦПУ о событиях в периферийных устройствах. IDE интерфейс позволяет «увидеть» системе жёсткие диски. Шина LPC обеспечивает передачу данных и управление SIO (это такие устройства, как клавиатура, мышь, параллельный, последовательный порт, инфракрасный порт и флоппи-контроллер) и BIOS ROM (флэш).
APM или ACPI функции позволяют перевести компьютер в «спящий режим» или выключить его.
Системная память CMOS, поддерживаемая питанием от батареи, позволяет создать ограниченную по объёму область памяти для хранения системных настроек (настроек BIOS).
Поддержка аппаратного обеспечения в KolibriOS
Рассмотрим как же работает с оборудованием KolibriOS.
- Контроллер шины PCI - поддерживается ядром ОС (kernel/bus/pci32.inc)
- Контроллер шины PCI Express - поддерживается ядром ОС (kernel/bus/PCIe.inc), автонастройка пока только для AMD-NPT начиная с Athlon64
- Контроллер шины PCI-X - не поддерживается
- Контроллер шины SMBus или I2C - не поддерживается
- DMA контроллер - поддерживается ядром ОС
- Контроллер прерываний PIC - поддерживается ядром ОС
- Контроллер прерываний APIC - не поддерживается
- Контроллер PATA (IDE) - поддерживается драйверами соответствующих устройств в ядре (папка /kernel/blkdev).
Системой поддерживаются следующие IDE устройства:
- Floppy привод (flp_drv.inc)
- CD/DVD привод (cd_drv.inc)
- HDD привод (hd_drv.inc)
- SATA контроллеры - системой не поддерживаются, тем не менее некоторые BIOS предоставляют возможность системе работать с такими контроллерами с помощью тех же самых драйверов соответствующих устройств, что используются для работы с PATA (IDE).
- Контроллер шины LPC - не поддерживается
- Часы реального времени (Real Time Clock) - поддерживается ядром ОС
- Управление питанием APM - поддерживается ядром ОС
- Управление питанием ACPI - поддерживается драйвером ACPICA
- Энергонезависимая память BIOS (CMOS) - поддерживается ядром ОС
- Звуковой контроллер AC97 - поддерживается драйверами соответствующих устройств. Поскольку AC97 стандарт стандартизует только функции кодека и AC-Link, отвечающего за взаимодействие контроллера и кодека, то для различных контроллеров AC97 требуются разные драйвера. В настоящее время система поддерживает контроллеры следующих Южных Мостов:
- Intel
- ICH0
- ICH1
- ICH2
- ICH3
- ICH4
- ICH5
- ICH6
- NVidia
- NForce
- NForce2
- NForce3
- NForce4
- NForce 500
- Silicon Integrated Systems
- SIS7012
- ForteMedia
- FM801
- VIA
- VT8231
- VT8233
- VT8233C
- VT8235
- VT8237
- VT8237R
- VT8237R Plus
- Creative
- EMU10K1X
- Intel
- Звуковой контроллер Intel HDA - системой пока не поддерживается, работа над драйвером ведётся в настоящее время.
- Контроллер USB - частичная поддержка, с помощью драйвера. Поддерживается работа с контроллером, а также с мышью.
- Контроллер FireWire - не поддерживается
- Контроллер RAID - не поддерживается