Acpi bios не может выделить
Итак, ACPI — это универсальный интерфейс к некоторым функциям аппаратного обеспечения современных компьютеров, от управления питанием и контроля состояния батарей до запроса возможностей подключенных внешних дисплеев.
Он состоит из нескольких конфигурационных таблиц, одна из которых содержит код для виртуальной машины, работающей в ядре операционной системы. Виртуальная машина, существенно усложняющая реализацию ACPI, была добавлена для того, чтобы сделать систему настолько гибкой, насколько это возможно.
Компьютер, который у меня есть — нетбук Samsung N250+. У него достаточно неплохое «железо» (за исключением охочей до батарейки и вообще кривой WiFi-карточки Broadcom, которую я сразу же заменил на аналогичую Atheros), но качество BIOS-а весьма печальное. На момент релиза не было даже возможности включить (или выключить) WiFi из Linux-системы: его состояние можно было изменить только через CMOS Setup Utility. На данный момент драйвер есть, но он использует фундаментально порочный подход, и страдает от некоторых проблем.
Исследование текущего состояния
Поддержка возможностей нетбука, для которых код в ACPI отсутствовал, изначально была реализована в модуле ядра easy slow down manager, который в итоге был принят в ядро как samsung-laptop.c.
Как видно на строке 725 исходного кода, этот драйвер использует вызовы SMI (и интерфейс Samsung под названием SABI) для того, чтобы устанавливать уровень подсветки, изменять «режим производительности» (который на самом деле всего лишь меняет скорость вращения вентиляторов) и включать питание беспроводному модулю. SMI-вызов — это команда, которая заставляет ЦП активировать так называемый режим управления системой (SMM), специальную возможность чипсета и процессора, одинаково похожую на гипервизор и руткит.
BIOS может настроить чипсет так, чтобы он перехватывал определенные операции (например, доступ к выбранным регионам памяти или портов ввода-вывода) и активировал SMM, ОС не может ни обнаружить факт входа в SMM (кроме как косвенными методами), ни прервать его, ни предотвратить. После этого, BIOS может выполнить произвольный код: например, SMM используется для того, чтобы сэмулировать для старых ОС (например, ДОС) поддержку PS/2-мыши в тех случаях, когда подключена USB-мышь. Более того, область памяти, выделенная для обработчика SMM, ни при каких обстоятельствах не доступна ОС, делая прямой анализ логики ее работы невозможным.
К счастью, в этом случае вызовы SMI, скорее всего, меняют лишь пару байтов, и, если повезет, можно будет определить их расположение, не изучая код режима SMM.
Рассмотрим поближе таблицы ACPI. Существует множество их типов, но в данном случае важна только одна, DSDT — таблица с байткодом обработчиков многих системных событий.
Для извлечения таблицы из системы и модификации ее кода нам потребуются две утилиты: «acpidump» и «iasl». На Debian-подобной ОС они находятся в пакетах с тем же названием.
Для наглядности, я оформил таблицу с историей моих изменений как репозиторий github; начальное состояние содержится в этом коммите. Как видно, таблица весьма длинная: более 5000 строк. Таблицы длиной более чем в 25000 строк встречаются вполне регулярно.
Чиним подсветку
У моего нетбука светодиодная подсветка, и поэтому ее яркость можно менять, просто включая ее на определенную долю одинаковых интервалов времени, например, для затемнения на 30% можно держать ее включенной 70% времени. Чтобы мерцание не было заметно, это переключение (ШИМ) происходит на частоте, заведомо превышающей чувствительность человеческого глаза — скажем, 200кГц вполне достаточно.
В данном случае, скважность ШИМ, вероятно, изменяется встроенным графическим контроллером. Вот он на шине PCI:
Цифры «00:02.0» — адрес устройства на шине. Зная этот адрес, можно запросить или изменить параметры устройства, так как Linux предоставляет множество точек управления через sysfs. Одна из них позволяет читать и записывать конфигурационное пространство PCI: блок из 256 байтов, в котором хранятся настройки устройства. Первые 64 байта в этом блоке имеют определенное спецификацией значение, а остальные могут свободно использоваться производителем для своих нужд.
Проверим, что происходит с конфигурацией при изменении уровня подсветки (несмотря на то, что здесь приведен пример для Linux с открытым драйвером, все это можно сделать и для закрытого драйвера или даже на Windows; считать конфигурационное пространство можно и в ней):
Таким образом, байт по адресу 0xf4 управляет уровнем подсветки. Можно в этом убедиться, запустив команду sudo setpci -s 00:02.0 f4.b=80 (заменив 80 на нужный уровень подсветки).
Теперь перепишем DSDT так, чтобы обновлялось это значение (и, возможно, в процессе этого получится узнать, почему управление подсветкой через ACPI вообще не работает):
Согласно спецификации ACPI (приложение B, раздел 6.2, стр. 704), совместимое описание графического адаптера должно реализовывать методы _BCL , _BCM и _BQC . В нашем DSDT эти методы определены на строке 1767. Вот их откоментированный исходный код:
Чтобы изменить этот код для работы через конфигурационное пространство PCI, нужно добавить новое поле в структуру, описывающую это пространство. Адрес адаптера 00:02.0 соответствует значению 0x0002000 в ACPI (раздел 6.1.1, стр. 200). Устройство с таким адресом определено на строке 1325; за определением следует описание конфигурационного пространства PCI.
Как было упомянуто, первые 64 (0x40) байтов в этом пространстве зарезервированы для внутреннего испольования. Из-за этого ACPI даже не включает их в регион; он определен как OperationRegion(IGDP, PCI_Config, 0x40, 0xC0) , где третий аргумент означает отступ с начала области PCI_Config. Поле, управляющее яркостью, расположено по адресу 0xf4 во всем пространстве, и 0xb4 в этом регионе.
За определением региона следуют определения полей. Вся конструкция Field представляет из себя поток битовых полей (длина определена в битах, а не байтах), одно за другим, перемежающееся указанием смещений (Offset), задаваемых, напротив, в байтах. Назовем наше поле BLVL и включим его в структуру:
Так как система имен ACPI иерархическая, это поле теперь доступно глобально под именем _SB.PCI0.IGD0.BLVL (имя составлено из вложенных конструкций Device и Scope), и методы для управления яркостью теперь можно переписать так, чтобы они обращались к полю BLVL напрямую:
Обновленная DSDT также лежит в репозитории.
Можно собрать ядро, установить его и перезагрузиться. Вуаля: теперь изменение яркости подсветки работает со стандартным драйвером ACPI. (Например, echo 7 >/sys/class/backlight/acpi_video0/brightness ).
Другие функции
Для того, чтобы найти другие похожие поля, изменяемые кодом в SMM, я написал простой скрипт. Нужно отметить, что некоторые устройства, а именно мосты PCI Express и сетевые адаптеры, порождают множество самопроизвольных изменений.
К сожалению, ни скорость вентилятора, ни выключатель беспроводного модуля не оказались связаны ни с какими изменениями в конфигурационном пространстве. Вероятно, они производятся через Embedded Controller или интерфейс SMBus, что означает отсутствие постоянных изменений в системной памяти.
Более того, даже если бы я обнаружил интерфейс отключения беспроводного модуля, я бы не смог использовать стандартный способ его представления системе — из-за отсутствия такого способа в природе. На ноутбуках, где этот интерфейс действительно задан в ACPI, существует платформенно-специфичный драйвер для его обработки (в отличие от подсветки, для которой существует общий стандарт).
В данной статье пойдет речь о вопросе управления энергопотреблением в современных компьютерах, выражаясь в специфической терминологии — Power Managment. Нет-нет, не закрывайте окно браузера, считая, что вас это не касается, поскольку вы не являетесь владельцем ноутбука и не состоите в партии зеленых. Речь пойдет о гораздо более интересных вещах: совместной инициативе Intel, Microsoft и Toshiba — ACPI, и одном из наиболее интересных ее практических воплощений в Windows98/NT — технологии OnNow, должной обеспечить "постоянно доступный PC".
Итак, что же собственно это такое — ACPI? Для начала, наверное, стоит расшифровать эту аббревиатуру. ACPI, в переводе на человеческий язык, означает Advanced Configuration and Power Interface. Или, говоря по-русски, "интерфейс расширенного конфигурирования и управления питанием". Его задача — обеспечить взаимодействие между операционной системой, аппаратным обеспечением и BIOS системной платы.
Посмотрим сначала, что творится в этой области сегодня. Большинство материнских плат, даже вышедших на базе таких относительно новых чипсетов как VIA Apollo MVP3 или Intel 440BX, не поддерживают расширенное управление энергопотреблением ACPI, несмотря на то, что по идее, ACPI-совместимым считается еще аж 430TX, а сам ACPI был анонсирован в апреле 1996 года. Его использование начинается только сегодня, по мере того, как для вышедших недавно материнских плат создаются новые версии BIOS, частично поддерживающие ACPI.
- Совместная работа компонентов системы отсутствует, как таковая: диски начинают раскручиваться, когда это совершенно ненужно, экран гаснет во время работы, поскольку текстовый редактор забыл отметиться у операционной системы, и т.д.
- BIOS системной платы, операционная система и приложения бьются друг с другом за контроль над аппаратным обеспечением компьютера. Но любое внешнее относительно материнской платы оборудование не участвует в процессе управления энергопотреблением — когда вы добавите в систему встроенный модем, сможет ли он как-то при установке высказать BIOS свои пожелания? И куда его пошлет BIOS?
- Имеющееся управление энергопотреблением в основном ограничено материнской платой и отличается крайней тупостью. Ну, например, Windows98 скидывает на винт своп-файл. Даже идиоту должно быть ясно, что винт в этот момент активен, этот факт можно даже не проверять. А BIOS системной платы все равно проверяет.
- Необходимость выключать или перезагружать компьютер при добавлении новых устройств. Кое-где уже наметился прогресс (USB, например), но все равно, до полной горячей замены еще далеко.
- Ну и, наконец, приложения не заботятся об экономии потребляемой компьютером энергии, да и работают не ахти. Выдерните из включенного компьютера видеокарту — наверняка ведь Word зависнет. ;-)
Итак, повторюсь, основная задача ACPI — способность разумно включать и выключать PC и подключенную к нему периферию. Причем, помимо принтеров, сетевых карт, дисководов CD-ROM и прочая и прочая, могут быть и такие, пока еще экзотические устройства, как телевизор, видеомагнитофон, музыкальный центр. И конечно речь идет об умной активации PC. Так, чтобы видеоплеер при установке в него кассеты смог разбудить PC, который включил бы телевизор.
Однако на данный момент ACPI может интересовать среднего пользователя только как теоретическая архитектура. Куда интереснее основанная на нем технология OnNow, уже сегодня могущая предоставить кое-какие вполне осязаемые приятности. Ее цели: убрать задержки при включении и выключении компьютера, позволить обслуживающим приложениям, таким как дефрагментация диска или проверка на вирусы выполняться в то время, когда компьютер выключен, и вообще, улучшить общую картину энергопотребления PC.
- G0 — обычное, рабочее состояние
- G1 — suspend, спящий режим
- G2 — soft-off, режим, когда питание отключено, но блок питания находится под напряжением, и машина готова включиться в любой момент
- G3 — mechanical off — питание отключено напрочь
- S1: (standby 1) останавливаются тактовые генераторы CPU и всей системы, но при этом состояние памяти остается неизменным. Выход из S1 осуществляется мгновенно.
- S2: (standby 2) также останавливаются тактовые генераторы CPU и всей системы, но к тому же отключается питание кэша и CPU, а данные, хранившиеся там, сбрасываются в основную память. Включение также происходит достаточно быстро.
- S3: (suspend-to-memory) по замыслу, именно этот режим должен был быть OnNow, но по воле разработчиков пока так не получилось. Должны обесточиваться все компоненты системы, кроме памяти, в которой сохраняются необходимые данные о состоянии CPU и кэша. Включение с восстановлением предыдущего состояния PC действительно происходит Now, то есть практически сразу.
- S4: (suspend-to-disk) то, что реализовано в каком-то виде сейчас. Все компоненты системы обесточиваются, а данные о состоянии процессора и содержимое кэша и памяти записываются в специально отведенное место на жестком диске. При этом пробуждение может занимать значительное время.
Режим S3 (настоящий OnNow) не может быть реализован из-за того, что существующие системные платы не имеют схем разделенного питания компонентов. Поэтому, до выхода следующего поколения материнок OnNow в полном объеме реализован быть не может. Пока же, путем модификации BIOS, можно добиться только некой эмуляции — S4.
Первой же материнской платой, которая будет иметь раздельные схемы питания для своих узлов и будет, таким образом, поддерживать режим S3 станет ASUS P2B-E — модификация давно известной системной платы P2B от Asustek. Кроме возможности suspend-to-memory, кстати, P2B-E будет иметь 5 слотов PCI. В серийное производство эта плата будет запущена в ноябре текущего года.
Но вернемся к нашим баранам. Спецификацию OnNow разрабатывала небезызвестная вам фирма Microsoft. Угадайте с трех попыток, кто по этой спецификации должен стать управляющим центром компьютера по всем этим вопросам? Первые два ответа можно не считать, правильно — Windows.
- Автоматическое скачивание файлов из Internet и выполнение системных задач. Так, Internet'овское приложение может быть настроено для того, чтобы в 3 ночи включить компьютер, просмотреть несколько сайтов, и скачать вновь появившиеся файлы. Естественно, если оно поддерживает API OnNow. То же самое относится к таким программам, как антивирусы, резервное копирование, Scandisk, наконец.
- Сохранение сетевых соединений. Так, при выключении компьютера, или даже при его "засыпании", сетевое соединение рвется, файлы закрываются и т.д. При возникновении подобной ситуации, приложение, написанное с учетом OnNow, автоматом выполнит автосохранение используемых файлов на локальном диске и после включения компьютера и восстановления соединения, без криков позволит пользователю продолжить работу.
- Обработка специфических событий. Так, факс-модем способен находиться в состоянии приема 24 часа в сутки, независимо от того, включен компьютер или нет. Если он выключен, при входящем звонке модем его включит и запустит нужную программу.
В общем, я полагаю, тенденцию вы уловили. Компьютер, постоянно находящийся наготове.
Обидно, однако, что пока с практическим использованием ACPI очень дела обстоят неважно. Возьмем самое яркое видимое и единственное на данный момент проявление ACPI в Windows 98 — Hibernate (по-русски — зимняя спячка). Проще говоря, это то самое хваленое сбрасывание данных из оперативной и видеопамяти на винт, с последующим быстрым восстановлением при включении компьютера. Таким образом, у нас получается аналог спящего режима, когда к вашим услугам предоставлены всегда запущенные приложения, но с нулевым потреблением энергии. Так вот, после появления в вашем компьютере версии BIOS, поддерживающей ACPI и некоторых манипуляций с установкой Windows 98, у вас действительно в Control Panel/Power Management появится пара вожделенных пунктов:
И соответствующий пункт в закладке Advanced:
Я уже не говорю о не так хорошо заметных проявлениях в списке системных устройств:
Как вам нравятся такие устройства, как ACPI System Button или Composite Power Source?
Однако, небольшое но. Ох уж это но, всегда оно появляется. Как обычно, новая технология отказывается работать в Windows сразу и без ошибок. Эта печальная практика затронула и OnNow. В Windows 98 фактически он не работает. До выхода Service Pack 1 все ограничится этими красивыми, но, к сожалению, бесполезными картинками. Сегодня в Windows'98 не работают ни Hibernate, ни вообще, какие либо функции управления питанием через ACPI. Весь контроль над ними берет на себя APM. Взять тот же Composite Power Source (по-русски говоря, — блок питания в корпусе): при входе в спящий режим через ACPI он должен выключаться, а при входе через APM (сегодня) — не выключается. Улавливаете разницу в уровне контроля над железом?
Итог: любимый город может спать спокойно. По крайней мере, до 99 года, когда выйдет SP1 для Windows 98, а комплектующие и программы научатся работать в паре с ACPI.
Возможно, однако, что OnNow будет все же работать через BIOS, в обход операционной системы. Например, плате ASUS P2B-E не будет требоваться команда Windows 98 для перехода в S3 (suspend-to-memory), а уже давно вышедшая плата Aopen AX-6BC умеет делать S4 (suspend-to-disk) не пользуясь средствами операционной системы.
kaaa
Синий текст игнорировать не следует. Вам замечание.
Извеняюсь читал в спешке из библиотеке не заметил
Помните давно Я создал не маленкий пост про проблему с Материнкой да и всёй системой
Сдал в сервис не нашли проблему у них всё нормально работает (так сказали но не факт . )
так вот поставил висту и проблем стало не менше не болше :)
Просто щяс хоть кино смотреть нормално можна и и некоторые игры вылетают а некоторые нет
(на старом конфиге тоесть на 2 компе всё норм тока лагает, а тут нет но поиграть удаётся 7-9 мин и рестарт )
Так проверил Лог событий это самая основная проблема:
IRQARB: ACPI BIOS не может выделить IRQ для устройства в PCI слоте 15, функция 0. Обратитесь к поставщику компьютера за технической поддержкой. - это пишется в просмотре событий (event manager)
прочитал что в биосе можна выставить RESERVED на все IRQ может помочь но а что это такое
По ссылкам не ходите, аяяй! :)
Это попробуйте сначала:Повторюсь. :)Отключите в БИОСе все устройства, которые занимают IRQ и Вами не используются. COM-ы и LPT, если имеются, интегрированный звук и сеть, если не нужны. Прерывания освободятся.
Да я посмотрел тока чёто не чё не понял даже в теме биос несколько тем пересмотрел
[b]Отключите в БИОСе все устройства, которые занимают IRQ и Вами не используются. Еслиб примерно знал где(биос а далше) это и как это там обозначается? [/QUOTE]
Выключил все COM-ы и LPT порты так как не че не пользою (вроде)
Выключил COM-ы и LPT порты и в биосе поставил на IRQ14 и IRQ15 RESERVEDА так постоянно стояло AUTO (я поставил Manual)
Надеюсь это не на что плохо не повлияет kaaaв биосе поставил на IRQ14 и IRQ15 RESERVEDЛучше AUTO поставьте обратно. Выключил COM-ы и LPT портыЭтого пока достаточно. Давайте уж поэтапно. :)
Всё биос вернул в стандартно
Щяс буду пробовать игры
И вот когда вылетает то всегда на ошыбку
0x0000000A: IRQL_NOT_LESS_OR_EQUAL
----------------------------------------------------------------------------------------------------------------------------------------
Короче купил я проц. рамы . Материнку Думал Всё хоть поиграю да и комп будет помощнее
А тут на тебе ошибка на ошибке Почти все игры вылетают в виндовс а порой на синий экран
в логах 20-30 ошибок за сеанс кино нормально не посмотреть , да вобще как будто всё через ж.
ACPI BIOS не может выделить IRQ для устройства в PCI слоте 15, функция 0.
Такое чувство что там биос не правильно работает или чтото что идет от него
(стоит последняя версия 1102 - уже была поставлена на материнку)
Виндовс уже пробовал XP, XP SP 2,поставил VISTA и вроде драйвера разные а всё равно всё как раньше.
TЕПЕР ЖАЛЕЮ ПОЧЕМУ НЕ КУПИЛ ГОТОВЫЙ СИСТЕМНИК :bang::bang::bang::bang:
Вот это к примеру :
Что такое и как боротся
IRQARB: ACPI BIOS не может выделить IRQ для устройства в PCI слоте 15, функция 0. Обратитесь к поставщику компьютера за технической поддержкой.
Вроде надо обновить биос но он и так у меня 1102 тока в программе дата 2007/06/20 что поставили
а на сайте тоже 1102 тока 2007/07/09 Обновление
Что такое и как боротся 1)IRQARB: ACPI BIOS не может выделить IRQ для устройства в PCI слоте 15, функция 0. Обратитесь к поставщику компьютера за технической поддержкой. |
И на сайте 1102 тока чють поже вывложеная kaaa
Синий текст игнорировать не следует. Вам замечание. PCI Latency? :) Creative очень часто из-за этого барахлила, в частности S2K на Nforce2. kaaa
Синий текст игнорировать не следует. Вам замечание.
Извеняюсь читал в спешке из библиотеке не заметил
Помните давно Я создал не маленкий пост про проблему с Материнкой да и всёй системой
Сдал в сервис не нашли проблему у них всё нормально работает (так сказали но не факт . )
так вот поставил висту и проблем стало не менше не болше :)
Просто щяс хоть кино смотреть нормално можна и и некоторые игры вылетают а некоторые нет
(на старом конфиге тоесть на 2 компе всё норм тока лагает, а тут нет но поиграть удаётся 7-9 мин и рестарт )
Так проверил Лог событий это самая основная проблема:
IRQARB: ACPI BIOS не может выделить IRQ для устройства в PCI слоте 15, функция 0. Обратитесь к поставщику компьютера за технической поддержкой. - это пишется в просмотре событий (event manager)
прочитал что в биосе можна выставить RESERVED на все IRQ может помочь но а что это такое
По ссылкам не ходите, аяяй! :)
Это попробуйте сначала: Отключите в БИОСе все устройства, которые занимают IRQ и Вами не используются. COM-ы и LPT, если имеются, интегрированный звук и сеть, если не нужны. Прерывания освободятся. Да я посмотрел тока чёто не чё не понял даже в теме биос несколько тем пересмотрел
Отключите в БИОСе все устройства, которые занимают IRQ и Вами не используются.
Еслиб примерно знал где(биос а далше) это и как это там обозначается? [/QUOTE]
Выключил все COM-ы и LPT порты так как не че не пользою (вроде)
Выключил COM-ы и LPT порты и в биосе поставил на IRQ14 и IRQ15 RESERVEDА так постоянно стояло AUTO (я поставил Manual)
Надеюсь это не на что плохо не повлияет
Всё биос вернул в стандартно
Щяс буду пробовать игры
И вот когда вылетает то всегда на ошыбку
0x0000000A: IRQL_NOT_LESS_OR_EQUAL
----------------------------------------------------------------------------------------------------------------------------------------
Короче купил я проц. рамы . Материнку Думал Всё хоть поиграю да и комп будет помощнее
А тут на тебе ошибка на ошибке Почти все игры вылетают в виндовс а порой на синий экран
в логах 20-30 ошибок за сеанс кино нормально не посмотреть , да вобще как будто всё через ж.
ACPI BIOS не может выделить IRQ для устройства в PCI слоте 15, функция 0.
Такое чувство что там биос не правильно работает или чтото что идет от него
(стоит последняя версия 1102 - уже была поставлена на материнку)
Виндовс уже пробовал XP, XP SP 2,поставил VISTA и вроде драйвера разные а всё равно всё как раньше.
TЕПЕР ЖАЛЕЮ ПОЧЕМУ НЕ КУПИЛ ГОТОВЫЙ СИСТЕМНИК :bang::bang::bang::bang:
Сообщите модель: Не 450W не исправил
А купил всё срази и поставил сразу потомучто к старому ето не пойдет.
ошибка стала появляться после установки виндовса и 20 мин работы (начал игры пробовать)
Вот тогда и полетели все ти экраны и ошибки
КОРОЧЕ поменял С 800 на 667 вроде помогло.
Щас тестю .
ДА все нормално
(тепер скажите ТО что я сделал это нормално или чтото плохо)
Потомучто в книге 1 GM RAM от APACERa тока на 667 написано а стояло 800 Можно выставить память на 667, и посмотреть, не будет ли каких изменений. Вот уж никак не могла подумать, что Вы этого не сделали до сих пор. Можно выставить память на 667, и посмотреть, не будет ли каких изменений. Вот уж никак не могла подумать, что Вы этого не сделали до сих пор.
Я сам не думал да и биосе я тогда очень многое не зрал
Но после того как провел пару недел на форумах .
Короче тепер прежде чем чтото купить надо будет поискать да и спросит мнение
ЧТОБ БОЛШЕ НЕ БЫЛО 3 НЕДЕЛНОГО ГЕМОРОЯ
СПАСИБО ЗА помощ
К стате там стояло не 800 а ауто а почему всё равно было не правилно
поставил в ручную и всё ОК
Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd. Перевод: zCarot
Читайте также: