Hardware Support/ru
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;
- PATA (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.
- Контроллер шины 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 - не поддерживается