Andy Melnikov (nponeccop) wrote,
Andy Melnikov
nponeccop

Готовы для десктопа

Решил я тут разобраться с разными лампочками и кнопочками на нетбуке, раз уж со сном порешилось.

Оказывается, в Линуксе пилят свой WMI-стек. Производители виндовых ноутбуков срут в винду через ACPI SCI всякими евентами от кнопок и устройств, а винда эти евенты (не все но почти все) умеет обрабатывать стандартными своими драйверами.

А линукс в дремучие времена 2.6 не умел вообще никак, и там придумали некий первый вариант с sparse_keymap, который срал в юзерспейс всякими меджик намберами, которые проходили через acpid в хуки - скрипты на баше, дешифрущие наборы циферок в коллбеки. А в коллбеках уж юзер что хочет то и делает. И иногда даже не сам а какие-то готовые скрипты конфигурит.

Теперь же роль виндовых драйверов исполняют - вы не поверите - драйвера. Например, кнопки яркости судя по всему (мне лень было проверять до конца) обрабабывает драйвер видеокарты и от юзермода ничего не требуется. События от кнопок питания обрабатывает заведующий питанием systemd. События от кнопки отключения вайфая - rfkill. А события от кнопок громкости, судя по всему, Х11. Т.е. acpid нужен (как и в винде) только для тех нескольких нестандартных функций или для дополнительной обработки стандартных (например рисовать нотификации или иной гуй). Более того, из 20 меджик намберов осталось 3, а остальные стандартизировались в человекочитаемые имена, и понятие монструозного распознавателя кодов спецкнопок 100500 моделей буков постепенно уходит в прошлое.

Ну это по кнопочкам. По лампочкам же ситуация похуже. Есть специальный класс устройств - лампочки. Но драйвера лампочек какие-то дебильные, неполные и захардкожены в другие дрова. У меня лампочек много, специально загрузился в винде проверил что все работают (притом что я юзермод блоатвари никакой не ставил от производителя ноута). А на линуксе не работает даже капслок.

Драйверов лампочек оказалось два - один в беспроводной сетевухе (логично), но там он никак не включается. Почему не включается - непонятно, люди на каком-то отличном от моего железе умудрялись им программно мигать записывая какие-то странные битики совсем в другое место.

Второй почти нормальный - только а) инвертированный (0 включен 1 выключен) б) зашит в старую версию дров и в новых отсутствует.

В качестве оправдания линуксоидам сойдет следующий факт. ACPI BIOS написан вендорами через жопу. Если его раскомпилить (он в специальном неполном ДСЛ в виде байткода) а потом пытаться скомпилить обратно - то ничего не выходит, поскольку в 100500 мест нарушен стандарт. Вот линуксоиды сначала пытались делать, чтобы ядро само патчило этот байткод при загрузке и исправляло косяки, но в конце концов пришли к майкрософтовскому подходу - ебошить адхок хаки чтобы запускалось на любом имеющимся в дикой природе кривом фирмваре.

Да, и пилят открытый биос. Но основная проблема с написанием опенсорсного биоса в том же месте. Эти события на материнке генерирует какой-нибудь хилый микроконтроллер со своим собственным фирмварей, и они оба совершенно нестандартные. Доходит до того, что вместо того чтобы пытаться работать с контроллером так же, как работает закрытый биос, пишут прошивку к этому контроллеру. Благо даташиты бывает что есть, а документации на внутриматеринский высокоуровневый протокол между двумя чипами у вендоров не бывает.
Subscribe

Recent Posts from This Journal

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 7 comments