Если у вас нет проблем с ACPI т.е. все кнопочки работают и никаких ошибок связанных с ACPI в логах не появляется. Что ж во первых я вас поздравляю закрывайте эту страницу и идите пить к примеру кофе/чай. Во вторых даже отсутствие ошибок в логах и абсолютно полностью работающая система не признак отсутствия ошибок в DSDT так что дальше смотрите сами. В любом случае проверка займет всего пару минут. И как поступить решать не мне.
Собственно у меня с моим ноутбуком AS5730ZG-323G25Mi изначально никаких проблем не было. Но дальше, как это часто бывает, расследую причины одной ошибки решил проверить DSDT.
Для тех кто захочет подковаться в теории: HOWTO: Fix Common ACPI Problems (DSDT, ECDT, etc.) и ACPI/Fix common problems
Далее переходим к практике… Для начала нужен главный инструмент
emerge sys-power/iasl
Далее нужна сама таблица DSDT. Для новых ядер
cat /sys/firmware/acpi/tables/DSDT > dsdt.dat
Для тех кто в криокамере
cat /proc/acpi/dsdt > dsdt.dat
Ну а теперь все просто как пять копеек
iasl -d dsdt.dat # Дизассемблируем DSDT
iasl -tc dsdt.dsl # Перекомпилируем DSDT
Если после последней операции вы увидили
iasl -tc dsdt.dsl
(cut)
Compilation complete. 0 Errors, 0 Warnings, 0 Remarks, {ЧИСЛО} Optimizations
Я вас поздравляю закрывайте эту страницу и идите пить чай/кофе.
Вот например что увидел я
> iasl -tc acer-aspire-5730zg-bios.v-1.23-orig.dsl
Intel ACPI Component Architecture
ASL Optimizing Compiler version 20091013 [Dec 10 2009]
Copyright (C) 2000 - 2009 Intel Corporation
Supports ACPI Specification Revision 4.0
acer-aspire-5730zg-bios.v-1.23-orig.dsl 4922: Method (HKDS, 1, NotSerialized)
Warning 1087 - Not all control paths return a value ^ (HKDS)
acer-aspire-5730zg-bios.v-1.23-orig.dsl 5742: Name (_HID, "*pnp0c14")
Error 4001 - String must be entirely alphanumeric ^ (*pnp0c14)
acer-aspire-5730zg-bios.v-1.23-orig.dsl 5801: Method (_WED, 1, NotSerialized)
Warning 1087 - Not all control paths return a value ^ (_WED)
acer-aspire-5730zg-bios.v-1.23-orig.dsl 5801: Method (_WED, 1, NotSerialized)
Warning 1080 - Reserved method must return a value ^ (_WED)
acer-aspire-5730zg-bios.v-1.23-orig.dsl 6182: Method (WMC9, 3, NotSerialized)
Warning 1087 - Not all control paths return a value ^ (WMC9)
acer-aspire-5730zg-bios.v-1.23-orig.dsl 6445: Method (WRCB, 2, NotSerialized)
Warning 1087 - Not all control paths return a value ^ (WRCB)
acer-aspire-5730zg-bios.v-1.23-orig.dsl 6633: Method (WMCD, 3, NotSerialized)
Warning 1087 - Not all control paths return a value ^ (WMCD)
acer-aspire-5730zg-bios.v-1.23-orig.dsl 7277: Method (WMCF, 3, NotSerialized)
Warning 1087 - Not all control paths return a value ^ (WMCF)
acer-aspire-5730zg-bios.v-1.23-orig.dsl 7407: Name (_T_0, 0x00)
Remark 5110 - Use of compiler reserved name ^ (_T_0)
acer-aspire-5730zg-bios.v-1.23-orig.dsl 7444: Name (_T_1, 0x00)
Remark 5110 - Use of compiler reserved name ^ (_T_1)
acer-aspire-5730zg-bios.v-1.23-orig.dsl 7460: Name (_T_2, 0x00)
Remark 5110 - Use of compiler reserved name ^ (_T_2)
acer-aspire-5730zg-bios.v-1.23-orig.dsl 7518: Name (_T_3, 0x00)
Remark 5110 - Use of compiler reserved name ^ (_T_3)
acer-aspire-5730zg-bios.v-1.23-orig.dsl 7562: Name (_T_4, 0x00)
Remark 5110 - Use of compiler reserved name ^ (_T_4)
acer-aspire-5730zg-bios.v-1.23-orig.dsl 7604: Name (_T_5, 0x00)
Remark 5110 - Use of compiler reserved name ^ (_T_5)
acer-aspire-5730zg-bios.v-1.23-orig.dsl 7684: Method (WB15, 6, NotSerialized)
Warning 1087 - Not all control paths return a value ^ (WB15)
acer-aspire-5730zg-bios.v-1.23-orig.dsl 7740: Name (_HID, "*pnp0c14")
Error 4001 - String must be entirely alphanumeric ^ (*pnp0c14)
ASL Input: acer-aspire-5730zg-bios.v-1.23-orig.dsl - 10390 lines, 400823 bytes, 4157 keywords
Compilation complete. 2 Errors, 8 Warnings, 6 Remarks, 1110 Optimizations
Не радостно… Сразу следует сказать вот какой момент пишут, что DSDT зависит еще и от версии биоса. Т.е. при обновлении биоса все якобы нужно начинать с начала. Поэтому я сохранял DSDT в acer-aspire-5730zg-bios.v-1.21-orig.dsl, acer-aspire-5730zg-bios.v-1.23-custom.dsl соответственно. Однако в моем случае производитель не внес никаких изменений. Далее я сохранял acer-aspire-5730zg-bios.v-1.23-custom.dsl уже как acer-aspire-5730zg-bios.v-1.23-custom.dsl и все изменения производил уже над ним.
Дальше я пойду по порядку возникновения ошибок.
4922: Method (HKDS, 1, NotSerialized)
Warning 1087 — Not all control paths return a value ^ (HKDS)
На строчке 4922 видим
Method (HKDS, 1, NotSerialized) # строка 4922
{
(cut)
If (LEqual (0x01, DSEN)) {}
} # строка 5067
Method (_Q19, 0, NotSerialized) # строка 5069 начало нового метода
Так вот собственно решение первой проблемы
Method (HKDS, 1, NotSerialized) # строка 4922
{
(cut)
If (LEqual (0x01, DSEN)) {}
Return (0x00) # вставили
} # строка 5068
Method (_Q19, 0, NotSerialized) # строка 5070 начало нового метода
Далее
5743: Name (_HID, «*pnp0c14″)
Error 4001 — String must be entirely alphanumeric ^ (*pnp0c14)
:::BashLexer
Name (_HID, "*pnp0c14") # строка 5743
Собственно решение
Name (_HID, "pnp0c14") # строка 5743
Для всех вот этих ошибок
5802: Method (_WED, 1, NotSerialized)
Warning 1087 — Not all control paths return a value ^ (_WED)
5802: Method (_WED, 1, NotSerialized)
Warning 1080 — Reserved method must return a value ^ (_WED)
6183: Method (WMC9, 3, NotSerialized)
Warning 1087 — Not all control paths return a value ^ (WMC9)
6446: Method (WRCB, 2, NotSerialized)
Warning 1087 — Not all control paths return a value ^ (WRCB)
6634: Method (WMCD, 3, NotSerialized)
Warning 1087 — Not all control paths return a value ^ (WMCD)
7278: Method (WMCF, 3, NotSerialized)
Warning 1087 — Not all control paths return a value ^ (WMCF)
Решение будет аналогично первому т.е. до скобки закрытия каждого из описанных методов надо поставить Return (0x00)
Вот эта вереница загадок
7408: Name (_T_0, 0x00)
Remark 5110 — Use of compiler reserved name ^ (_T_0)
7445: Name (_T_1, 0x00)
Remark 5110 — Use of compiler reserved name ^ (_T_1)
7461: Name (_T_2, 0x00)
Remark 5110 — Use of compiler reserved name ^ (_T_2)
7519: Name (_T_3, 0x00)
Remark 5110 — Use of compiler reserved name ^ (_T_3)
7563: Name (_T_4, 0x00)
Remark 5110 — Use of compiler reserved name ^ (_T_4)
7605: Name (_T_5, 0x00)
Remark 5110 — Use of compiler reserved name ^ (_T_5)
распутывается вообще банально. Компилятор пытается нам сказать, что вместо _T_0, _T_1, _T_2, _T_3, _T_4, _T_5 использовать T_0, T_1, T_2, T_3, T_4, T_5.
Далее
7685: Method (WB15, 6, NotSerialized)
Warning 1087 — Not all control paths return a value ^ (WB15)
Это мы уже проходили… Опять же вставить Return (0x00)
И наконец то
7741: Name (_HID, «*pnp0c14″)
Error 4001 — String must be entirely alphanumeric ^ (*pnp0c14)
И это уже было… убираем звёздочку.
И вот он финальный аккорд
> iasl -tc acer-aspire-5730zg-bios.v-1.23-custom.dsl
Intel ACPI Component Architecture
ASL Optimizing Compiler version 20091013 [Dec 10 2009]
Copyright (C) 2000 - 2009 Intel Corporation
Supports ACPI Specification Revision 4.0
ASL Input: acer-aspire-5730zg-bios.v-1.23-custom.dsl - 10397 lines, 398866 bytes, 4164 keywords
AML Output: dsdt.aml - 41022 bytes, 897 named objects, 3267 executable opcodes
Compilation complete. 0 Errors, 0 Warnings, 0 Remarks, 1117 Optimizations
Ну вот собственно и что из этого? Это не конец… это только начало.
cp /path/to/acer-aspire-5730zg-bios.v-1.23-custom.hex
/usr/src/dsdt_table.h
Как советует руководство
First in kernel config, disable “Select only drivers that don’t need
compile-time external firmware”
Т.е. Выключаем “Select only drivers that don’t need compile-time external firmware”
Device Drivers —>
Generic Driver Options —>
[ ] Select only drivers that don’t need compile-time external
firmware
[ ] Prevent firmware from being builtThen enable the custom DSDT options in the kernel, and provide a path
to the hex dsdt table that you compiled.
Включаем измененную DSDT
Power management options (ACPI, APM) —>
ACPI (Advanced Configuration and Power Interface) Support —>
[*] Include Custom DSDT
(/usr/src/dsdt_table.h) Custom DSDT Table file to include
Ну и дальше
Recompile your kernel, copy the bzImage, and modify your grub.conf to
point to the new kernel.
В руководствах, кроме компилирования ядра с DSDT, рассмотрены несколько путей решения и как поступать определять вам.
Если что:
acer-aspire-5730zg-bios.v-1.21-orig.dsl.gz
acer-aspire-5730zg-bios.v-1.23-orig.dsl.gz
acer-aspire-5730zg-bios.v-1.23-custom.dsl.gz
Только поменяйте gz1.odt на gz
Comments