内核引导参数"set acpi_osi=Linux"是什么作用?

我在使用装有Intel HD显卡和Ubuntu 10.10 64位系统的笔记本电脑上遇到了亮度控制的问题。所以当我搜索解决方法时,我发现一个常见的建议是编辑GRUB文件中的一行代码:GRUB_CMDLINE_LINUX_DEFAULT="quiet splash",将其修改为GRUB_CMDLINE_LINUX_DEFAULT="quiet splash acpi_osi=Linux acpi_backlight=vendor"
关于启动参数acpi_osi的文档如下:
acpi_osi=   [HW,ACPI] Modify list of supported OS interface strings
            acpi_osi="string1"      # add string1 -- only one string
            acpi_osi="!string2"     # remove built-in string2
            acpi_osi=               # disable all strings

http://redsymbol.net/linux_boot_parameters/

我找不到任何理由认为这能够解决任何笔记本电脑问题。

所以有人能告诉我内核引导选项acpi_osi=Linux是做什么的吗?

3个回答

我认为你的意思是=Windows,而不是Linux。 该参数告诉内核对ACPI BIOS撒谎,并告诉它自己不是Linux(这就是为什么指定Linux是愚蠢的)。
我确定他的意思是他所写的。是的,如果未检测到Windows,BIOS通常会禁用某些功能,但指定Linux并不愚蠢,因为默认情况下,当被询问是否运行Linux时,内核会返回false。acpi_osi=Linux告诉内核返回true。(参见drivers/acpi/osl.c)看来你需要告诉BIOS实话。
这可能是驱动程序问题或者ACPI实现不正确。你需要拿出你的dsdt并将其反汇编以审查代码,从而更好地理解在Linux OSI下出了什么问题或者被禁用了什么。
参考资料

2这对我在戴尔Vostro 3750上安装Ubuntu 14.04时非常有用,该机型配备了Nvidia GeForce GT 525M和Intel HD显卡。 - jester66

添加该参数将在内核向BIOS询问“你支持哪些操作系统”时,将"Linux"添加到支持的操作系统列表中。通过添加该字符串,使用ACPI的组件会说:“嘿,我有一个需要ACPI的功能,并且我正在运行Linux - 支持哪些平台?”然后他们将得到一个包含Linux的列表。
将其设置为Linux后,基本上禁用了检查BIOS是否表示某些ACPI功能适用于某些操作系统的功能。这通常会使之前隐藏的功能生效。但它也可能破坏以前工作正常的东西,在[希望是]罕见的情况下。 :)

我觉得你的意思是=Windows,而不是Linux。这个参数告诉内核欺骗ACPI BIOS,并告诉它自己是除了Linux之外的其他东西(这就是为什么指定Linux是愚蠢的)。某些BIOS会检查是否在Windows下运行,或者特定版本的Windows下运行,并在不是的情况下禁用功能。这个参数可以让你绕过这种愚蠢的限制。

只适用于Linux操作系统。请访问http://livinginjava.blogspot.com/2010/11/ubuntu-1010-brightness-problem-in-acer.html了解更多信息。 - AIB
这里是另一个链接,它提到了同样解决风扇问题的方法...http://ubuntuforums.org/showthread.php?t=1398596 我觉得这个可以被认为是解决多种类似问题的方法...http://forums.linuxmint.com/viewtopic.php?f=42&t=56323 - AIB