Set Kernel to trick BIOS that it’s running a Windows version



Some devices especially laptops is trying to limit the function of Linux by cutting down some hardware or limit, this will make not only Linux distros but also Android-x86 based OS like Darkmatter working improperly.
Fortunately this can be fixed by faking the OSI (Operating System Interface Level ) string to make BIOS thinking Linux is a supported version of Windows :D
So let’s get started.

I. Preparation
  • A Linux Live USB. (or a Linux distro that you are using).

Yea you only need Linux distro to identify the Windows OSI you need to fake. If you are a newcomer to Linux, I’d recommend to check some of Ubuntu (and their “flavour”). One of my recommendation is Xubuntu , a Ubuntu version that using Xfce as Desktop Environment so it’s kinda light.

(NOTE : You don’t need to install Linux after created USB, we only make LiveUSB to identify the OSI string.)

To flash the iso, you can use Etcher


2. Getting OSI string in the BIOS.
Now boot to USB, connect to the Internet and then open Terminal. install acpica-tools and iasl tool.

sudo apt install acpica-tools iasl

(apt is the package manager of Ubuntu or Debian-based distro, if you use other distro like Fedora (rpm, dnf) or Arch (pacman), please use the right package manager to install)

Next, time to dump ACPI tables.

sudo acpidump > acpi.log
sudo acpixtract acpi.log
sudo iasl -d dsdt.dat


You will have the dsdt.dsl in your home folder, open it using File Manager (in Xfce is Thunar). Look into home folder.


and you will see the file. In my case, I’m using Dolphin (FM of KDE) so my file is here


Open the file and find “Windows” (using Ctrl+F, of course ) and you will see your OSI version identified by BIOS.


If you wonder what are those Windows + year here mean : https://docs.microsoft.com/en-us/windows-hardware/drivers/acpi/winacpi-osi

I will the latest one in my BIOS which is Windows 2012 ("Windows 2012" for Windows 8 and Windows Server 2012). It is recommended for you to use the latest string in your BIOS too.

So now you know the OSI version need to fake, now comes to the final part, edit boot manager.

3.Edit Boot Manager (or GRUB2 bootloader).



Now it’s time to edit entry for PhoenixOS Darkmatter (or any Android-x86 based OS). Add the following line
acpi_osi=! acpi_osi='OSI Version'
For example I said I’m gonna fake as Windows 2012 so I’ll set like
acpi_osi=! acpi_osi='Windows 2012'
Into the entry like this example :
insmod all_video
search --set=root --file /findme
linux /kernel quiet root=/dev/ram0 androidboot.selinux=permissive acpi_osi=! acpi_osi='Windows 2012' acpi_sleep=s3_bios,s3_mode SRC=/
initrd /initrd.img
Save it and try to boot.

** Some note made by linesma from Manjaro Forum that I found it pretty interesting.
https://forum.manjaro.org/t/how-to-choose-the-proper-acpi-kernel-argument/80035

Note on acpi_osi=!
This argument disables all vendor strings that maybe present. It should only be used if one of the above OSI strings does not work on its own. If you use it when it is not needed, you maybe able to boot without any acpi errors, but your touchpad or wifi will not work. It also must be used in combination one of the above OSI strings.
Note for Dell Laptops
Sometimes the above kernel parameters will not work properly on some Dell laptops. If that is the case, you can try the following: acpi_rev_override=# Replace the “#” with a number between 1 to 5. In order to have this kernel parameter applied properly, cold booting (shutting your system down completely before restarting) your laptop twice may be required.
Adding the acpi kernel to grub
Once you have found the kernel argument that works the best for your hardware, you need to add it to grub in order to have it applied every time you boot your system. This is easier than it sounds. The problem most users have is syntax or how to type it on the appropriate line. They key to having the argument recognized is to only use “single quotes”, or as we call them in the United States, the apostrophe.
Additional Notes
The kernel parameter apci_osi=Linux can be used in newer (late 2019 and later) Asus laptops to fix an issue where the external HDMI port is not working. Use this one instead of a Windows related parameter.
So I hope I’ve wrapped up almost everything about this topic. Good luck :).

(refer to number 5 of this post made by arter97 : http://arter97.blogspot.com/2018/08/saving-power-consumption-on-laptops.html)
 
Huy Minh

Comments

Erkan

Novice
Nov 30, 2019
5
2
3
Turkey
VC
10
More  
Games I Play
PUBG MOBILE
My laptop is lenovo g50-80 so should i use apci_osi=Linux instead of windows related parameter or should i find correct windows parameter with linux.
 

privat

Novice
Feb 3, 2020
15
2
3
mataram
VC
34
More  
Games I Play
COD-MOBILE
Im not using dark matter grub boot loader. Im using Linux Mint as my primary OS with grub-customizer instead, windows is just for my installation media since there is no available iso darkmatter version. Since i have 4 OS in my pc darkmatter grub became not working properly.
 
Last edited:

Get Connected

Discord Server

Latest From Blog

Get Connected

Discord Server

New Threads

Latest From Blog