LINUX.ORG.RU

Проброс кастомного SSDT в Linux. Как?

 , , ,


1

1

Привет, товарищи.

Есть ноутбук с двумя видеокартами. Intel HD 4000 + AMD 7670m.

Как вы уже догадались, кривые разработчики не додумались сделать отключение AMD 7670m, мне она не нужна от слова совсем. На этом ноутбуке раньше стоях хак, в нем я отключал через SSDT эту видеокарту и в системе определялась только Intel HD 4000. Ноутбук работал идеально тихо и был холодным.

Так как дискретка мне не нужна, я хочу пробросить свою патченную ACPI таблицу в Ubuntu 16.04 Unity, чтобы та «не видела» дискретную видеокарту и не использовала ее. Смысла заводить драйверами ее не вижу.

Вопрос, как в линуксе происходит проброс патченных таблиц? В хаке примерно было так: uefi -> clover (Тут мы заменяем наши таблицы или патчим на лету) -> os x

Логично, в Ubuntu тоже самое, только тут загрузчик grub. Но куда класть SSDT, чтобы grub его подхватил?

Сразу отбросим вопросы: - я знаю как заводить AMD, но мне эта ... AMD не нужна в ноутбуке. Когда его 5 лет назад покупал, сам дурак, знаю. - AMD в UEFI не отключается, 146% - Управление графикой в ноутбуке находится в отдельной SSDT таблице, которая успешно пропатчена и работала в хаке. DSDT не причем - и еще раз - мне ее нужно отключить на уровне ACPI, чтобы ubuntu ее даже не видела. :)


В GNU/linux самый простой путь это:
0) берешь свой dsdt патчишь
1) затем берешь свой ssdt если есть ошибки исправляешь
2) объединяешь dsdt и ssdt с сохранением синтаксиса и удалением лишнего
3) получившегося монстра подсовываешь ядру (я делал так поскольку grub2 меня посылал далеко и надолго. но если у тебя работает через grub2 то ты понял да)
4) параметрами загрузки ядра добавляешь acpi_no_auto_ssdt чтобы бралась готовая ssdt и система не выдумывала брать её из железа.
5) наслаждаешься.

Примеры? Вон там можешь потыкать готовые файлы. Просто dsdt до исправления и после и микс dsdt+ssdt Найдешь битые ссылки пиши ;) починим.

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

Большое спасибо за ссылку. Не совсем понятно, зачем объединять таблицы? Ведь у многих вендоров ACPI раскидано по SSDT, в том числе и процессорная секция. В моем случае с DSDT все нормально (ну вы поняли меня, работает и ладно), а управление AMDGPU находится в отдельной SSDT таблице. И собственно мне нужно подменить всего одну таблицу а не ломать весь DSDT, что я считаю неправильным.

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

Не совсем понятно, зачем объединять таблицы?

Затем что linux (говоря это подразумеваю ядро) знает/умеет только CONFIG_ACPI_CUSTOM_DSDT_FILE="" а это как-бы подразумевает один файл. И да успехов тебе в поисках CONFIG_ACPI_CUSTOM_SSDT_FILE="".

Остальное - любовь/ненависть твои личные проблемы. Потому-что даже вышеозвученный вариант с загрузчиками тоже, насколько я помню, не умеют в несколько таблиц сразу.

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

Вот это я влип тогда. DSDT подбрасывать не вариант, он может меняться. Глюков будет больше.

Но, по-любому же должна быть лазейка. Тот же загрузчик grub, который грузит Ubuntu берет SSDT из материнки и подкидывает их в ядро. И на этом этапе можно ли подменить SSDT?

Прошу прощения за нубские вопросы, но в хаке я на этом съел собаку, а на Linux неприятно огорчен. Делаю первый раз.

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

Надо еще будет у slice спросить (разработчик Clover), может ли его загрузчик грузить Linux. Это конечно из разряда мазохизма, но а вдруг?

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

Вот это я влип тогда. DSDT подбрасывать не вариант, он может меняться.

Меняется ващета SSDT а правильно снятый DSDT он настолько одинаковый что даже ОСЬ из которой снимали не играет роли.

Тот же загрузчик grub, который грузит Ubuntu берет SSDT из материнки и подкидывает их в ядро. И на этом этапе можно ли подменить SSDT?

Да можно. И grub2 умеет подменять на этапе загрузки угадай что? …правильно DSDT!

Надо еще будет у slice спросить (разработчик Clover), может ли его загрузчик грузить Linux.

Должен уметь. А вот умеет ли он кроме DSDT и отдельно от него подменять один SSDT вот это вопрос.

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

Ну так если я включу SSDT -> DSDT он и будет плясать туда-сюда) я об этом и говорю.

Должен уметь. А вот умеет ли он кроме DSDT и отдельно от него подменять один SSDT вот это вопрос.

То, что Clover умеет подменять SSDT, инфа 100%. Я так в El Capitan на ПК спидстеп вылечил и на ноутбуке (о котором сейчас и идет речь) AMD 7670m заблокировал.

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

Ну так если я включу SSDT -> DSDT он и будет плясать туда-сюда) я об этом и говорю.

Моя твоя непонимай. Единственная каша возможно без acpi_no_auto_ssdt загрузится (порядок не играет роли) DSDT+SSDT а затем SSDT из BIOS.

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

Да, я понял. Есть пища для размышлений. Я тогда лучше обгуглюсь, тем более теперь я знаю в какую сторону нужно гуглить мне, чтобы потом был объективный разговор.

Суммарно... огромное человеческое спасибо за то, что направили на путь истинный!

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

Надо еще будет у slice спросить (разработчик Clover), может ли его загрузчик грузить Linux.

Может. Мы делали тройную загрузку Linux/Windows/OS X на Mac mini.

Aceler ★★★★★
()

Вообще если драйвера работают корректно и Runtime Power Management включен (radeon.runpm=1 так как для некоторых ноутов оно может быть отключено по дефолту), то карта и так никогда не будет запитана. Система её будет видеть, но включится она только если ты её используешь через DRI_PRIME.

o-
()
Ответ на: комментарий от init_6

успехов тебе в поисках CONFIG_ACPI_CUSTOM_SSDT_FILE=«»

Эээм.

diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig
index 83e5f7e1..a9cc1776 100644
--- a/drivers/acpi/Kconfig
+++ b/drivers/acpi/Kconfig
@@ -303,12 +303,12 @@ config ACPI_NUMA
 	depends on (X86 || IA64 || ARM64)
 	default y if IA64_GENERIC || IA64_SGI_SN2 || ARM64
 
-config ACPI_CUSTOM_DSDT_FILE
-	string "Custom DSDT Table file to include"
+config ACPI_CUSTOM_SSDT_FILE
+	string "Custom SSDT Table file to include"
 	default ""
 	depends on !STANDALONE
 	help
-	  This option supports a custom DSDT by linking it into the kernel.
+	  This option supports a custom SSDT by linking it into the kernel.
 	  See Documentation/acpi/dsdt-override.txt
 
 	  Enter the full path name to the file which includes the AmlCode
@@ -316,9 +316,9 @@ config ACPI_CUSTOM_DSDT_FILE
 
 	  If unsure, don't enter a file name.
 
-config ACPI_CUSTOM_DSDT
+config ACPI_CUSTOM_SSDT
 	bool
-	default ACPI_CUSTOM_DSDT_FILE != ""
+	default ACPI_CUSTOM_SSDT_FILE != ""
 
 config ARCH_HAS_ACPI_TABLE_UPGRADE
 	def_bool n
diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c
index 95855cb9..c033f05e 100644
--- a/drivers/acpi/bus.c
+++ b/drivers/acpi/bus.c
@@ -52,7 +52,7 @@ struct proc_dir_entry *acpi_root_dir;
 EXPORT_SYMBOL(acpi_root_dir);
 
 #ifdef CONFIG_X86
-#ifdef CONFIG_ACPI_CUSTOM_DSDT
+#ifdef CONFIG_ACPI_CUSTOM_DSDT /* (sic) */
 static inline int set_copy_dsdt(const struct dmi_system_id *id)
 {
 	return 0;
diff --git a/drivers/acpi/tables.c b/drivers/acpi/tables.c
index 2604189d..50be6baa 100644
--- a/drivers/acpi/tables.c
+++ b/drivers/acpi/tables.c
@@ -37,8 +37,8 @@
 #include <linux/initrd.h>
 #include "internal.h"
 
-#ifdef CONFIG_ACPI_CUSTOM_DSDT
-#include CONFIG_ACPI_CUSTOM_DSDT_FILE
+#ifdef CONFIG_ACPI_CUSTOM_SSDT
+#include CONFIG_ACPI_CUSTOM_SSDT_FILE
 #endif
 
 #define ACPI_MAX_TABLES		128
@@ -732,8 +732,8 @@ acpi_os_table_override(struct acpi_table_header *existing_table,
 
 	*new_table = NULL;
 
-#ifdef CONFIG_ACPI_CUSTOM_DSDT
-	if (strncmp(existing_table->signature, "DSDT", 4) == 0)
+#ifdef CONFIG_ACPI_CUSTOM_SSDT
+	if (strncmp(existing_table->signature, "SSDT", 4) == 0)
 		*new_table = (struct acpi_table_header *)AmlCode;
 #endif
 	if (*new_table != NULL)

Просто заменить «DSDT» на «SSDT» может быть недостаточно, это поломает код, копирующий DSDT в системную память. Правда, это нужно только для каких-то глючных систем, так что может и сработать.

Сделать замену одновременно двух таблиц сложнее, так как iasl при создании hex-файла использует одно и то же имя, AmlCode. Если имя менять, или как-то по разным файлам разнести, может и сработать.

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

i-rinat ну я тебя поздравляю ты переименовал DSDT в SSDT… хотя какая нафиг разница как оно обзывается? А принципиально, кроме названия которое ничего не значит, ты что-то менял? Нет? Хорошая попытка.

Сделать замену одновременно двух таблиц

Кхм ващето и DSDT может быть размазана по нескольким файлам и SSDT в системе может быть и десяток штук и больше. Так что твоё переименование вообще ниочем а по хорошему CONFIG_ACPI_CUSTOM_DSDT должно быть примерно такое-же как CONFIG_EXTRA_FIRMWARE т.е. подразумевать не один единственный файл.

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

ты что-то менял

strncmp

а по-хорошему

А по-хорошему на это нужно потратить гораздо больше десяти минут, но проблема всё равно решаемая. Тут нужна личная заинтересованность, которой у меня нет. Максимум — патч с иллюстрацией направления.

i-rinat ★★★★★
()
Последнее исправление: i-rinat (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.