博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
类thinkpad笔记本安装deepinv20后启动黒屏的解决
阅读量:4041 次
发布时间:2019-05-24

本文共 5524 字,大约阅读时间需要 18 分钟。

手上有台旧的thinkpad X220,更新加装了块固态盘,便想安装deepinV20试一下,结果出了许多的问题。安装时挺顺利,一切正常,deepin 的默认安装也没有给人过多的选择。可是一重启,就好象启动不了了,过了grub阶段就暗夜黑屏卡在那不动了,过了好一阵,才又弹出drm:drm_atomic_helper_wait_for_flip_done等类型错误。就是感觉不会向下走的意思,网上查说是会启动但要等上半小时之类,我是没有功服去等的,就重启,结果还是一样,又查了下,说是接上外接显示器可以启动,试了一下还真是这样!不知什么原因。改了一下grub2的参数试了网上几个都不行!

看了很多的解决方法,然后找到了acpi_osi=! acpi_osi=‘Windows 2009’
主要是修改grub文件,在Deepin操作系统终端中输入sudo vi /etc/default/grub,输入密码后修改文件内容:GRUB_CMDLINE_LINUX_DEFAULT=“acpi_osi=! acpi_osi=‘Windows 2009’ nouveau.modeset=0 video=SVIDEO-1:0”
最后,执行一下命令更新,运行sudo update-grub命令即可。
经过这个修改后,不管是开机还是重启都非常的顺利。但是搞不清为什么这样改。
找到一个观点觉得有点道理:

引导参数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/

该参数将”Linux”添加到内核在询问BIOS“嘿,你支持什么”时将获得的受支持操作系统列表。通过添加该字符串以后,使用ACPI的东西会说“嘿,我有一个需要ACPI的功能,我正在运行Linux – 支持哪些平台?”他们会找回一个包含Linux的列表。

通过将此设置为Linux,您基本上禁用任何检查以查看BIOS是否表示某些ACPI功能将适用于某些操作系统

告诉内核欺骗ACPI BIOS并告诉它它不是Linux(这就是为什么指定Linux是愚蠢的)。已知某些BIOS会检查它们是在Windows或特定版本的Windows下运行,如果不是,则禁用它们。这个参数让你解决这个愚蠢的问题。

附:卡在log时的参考方法:我们也可用这种方法测试效果!

开机进入引导Deepin界面时,按e键,进入grup编辑页面,在倒数第二行代码的最后【splash quiet】后边空一格添加以下代码:
acpi_osi=Linux nomodeset
备注:如果【splash quiet】后边原本有代码的也删除掉。
然后按F10自动保存重启,然后深度的显卡驱动管理器会自动启动并更新驱动,待更新完成后根据提示重启即可,此时显卡方案也切换了方案。
nouveau.modeset=0 与nomodeset 作用相同

附加:

在grub阶段可以传递内核的启动参数(内核的参数包括3类:编译内核时参数,启动时参数和运行时参数),可以传递的启动参数非常非常多,完整的启动参数列表见:http://redsymbol.net/linux-kernel-boot-parameters。这里只列出几个常用的:

init= :指定Linux启动的第一个进程init的替代程序。

root= :指定根文件系统所在分区,在grub中,该选项必须给定。
ro,rw :启动时,根分区以只读还是可读写方式挂载。不指定时默认为ro。
initrd :指定init ramdisk的路径。在grub中因为使用了initrd或initrd16命令,所以不需要指定该启动参数。
rhgb :以图形界面方式启动系统。
quiet :以文本方式启动系统,且禁止输出大多数的log message。
net.ifnames=0:用于CentOS 7,禁止网络设备使用一致性命名方式。
biosdevname=0:用于CentOS 7,也是禁止网络设备采用一致性命名方式。
:只有net.ifnames和biosdevname同时设置为0时,才能完全禁止一致性命名,得到eth0-N的设备名。
nomodeset Disable Kernel mode setting.
video= Override framebuffer video defaults.

另外,root启动参数有多种定义方式,可以使用UUID的方式指定,也可以直接指定根文件系统所在分区,如"root=/dev/sda2",

1.4.6 initrd和initrd16命令
initrd file
只能紧跟在linux或linux16命令之后使用,用于为即将启动的内核传递init ramdisk路径。
同样,基于根分区,可以使用绝对路径,也可以使用相对路径。路径的表示方法和linux或linux16命令相同。例如:
linux16 /vmlinuz-0-rescue-d13bce5e247540a5b5886f2bf8aabb35 root=UUID=b2a70faf-aea4-4d8e-8be8-c7109ac9c8b8 ro crashkernel=auto quiet
initrd16 /initramfs-0-rescue-d13bce5e247540a5b5886f2bf8aabb35.img
详细可参考:https://www.cnblogs.com/f-ck-need-u/archive/2017/06/29/7094693.html

内核参数:

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

你可能感兴趣的文章
苹果Swift编程语言入门教程【中文版】
查看>>
捕鱼忍者(ninja fishing)之游戏指南+游戏攻略+游戏体验
查看>>
iphone开发基础之objective-c学习
查看>>
iphone开发之SDK研究(待续)
查看>>
计算机网络复习要点
查看>>
Variable property attributes or Modifiers in iOS
查看>>
NSNotificationCenter 用法总结
查看>>
C primer plus 基础总结(一)
查看>>
剑指offer算法题分析与整理(一)
查看>>
剑指offer算法题分析与整理(三)
查看>>
Ubuntu 13.10使用fcitx输入法
查看>>
pidgin-lwqq 安装
查看>>
mint/ubuntu安装搜狗输入法
查看>>
C++动态申请数组和参数传递问题
查看>>
opencv学习——在MFC中读取和显示图像
查看>>
retext出现Could not parse file contents, check if you have the necessary module installed解决方案
查看>>
Matlab与CUDA C的混合编程配置出现的问题及解决方案
查看>>
PaperDownloader——文献命名6起来
查看>>
如何将PaperDownloader下载的文献存放到任意位置
查看>>
C/C++中关于动态生成一维数组和二维数组的学习
查看>>