有的童鞋由于工作的需要,或者想體驗一把無廣告的世界,會去嘗試使用Linux的發行版,但是經常被Linux拒之門外,甚至連系統到裝不上,當然這個現象也在越來越少,只有更多的人去使用它,它才會變的更好。
在安裝時遇到問題,無論是度娘還是Google,有些人會使用下面這樣的命令來解決問題。
acpi_osi=linux
nomodeset
nouveau.modeset=0
i915.modeset=0
acpi=off
xforcevesa
那么這些參數是什么意思?作用是什么?
1. 什么是ACPI
它的英文全稱是:Advanced Configuration and Power Interface
中文的意思是:高級配置與電源接口
在以前(比較久遠)的時代,電源管理,包含風扇等多是由底層的BIOS來控制的,操作系統是不負責的,原因也很簡單,當時的硬件五花八門,沒有大一統的規范,那么操作系統就很難去適配。所以電源耗電問題是無法靠操作系統來優化的。
直到有了 ACPI 規范后,就可以通過操作系統來發送 ACPI 命令,以此控制電源的消耗,比如:
- 高性能
- 低性能
- 屏幕亮度
- …
正是因為有了ACPI,我們才能在相同的主板上,安裝不同的操作系統,而不會有異常,大致的工作原理就是開機時,ACPI會詢問操作系統需要控制哪些功能,比如散熱功能,那么ACPI就會把風扇的控制權交給操作系統。
2. 為什么有了ACPI還有問題?
這個問題是一個商人怎樣賺錢的問題,雖然有了 ACPI 規范,但是總有膀大腰圓的企業,特立獨行,自成體系(你們先猜猜是誰)
上面提到,在開機時ACPI會詢問操作系統需要支持哪些功能,但是有一個歷史問題就是,以前是使用 _OS
函數詢問,但是這個函數有問題,后來改成 _OSI
函數來詢問操作系統是否支持特定的接口,在 Linux-2.6.22 版本以前,Linux被ACPI以 _OSI
詢問,會回答TRUE,現在是回答FALSE。
_OSI
有規范其功能,但是Windows生態系沒有按照設計規則,只把它當做 _OS
的替代品,廠商通常只對Windows系統做測試,且根據測試進行選擇適當的BIOS開機路徑,然后才能正常開機。
但是大多數的廠商并沒有對Linux系統做測試,原因很簡單,不賺錢,都是為了賺錢,不磕磣!
Linux系統更新比較頻繁,難以做出一套適用于所有Linux版本的BIOS系統,為了可以正常開機,Linux選擇當ACPI詢問是否支持Windows時,返回TRUE,以此使用window的開機路徑,但實際上兩者是不兼容的,只是為了使用一個折中的方案,總比沒有測試過的要好。
由于Bios廠商沒有對Linux系統做測試,當ACPI使用 _OSI(”Linux”)
詢問操作系統時,操作系統會返回FALSE,因為Linux不敢返回TRUE,畢竟都沒有做過測試,很有可能開不了機,返回FALSE就避免了ACPI對操作系統造成影響。
3. 參數的含義
Linux系統在啟動時會經過 grub,這個時候可以通過 grub 傳遞一些參數給內核。
-
nomodeset
不加載任何關于顯卡的驅動,無論你是獨顯還是集成顯卡。
-
nouveau.modeset=0
關閉Linux自帶的開源顯卡驅動(是為了NVIDIA顯卡所寫),反之=1位打開。
-
i915.modeset=0
關閉Intel顯卡的驅動,這個一般是指CPU中的集成顯卡了。
-
xforcevesa 或 radeon.modeset=0 xforcevesa
關閉AMD的顯卡驅動
-
acpi=off
回到過去,電源管理控制關閉,操作系統將無法控制,完全由BIOS來處理。那么此時,電源、屏幕亮度、風扇等等都將無法控制。
nouveau是一個自由及開放原始碼顯卡驅動程序,是為Nvidia的顯卡所編寫,也可用于屬于系統芯片的NVIDIA Tegra系列,此驅動程序是由一群獨立的軟件工程師所編寫,Nvidia的員工也提供了少許幫助。
該項目的目標為利用逆向工程Nvidia的專有Linux驅動程序來創造一個開放原始碼的驅動程序。由讓freedesktop.org托管的X.Org基金會所管理,并以Mesa 3D的一部分進行散布,該項目最初是基于只有2D繪圖能力的“nv”自由與開放原始碼驅動程序所開發的,但紅帽公司的開發者Matthew Garrett及其他人表示原先的代碼被混淆處理過了。nouveau以MIT許可證許可。
項目的名稱是從法文的“nouveau”而來,意思是“新的”。這個名字是由原作者的的IRC客戶端的自動取代功能所建議的,當他鍵入“nv”時就被建議改為“nouveau”。
4. 參數一般應對什么場景?
如果只是知道這些參數可能還不夠,一定要應用到實際情況當中,下面以我的經驗總結一下什么場景用哪些參數。
當然講之前要知道,這些參數是加到哪里的。
啟動時,e鍵進入配置界面,找到 quiet splash —這個字符串,把后面的—改成nouveau.modeset=0。
這種修改方式是臨時的,如果要永久修改需要進入操作系統之后,修改grub的配置文件。
-
安裝Linux系統時黑屏
- 當你是NVIDIA卡時,并且沒有集顯,直接使用
nouveau.modeset=0
,然后開機進入系統之后,安裝NVIDIA的閉源驅動,這個問題的出現說到底就是英偉達TMD不開源。 - 當你是NVIDIA卡時,并且有集顯,使用
nomodset
,后面和上面一樣,進入系統安裝驅動。 - 當你是AMD卡時,沒有集顯使用
radeon.modeset=0
,有集顯使用nomodset
,進入系統之后安裝驅動。
- 當你是NVIDIA卡時,并且沒有集顯,直接使用
-
系統已經安裝完成,在安裝NVIDIA閉源驅動后,重新啟動后黑屏
使用
nomodset
參數進入操作系統,然后卸載NVIDIA閉源驅動,并且關閉nouveau的開源驅動之后再重新安裝驅動。sudo gedit /etc/modprobe.d/blacklist.conf
在最后一行加入
blacklist nouveau
然后執行
sudo update-initramfs -u
最后還需要重啟。
-
電腦使用顯卡相關的參數后依然無法開機
這可能就是BIOS比較特殊,Linux操作系統支持其開機路徑,大部分的原因是ACPI導致的,那么需要關閉ACPI。使用
acpi=off
參數。