What do the kernel parameters acpi_osi=linux and acpi_backlight=vendor do?
The kernel parameters are documented at kernel.org.
To understand what acpi_osi
does, you roughly need to know how ACPI works.
ACPI consists of so-called tables that the BIOS loads into RAM before the operating system starts. Some of them simply contain information about essential devices on the mainboard in a fixed format, but some like the DSDT table contain AML code. This code is executed by the operating system and provides the OS with a tree structure describing many devices on the mainboard and callable functions that are executed by the OS when e.g. power saving is enabled. The AML code can ask the OS which OS it is by calling the _OSI
function. This is often used by vendors to make workarounds e.g. around bugs in some Windows versions.
As many hardware vendors only test their products with the (at that time) latest version of Windows, the "regular" code paths without the workarounds are often buggy. Because of this Linux usually answers yes when asked if it's Windows. Linux also used to answer yes when asked if it's "Linux", but that caused BIOS vendors to work around bugs or missing functionality in the (at that time) latest Linux kernel version instead of opening bug reports or providing patches. When these bugs were fixed the workarounds caused unnecessary performance penalities and other problems for all later Linux versions.
acpi_osi=Linux
makes Linux answer yes again when asked if it's "Linux" by the ACPI code, thus allowing the ACPI code to enable workarounds for Linux and/or disable workarounds for Windows.
acpi_backlight=vendor
changes the order in which the ACPI drivers for backlights are checked. Usually Linux will use the generic video
driver, when the ACPI DSDT provides a backlight device claiming standard compatibility and will only check other vendor specific drivers if such a device is not found. acpi_backlight=vendor
reverses this order, so that the vendor specific drivers are tried first.
The first Google result for "acpi_osi" explains acpi_osi=linux
:
[...] BIOS's usually disable functionality if Windows is not detected [...] by default the kernel responds false when asked if Linux is running.
acpi_osi=Linux
tells the kernel to respond true.(seedrivers/acpi/osl.c
) It seems that you need to tell the BIOS the truth.
The second Google result for "acpi_osi" explains acpi_backlight=vendor
:
acpi_backlight=vendor
will prefer vendor specific driver (e.g.thinkpad_acpi
,sony_acpi
, etc.) instead of the ACPIvideo.ko
driver.