The solution to start the black screen after installing deepinv20 on Thinkpad-like notebooks

I have an old Thinkpad X220 in my hand, and I updated it with a solid state disk, so I wanted to install deepinV20 and try it, but there were many problems. The installation went smoothly, everything was normal, and the default installation of deepin did not give people too many choices. But when I rebooted, it seemed that I couldn't boot up. After the grub stage, the black screen stuck in the dark, and after a while, the drm:drm_atomic_helper_wait_for_flip_done and other type errors popped up again. It means I don’t feel like going down. The online check says it will start, but I have to wait for more than half an hour. I didn’t have the service to wait, so I restarted. The result is still the same. I checked it again and said it was connected. The external monitor can be started, and it is true after a try! I don't know why. I changed the parameters of grub2 and tried a few on the Internet.
After reading many solutions, I found acpi_osi=! acpi_osi='Windows 2009' is
mainly to modify the grub file, enter sudo vi /etc/default/grub in the Deepin operating system terminal, enter the password and modify the file content: GRUB_CMDLINE_LINUX_DEFAULT= "Acpi_osi=! acpi_osi='Windows 2009' nouveau.modeset=0 video=SVIDEO-1:0"
Finally, execute the command update and run the sudo update-grub command.
After this modification, no matter whether it is booting or restarting, it is very smooth. But I don’t know why it was changed.
It makes sense to find a point of view:

引导参数acpi_osi的文档告诉:
acpi_osi= [HW,ACPI] Modify list of supported OS interface strings
acpi_osi=“string1” # add string1
acpi_osi="!string2" # remove string2
acpi_osi=!* # remove all strings
acpi_osi=! # disable all built-in OS vendor
strings
acpi_osi=!! # enable all built-in OS vendor
strings
acpi_osi= # disable all strings

                    'acpi_osi=!' can be used in combination with single or
                    multiple 'acpi_osi="string1"' to support specific OS
                    vendor string(s).  Note that such command can only
                    affect the default state of the OS vendor strings, thus
                    it cannot affect the default state of the feature group
                    strings and the current state of the OS vendor strings,
                    specifying it multiple times through kernel command line
                    is meaningless.  This command is useful when one do not
                    care about the state of the feature group strings which
                    should be controlled by the OSPM.
                    Examples:
                      1. 'acpi_osi=! acpi_osi="Windows 2000"' is equivalent
                         to 'acpi_osi="Windows 2000" acpi_osi=!', they all
                         can make '_OSI("Windows 2000")' TRUE.

                    'acpi_osi=' cannot be used in combination with other
                    'acpi_osi=' command lines, the _OSI method will not
                    exist in the ACPI namespace.  NOTE that such command can
                    only affect the OSI support state, thus specifying it
                    multiple times through kernel command line is also
                    meaningless.
                    Examples:
                      1. 'acpiosi=' can make 'CondRefOf(_OSI, Local1)'
                         FALSE.

                    'acpi_osi=!' can be used in combination with single or
                    multiple 'acpi_osi="string1"' to support specific
                    string(s).  Note that such command can affect the
                    current state of both the OS vendor strings and the
                    feature group strings, thus specifying it multiple times
                    through kernel command line is meaningful.  But it may
                    still not able to affect the final state of a string if
                    there are quirks related to this string.  This command
                    is useful when one want to control the state of the
                    feature group strings to debug BIOS issues related to
                    the OSPM features.
                    Examples:
                      1. 'acpi_osi="Module Device" acpi_osi=!' can make
                         'OSI("Module Device")' FALSE.
                      2. 'acpiosi=! acpi_osi="Module Device"' can make
                         'OSI("Module Device")' TRUE.
                      3. 'acpiosi=! acpi_osi=! acpi_osi="Windows 2000"' is
                         equivalent to
                         'acpi_osi=! acpi_osi=! acpi_osi="Windows 2000"'
                         and
                         'acpi_osi=! acpi_osi="Windows 2000" acpi_osi=!',
                         they all will make '_OSI("Windows 2000")' TRUE.

— http://redsymbol.net/linux_boot_parameters/

This parameter adds "Linux" to the list of supported operating systems that the kernel will get when it asks the BIOS "Hey, what do you support". By adding this string, things using ACPI will say "Hey, I have a feature that requires ACPI. I am running Linux-which platforms are supported?" They will retrieve a list that includes Linux.

By setting this to Linux, you basically disable any checks to see if the BIOS indicates that certain ACPI features will work for certain operating systems.
Tell the kernel to cheat the ACPI BIOS and tell it that it is not Linux (which is why it is stupid to specify Linux) . Some BIOSes are known to check whether they are running under Windows or a specific version of Windows, and if they are not, disable them. This parameter allows you to solve this stupid problem.

Attachment: Reference method when stuck in log: We can also use this method to test the effect!
When booting into the Deepin boot interface, press the e key to enter the grup edit page, and add the following code in a space after the last [splash quiet] of the penultimate line of code:
acpi_osi=Linux nomodeset
Note: If there is a space behind [splash quiet] The code is also deleted.
Then press F10 to automatically save and restart, and then Deepin Graphics Driver Manager will automatically start and update the driver. After the update is complete, restart it according to the prompts. At this time, the graphics card program has also switched to the program.
nouveau.modeset=0 has the same effect as nomodeset

Additional:
During the grub phase, you can pass the startup parameters of the kernel (the parameters of the kernel include three types: kernel compiling parameters, startup parameters and runtime parameters). There are many startup parameters that can be passed. For a complete list of startup parameters, see: http ://redsymbol.net/linux-kernel-boot-parameters. Only a few commonly used ones are listed here:

init=: Specify an alternative program for the first process init started by Linux.
root=: Specify the partition where the root file system is located. In grub, this option must be given.
ro,rw: When booting, whether the root partition is mounted in read-only or read-write mode. When not specified, it defaults to ro.
initrd: Specify the path of the init ramdisk. Because the initrd or initrd16 command is used in grub, there is no need to specify the startup parameter.
rhgb: Start the system with a graphical interface.
quiet: Start the system in text mode, and disable the output of most log messages.
net.ifnames=0: For CentOS 7, it is forbidden to use consistent naming for network devices.
biosdevname=0: Used for CentOS 7, which also prohibits network devices from using consistent naming.
: Only when net.ifnames and biosdevname are set to 0 at the same time, consistent naming can be completely prohibited, and the device name of eth0-N can be obtained.
nomodeset Disable Kernel mode setting.
video = Override framebuffer video defaults.

In addition, there are many ways to define root startup parameters, which can be specified by UUID, or you can directly specify the partition where the root file system is located, such as "root=/dev/sda2",
1.4.6 initrd and initrd16 commands
initrd file
can only be tight It is used after the linux or linux16 command to pass the init ramdisk path for the kernel to be started.
Similarly, based on the root partition, you can use an absolute path or a relative path. The path representation method is the same as the linux or linux16 command. For example:
linux16 /-Rescue vmlinuz-0 = the root-d13bce5e247540a5b5886f2bf8aabb35 the UUID = b2a70faf aea4-4d8e-8be8-RO-c7109ac9c8b8 crashkernel = Auto quiet
initrd16 /initramfs-0-rescue-d13bce5e247540a5b5886f2bf8aabb35.img
a detailed Reference: https: // www. cnblogs.com/f-ck-need-u/archive/2017/06/29/7094693.html

Kernel parameters:
http://redsymbol.net/linux-kernel-boot-parameters/

Guess you like

Origin blog.csdn.net/seaship/article/details/110679040