LINUX.ORG.RU

[acpi][мусор]Acer Aspire - отказ на включение

 ,


0

1

Столкнулся с проблемой acpi - отказ включаться 1\3.Долго мучался, и в конце концов нашел зацепку и нагуглил.Итог - это характерно именно для асеров аспире. Решением стало добавление acpi_osi=!Linux к параметрам загрузки ядра в grub.

Запостил это, чтобы этому нашли применение, когда просил тут помощи по этой проблеме я был не один, просили сообщить если решение найду.


Ответ на: комментарий от mrcim

Ндэ... Гугл тоже молчит по этому поводу. Может, кто из здешних обитателей подскажет?

carasin ★★★★★
()
Ответ на: комментарий от carasin

Есть вопрос: чем отличается acpi_osi=!Linux и acpi_osi=Linux ?

В DSDT обязательно присутствует метод определяющий ось установленную на машине, и в соответствии с этим включает, либо не включает конкретные ACPI фичи. Первый случай выглядит примерно так:

If (_OSI ("Windows 2001 SP3"))
{
Store (0x12, OSTB)
Store (0x12, TPOS)
}
If (_OSI ("Windows 2006"))
{
Store (0x40, OSTB)
Store (0x40, TPOS)
}

If (_OSI ("Windows 2006 SP1"))
{
Store (0x41, OSTB)
Store (0x40, TPOS)
}

If (_OSI ("Linux"))
{
Store (One, LINX)
Store (0x80, OSTB)
Store (0x80, TPOS)
} 
Соответственно, выбирая acpi_osi=«Linux», мы присваиваем значения
Store (One, LINX)
Store (0x80, OSTB)
Store (0x80, TPOS)
этим параметрам. В дальнейшем эти параметры использовуются при работе методов, отвечающих за поддержку функций ACPI железа. Второй случай: Если мой ноутбук шёл с предустановленной Vista, и BIOS был порезан производителем, а я хочу использовать Linux, то я получу из-за этого неполную поддержку ACPI, так как «якобы» не предполагалось использование другой оси. Таким образом, используя acpi_osi=!«Linux», мы говорим, что мы используем в данном случае Vista(это я про ситуацию, когда у нас в DSDT есть только такой код или похожий:
If (_OSI ("Windows 2006"))
{
Store (0x40, OSTB)
Store (0x40, TPOS)
}

If (_OSI ("Windows 2006 SP1"))
{
Store (0x41, OSTB)
Store (0x40, TPOS)
}
). Если «фокус» проходит BIOS считает, что на машине Vista, соответственно схема ACPI подхватывается для Vista, и проблем у нас нет. Хотя в первом случае можно, например, указать конкретно какой осью мы хотим представится - acpi_osi=«Windows 2001 SP3» либо acpi_osi=«Windows 2009» (Win7), и мы получим WinXP или Win7 с набором методов ACPI, которые поддерживает WinXP или Win7, соответственно.

Получилось немного сумбурно :)

С уважением, Ingmar_14.

Ingmar_14
()
Ответ на: комментарий от Ingmar_14

Очень популярно и развёрнуто. Благодарю.
А не могли бы Вы объяснить ещё работу функции acpi=copy_dsdt (извиняюсь за оффтоп)? А то без этой опции у меня на нетбуке проблемы. И вообще, эта опция - это «костыль»?

carasin ★★★★★
()
Ответ на: комментарий от carasin

А не могли бы Вы объяснить ещё работу функции acpi=copy_dsdt (извиняюсь за оффтоп)?

Я полагаю, что используя эту директиву мы делаем всё то же самое, но используя пофиксенный DSDT(нами или кем-то ещё). То есть, применяя acpi_osi=«Linux» - к overridden DSDT получаем полностью рабочую схему ACPI. Тогда, как в случае с нефиксенной DSDT от порезанного vendor' ом BIOS - acpi_osi=«Linux» нам ничего не даёт (почему см. пред. пост).

С уважением, Ingmar_14.

Ingmar_14
()
Ответ на: комментарий от Ingmar_14

Ingmar_14

Я полагаю, что используя эту директиву мы делаем всё то же самое, но используя пофиксенный DSDT(нами или кем-то ещё). То есть, применяя acpi_osi=«Linux» - к overridden DSDT получаем полностью рабочую схему ACPI. Тогда, как в случае с нефиксенной DSDT от порезанного vendor' ом BIOS - acpi_osi=«Linux» нам ничего не даёт (почему см. пред. пост).

Не-а... Это не оно. Я использовал acpi=copy_dsdt и в дефолтном ядре Fedor'ы, и с самосборным. Эфеект в обоих случаях схожий: это заставляет не отваливаться wi-fi соединение (чип AR9285). Вот только в дефолтном ядре иногда остаются проблемы, а в кастомном (с моей DSDT) уже нет.
Вот мне и хотелось бы знать, что конкретно делает опция acpi=copy_dsdt? Единственная догадка, которой я могу попытаться объяснить действие этой опции, звучит так: этой командой сообщается ядру скопировать «куда-нибудь себе» таблицу DSDT и использовать уже скопированную DSDT, а не «вытягивать» её каждый раз напрямую из BIOS'а компа (или же оттуда, где она хранится при вкомпиливании оной в ядро).
Если кто сведущ в теме, подтвердите или опровергните моё высказывание. Мне это действительно интересно.

carasin ★★★★★
()
Ответ на: комментарий от carasin

Если по дефолту стояла виста, какой acpi_os указывать по задумке нужно? Потому как мусор не исчес полностью с acpi_os=!Linux...

mrcim
() автор топика
Ответ на: комментарий от mrcim

Что имеется в виду под словом «мусор»? Ошибки в dmesg? Они могут там возникнуть не только из-за DSDT. Недавно выяснилось, что причиной может стать, например видеокарта. А вообще, советую перечитать этот трэд.

carasin ★★★★★
()
Ответ на: комментарий от carasin

Не-а... Это не оно.

carasin, и всё-таки я думаю, что это ничто иное как force override. Глобально есть два способа использования fixed DSDT:
1. Собрать ядро с кастомным DSDT (несколько вариантов как собрать).
2. Использовать initramfs и сделать override «на лету».

На всякий случай можно по этому поводу глянуть здесь, например (хоть я подозреваю, что Вы и так в курсе :)): http://www.lesswatts.org/projects/acpi/overridingDSDT.php

Или, быть может, Вы имели ввиду саму реализацию директивы (код)?

С уважением, Ingmar_14.

Ingmar_14
()
Ответ на: комментарий от Ingmar_14

Короче, дело обстоит примерно так:
В некоторых ноутах (например, в ряде моделей Toshib'ы) кривой BIOS: он «коробит» DSDT во время обращения ОС к нему для «разруливания» функций ACPI. Т.о., каждый раз, обращаясь за ACPI, ОС получает от «железа» «испорченную» таблицу DSDT. Использованием же опции acpi=copy_dsdt мы говорим ядру скопировать DSDT в начальный момент загрузки в kernel_space до обращений к BIOS'у для «разруливания» функций ACPI. Т.о., в дальнейшем будет использована корректная DSDT из буфера в kernel_space'е.
Насколько я понял, если BIOS кривой и «портит» DSDT, то и при использовании ядра с вкомпиленной кастомной таблицой DSDT без опции acpi=copy_dsdt BIOS всё равно будет «коробить» DSDT.

carasin ★★★★★
()
Ответ на: комментарий от carasin

Использованием же опции acpi=copy_dsdt мы говорим ядру скопировать DSDT в начальный момент загрузки в kernel_space до обращений к BIOS'у для «разруливания» функций ACPI.

То есть force override :)

Ingmar_14
()
Ответ на: комментарий от Ingmar_14

Ingmar_14

То есть force override :)

Но не использовать вместо этой DSDT какую-либо другую.

carasin ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.