Hardware Support/ru

From KolibriOS wiki
Jump to navigation Jump to search

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 HDA - системой пока не поддерживается, работа над драйвером ведётся в настоящее время.
  • Контроллер USB - частичная поддержка, с помощью драйвера. Поддерживается работа с контроллером, а также с мышью.
  • Контроллер FireWire - не поддерживается
  • Контроллер RAID - не поддерживается