Эту статью необходимо обновить . Пожалуйста ( Январь 2024 г. ) |
Стабильный релиз | 0.5.14 / 30 ноября 2009 г. ( 2009-11-30 ) |
---|---|
Операционная система | Linux , FreeBSD , NetBSD , OpenSolaris , Solaris |
Платформа | ЮНИКС |
Тип | Системное программное обеспечение |
Лицензия | GNU General Public License и Academic Free License |
Веб-сайт | freedesktop.org/wiki/Software/hal/ |
HAL ( Hardware Abstraction Layer или, скорее, Hardware Annotation Library ) — программная подсистема для UNIX-подобных операционных систем, обеспечивающая аппаратную абстракцию .
HAL теперь устарел в большинстве дистрибутивов Linux и FreeBSD. Функциональность объединяется с udev в Linux с 2008 по 2010 год и devd в FreeBSD. [ требуется цитата ] Ранее HAL был построен поверх udev. [ требуется цитата ]
Некоторые другие операционные системы, не имеющие альтернативы, такие как udev или devd, по-прежнему используют HAL.
Целью уровня абстракции оборудования было позволить настольным приложениям обнаруживать и использовать оборудование хост-системы через простой, переносимый и абстрактный API , независимо от типа базового оборудования. [1]
HAL для ОС Linux изначально был задуман Хавоком Пеннингтоном . Он стал проектом freedesktop.org и стал ключевой частью программного стека сред рабочего стола GNOME и KDE . Это свободное программное обеспечение , распространяемое под двойной лицензией GNU General Public License и Academic Free License . [2]
HAL не имеет отношения к концепции HAL ядра Windows NT , которые обрабатывают некоторые специфичные для платформы основные функции ядра, такие как маршрутизация прерываний.
Традиционно ядро операционной системы отвечало за предоставление абстрактного интерфейса к оборудованию, на котором работала система. Приложения использовали интерфейс системных вызовов или выполняли файловый ввод-вывод на узлах устройств для связи с оборудованием через эти абстракции. Этого было достаточно для простого оборудования ранних настольных вычислений.
Однако компьютерное оборудование стало сложнее, а абстракции, предоставляемые ядрами Unix, не поспевают за растущим числом типов устройств и периферийных устройств, которые теперь распространены как на серверах, так и на настольных компьютерах. Большинство современных шин также стали поддерживать горячее подключение и могут иметь нетривиальные топологии . В результате устройства обнаруживаются или изменяют свое состояние способами, которые трудно отследить через интерфейс системных вызовов или Unix IPC. Сложность этого процесса заставляет авторов приложений заново реализовывать логику поддержки оборудования. [1]
Некоторые устройства также требуют привилегированных вспомогательных программ для подготовки их к использованию. Их часто приходится вызывать способами, которые могут быть неудобны для выражения с помощью модели разрешений Unix (например, разрешая пользователям присоединяться к беспроводным сетям, только если они вошли в видеоконсоль). [1] Авторы приложений прибегают к использованию двоичных файлов setuid или запускают служебные демоны , чтобы обеспечить собственный контроль доступа и разделение привилегий, что каждый раз потенциально приводит к дырам в безопасности.
HAL — это единый демон, отвечающий за обнаружение, перечисление и посредничество в доступе к большинству оборудования на хост-компьютере. Приложения взаимодействуют с HAL через механизм D-Bus IPC , который абстрагирует оборудование за механизмом RPC на основе объектов .
Каждое логическое аппаратное устройство представлено как объект D-Bus, а его адрес шины используется как уникальный идентификатор. Устройства включают абстракции, такие как разделы диска и видимые беспроводные сети. Функциональность устройства раскрывается через интерфейсы D-Bus , а его состояние доступно через свойства , набор пар ключ-значение.
HAL транслирует аппаратные события в виде сигналов на этих объектах; приложения могут прослушивать сигналы и реагировать на аппаратные события, которые они обозначают, — такие события, как подключение цифровой камеры , раскручивание оптического диска или закрытие крышки ноутбука. [3] [4]
В Linux HAL использует /sys
( виртуальную файловую систему для систем Linux ) для обнаружения оборудования и прослушивания событий горячего подключения ядра . Некоторые дистрибутивы Linux также предоставляют правило udev , позволяющее демону udev уведомлять HAL всякий раз, когда появляются новые узлы устройств.
По состоянию на 2011 год [обновлять]дистрибутивы Linux, такие как Ubuntu , [5] Debian , [6] и Fedora , а также FreeBSD, [7] и такие проекты, как KDE, [8] GNOME и X.org, находятся в процессе отказа от HAL, поскольку он «превратился в большой монолитный неподдерживаемый беспорядок». [5] Процесс в основном завершен, но некоторое использование HAL осталось — Debian squeeze (февраль 2011 г.) и Ubuntu версии 10.04 удаляют HAL из базовой системы и процесса загрузки. [9] В Linux он находится в процессе слияния с udev (основной udev, libudev и udev-extras) и существующими функциями udev и ядра. Заменой для не-Linux-систем, таких как FreeBSD, является devd.
Первоначально планировалось, что новый демон DeviceKit заменит некоторые аспекты HAL, но в марте 2009 года DeviceKit был объявлен устаревшим в пользу добавления того же кода в udev в виде пакета udev-extras , а некоторые функции теперь перемещены в сам udev .
HAL лицензируется по вашему выбору: Academic Free License версии 2.1 или GNU General Public License версии 2.