S2ram

Jump to: navigation, search

◄設定

s2ram - 讓休眠儲存到RAM的功能順利執行


這裡的目的是要讓任何機器執行 s2ram 都能夠讓它們順利休眠。

重要

這個軟體稱為 suspenduswsusp 而且在大多數的分支版本中都已經包括在安裝裡。

如果你 s2ram 的版本沒有像本文中所描述的這些參數,試著取得更新的版本,例如從 http://suspend.sf.nethere

這個 -m 和 -v 的參數都已經在最近的版本中加入了。

背景


休眠儲存到RAM的功能在大多數的機器上已經沒問題 - 這代表這些機器能夠重新喚醒並且回復工作狀態,鍵盤和硬碟仍然能夠接收訊號,但是要讓顯示卡和螢幕背光回復,你需要更多的技巧。

這裡有些不同的方式可以試試:

  • acpi_sleep=s3_bios 加到你的核心
  • acpi_sleep=s3_mode 加到你的核心
  • 把上列兩者一起 (acpi_sleep=s3_bios,s3_mode) 加到你的核心
  • 系統喚醒之後,從 userspace 送回顯示卡畫面 vbetool
  • 在休眠之前取得 video 模式數字,並且在喚醒之後設定好 video 模式 vbetool
  • 在休眠之前儲存 VBE 狀態,並且在喚醒之後回復它 vbetool
  • 在休眠之前儲存 VGA 的 PCI config space ,並且在喚醒之後回復它Since kernel 2.6.16, acpi_sleep 參數可以設定在 runtime (不需要重新開機) /proc/sys/kernel/acpi_video_flags, 參數是 "1" 即為 s3_bios, "2" 即為 s3_mode ,至於 "3" 即是兩者。

像這些小技巧的更多資訊你可以在 kernel-source (一般都在 /usr/src/linux) 的文件 Documentation/power/video.txt 找到更多。

有些機器當它們使用 framebuffer console 時將不能順利喚醒。舉例像最近的 Dell 和 HP 的型號就很容易在這裡喚醒失敗。 你可以在 bootloader 的 kernel 設定中加入 vga=0 將 framebuffer 給關閉起來。這項 grub 的設定檔通常是在 /boot/grub/menu.lst 可以找到。 如果你的機器只能在沒有 frambuffer 的情況下運作,請告訴我們你的情況如何。

如果這邊所描述的方式都不像是你的情況,那麼你的機器是喚醒時是完全當機或只是顯示功能無法喚醒,就是很重要的檢查動作。 最好的檢查方式是開啟你的終端機系統 (/bin/bash),執行 s2ram -f ,之後再喚醒,當你的畫面還是一片黑,確認按鍵 "Caps Lock" 是否仍正常 (你應該看看鍵盤的 Caps Lock 燈號)。如果燈號正常,那就很可能只是顯示上的問題。如果不是,那就很可能是 BIOS 的問題或 Linux kernel 的bug。


為什為是 s2ram ?


  • 使用 vbetool 資源來儲存 VBE 的狀態並不容易: 你得在休眠之前備份顯示卡的狀態到暫存檔,並在喚醒時復原它。要使用一個 script 來處理當然可行,但使用一個完整的程式來處理卻更為簡單。
  • 你需要瞭解你的機器需要的是哪一個可行方案。s2ram 包含一個支援的資料庫可以知道哪些機器是可以使用的,所以如果你的機器有被支援,休眠功能就像呼叫 "s2ram" 一樣簡單。

OK, 談得夠多了!開始動手吧!


我要到哪裡才能取得它?

s2ram 是 suspend 專案計畫的一部份,該計畫是在 sourceforge 與 packages for various distributions are available]。

如何使用它?

安裝它,然後以 s2ram 呼叫它。如果您的機器在它的資料庫名單之中,那你的機器就應該能休眠儲存在RAM裡。但要小心過程,一些驅動程式在休眠時會被後卸載,在喚醒時再重新載入它。 如果你想要知道你的機器在資料庫名單中是使用哪一個方式,執行 s2ram -n

S2ram 已經合併在最新版的 powersaved: 如果 suspend 套件已經安裝好了,如果你的機器可以休眠儲存到RAM,而且根據結果來開啟或關閉 "休眠按鈕",powersaved 在啟動之前會檢查 (使用 s2ram -n) 。

我的機器沒有在資料庫的名單裡,我該怎麼做?

如果有找到哪一個方式可以使用在你的機器上,請將資訊給我們,並將 s2ram -i 的結果一起給我們。

一些從 s2ram 指令模式可以運作的可行方式:

marek@mantisha:~> /usr/sbin/s2ram -h
Usage: s2ram [options]
  -h, --help            this text.
  -V, --version                         version information
  -n, --test            test if the machine is in the database.
  -i, --identify        prints a string that identifies the machine.
  --nofbsuspend         do not suspend the framebuffer (debugging only!).
  --force               force suspending, even on unknown machines.

The following options are only available with --force:
  --vbe_save            save VBE state before suspending and restore after resume.
  --vbe_post            VBE POST the graphics card after resume.
  --vbe_mode            get VBE mode before suspend and set it after resume.
  --radeontool          turn off the backlight on radeons before suspending.
  --pci_save            save the PCI config space for the VGA card.
  --acpi_sleep <acpi_sleep>     set the acpi_sleep parameter before suspend
                        1=s3_bios, 2=s3_mode, 3=both

這些應該是主要的選擇參數。記下你在未知機器上使用的 -f 參數它後面新增的可行方式。參數 -a 後面增加的參數值必需是 1 到 3,分別為 s3_bios,s3_mode以及兩者。

調查未知機器可行方式的最好辦法是在開機時加上 init=/bin/bash 來到最精簡的環境,然後這麼做:

 # mount /proc
 # mount /sys
 # s2ram -f

如果一次就成功,那一切就好辦了。把 s2ram -i 的結果送給我們,也別忘記提到 s2ram -f 是否在文字模式還順利。 如果沒有成功,請嘗試下列不同的方式:

  • s2ram -f -a 3
  • s2ram -f -a 2
  • s2ram -f -a 1
  • s2ram -f -p -m
  • s2ram -f -p -s
  • s2ram -f -m
  • s2ram -f -s
  • s2ram -f -p
  • s2ram -f -a 1 -m
  • s2ram -f -a 1 -s

如果這些組合參數都沒用,就加上 "-v" 再試試。 小記:把 "-a" 參數和 vbetool 參數 ("-p","-m","-s") 混合起來通常是最後的手段,那通常沒有什麼意義 唯一的例外是最新的 ThinkPads 64bit,它通常只能在 64bit 模式之下用 "-a 1 -m"。 這邊的其中一種方式,希望能讓你的機器復活起來(而且背光也能復活)。 當你發現可以運作的組合,請把 s2ram -i 的結果以及你的資訊給我們。如果你發現有多種組合都可以運作 (例如: "s2ram -f -a 3" 與 "s2ram -f -p -m" 兩個可以在你的機器上運作),那麼 in-kernel 方式的 ("-a") 應該會比 userspace 方式的 ("-p","-m" 和 "-s") 更適合。

如果你發現一種組合可以運作,請在報告 s2ram 開發者之前查明下列兩種方式是否成功:

  • 當在終端機模式之下運作 s2ram
  • 當在 X 介面之下運作 s2ram

在一般文字操作模式中使用 "-p" 和 "-m" 之後可以很正常的運作,而在 framebuffer 操作模式亦能轉換操作模式而簡單的解決。儘管這好像是說 "-s" 是比較好的,然而 "-m" 如果能用,那它還是最好的。

你要確實從最精簡的文字操作介面嘗試看看。告訴我們這樣能不能運作比那些只在 X 之下使用的還來得有用處多了。你也不能故意做一些反向的操作,就像從 powermanagement daemon 喚醒之後卻立刻關機。

任何事都正常,但是我機器的背光仍然在休眠中

如果你的機器是 Radeon 圖型顯示卡而且螢幕電源沒有在休眠時關起來,試著加上 "-r" 到你的切換參數之中。在 ThinkPads 的 30 series (T30, X31, R32,... ) 我們知道需要這樣才行。 如果你的機器不是用 Radeon 圖型晶片,這個參數就沒有意義了。

我的機器有在資料庫白名單裡但仍不能運作,我該做些什麼?

這裡有一些型號相同的機器在我們的白名單中,這很可能和我們原先所匹配的機器上是不同的。

關於 "我的機器是不是在白名單" 的一些程序:找出你機器執行需要用到的一些項目給我們,並且把 s2ram -i 的結果一起給我們。這樣我們才能對照更新白名單。


如何連絡到 s2ram 的作者們?


電子郵件請寄到 suspend-devel@lists.sourceforge.net 給開發作者們的 mailinglist。如果因為一些原因不能順利寄送,你可以在 https://bugzilla.novell.com 建立一個 bugreport,即使你不是使用 openSUSE (openSUSE 產品的錯誤文件最高編號居然是 "Mobile Devices")。如果你是針對我的電子郵件 seife@suse.de 而寄來的,那麼你的信很可能會在我茫茫大海的收件匣中錯失掉。然而 mailinglist 或 bugzilla 通常會有最快時間的回應,還有很多有知識的人能夠幫助你。

重要: 我們沒辦法知道你的心裡想要的是什麼,也不知道你嘗試了什麼,所以請按照如下所述:

  • 你可以運作的 s2ram 參數是什麼
  • 你測試 X Window 與文字操作介面的結果 (Ctrl-Alt-F1 或在這裡描述文字介面的結果)
  • 如果你有任何需要特別的設定之後才能運作,也要提及。
  • s2ram -n 顯示的結果

不要安裝任何東西的測試辦法

Sitsofe Wheeler 發現的辦法,很多機器能夠不安裝任何東西而被拿來測試,只要像這樣做 openSUSE 10.2 Live DVD

目前每個 distributions 套件的最新情況


SUSE / openSUSE

最新版的套件可以在 Stefan Seyfried's Buildservice 專案中找到,它在 http://software.opensuse.org/download/home:/seife 或是 openSUSE Factory 的目錄,這個套件叫做 "suspend"。 關於最新版的套件,你可能需要從一些提供者那裡取得 libx86 套件來安裝。

Debian

Tim Dijkstra 負責管理 debian 的套件,這個套件被稱為 uswsusp,放在 http://packages.debian.org/unstable/admin/uswsusp

Gentoo

這裡 Gentoo 的套件被稱為 suspend,它在 portage。可以參考 Gentoo Linux Handbook 來幫助您如何在 Gentoo 進行安裝。

其他

如果你知道關於其他 Distribution 的最新版套件,請更新這則文章或在 suspend-devel mailinglist 通知我,我會來更新內容。

整合在其他專案之中的 (或 "如何使圖型介面一起運作")


openSUSE 10.2+ / pm-utils

openSUSE 10.2 及之後的版本,就像其他最近新版的 distribution 一樣使用 pm-utils 來做休眠功能的執行框架,所以設定的參數說明了 here 可以給 s2ram 來使用。

Powersave

s2ram 整合在最新版的 powersaved,如果你的機器沒有在 s2ram 的資料庫名單的話,他還有一些設定參數可以讓你選擇可行的方式來運作。他們在 here 有說明。

SUSE 10.1

SUSE 10.1 使用的是 powersaved,所以設定的參數說明 here 可以使用特別的方式來運作。

一些好用的提示


以下這些是我嘗試要把機器休眠儲存於RAM所發現的 "提示與技巧"。請小心使用 ;-)

Intel 圖型顯示卡

使用 Intel 晶片的機器經常是使用 "s2ram -f -a3" 來運作,它和使用 vesafb 的 framebuffer 相同。如果 "s2ram -f -a3" 不能運作 (例如某些 Dell 的機器),那使用 "s2ram -f -p -m" 就可以了。

Intel 的 Xorg 驅動程式在使用 "-s" (VBE_SAVE) 從來不曾有問題,所以 -m" (VBE_MODE) 很有可能都能夠順利使用。 可以看看 https://bugzilla.novell.com/show_bug.cgi?id=229603 。一般來說,VBE_MODE 會比 VBE_SAVE 更為理想。

ATI 圖型顯示卡

最近我使用的許多 ATI Radeon 圖型顯示卡的機器都不能和 framebuffer 正常運作 (我們經常留意 BIOS 的問題,capslock 燈號在喚醒之後都不能運作) 。 它們在使用 "vga=0" 與 "s2ram -f -p -m" 或是 "s2ram -f -p -s" 通常會運作的不錯。

NVidia 圖型顯示卡

當使用 open-source 的 nv 驅動程式時,休眠儲存到RAM之後喚醒回到 X 圖型介面經常會失敗 這是因為它在喚醒時不知道如何去重新定義你的 NVIDIA 顯示卡。不過當你使用二進位碼 (也就是非 open-source ) 的驅動程式,只需要幾個步驟之後就能夠以 "s2ram -f" 順利運作。詳細的說明請看這裡:NVidia Suspend HOWTO

APIC 的問題

我最近有看過一些機器需要從 kernel 加上 "noapic" 來關閉 APIC,否則它們會不能喚醒或在喚醒後發生一些奇怪的現象 (時間計時器就中斷不工作等等) ,所以這是一些還要嘗試解決的問題。這些問題在最新的 kernel 版本上應該不會再出現, openSUSE 10.2 就真的再也沒有發生過。

你的機器喚醒後立刻關機!

s2ram 是非常 "底部階層" 的系統工具。在不同 "真正的場合" 環境中使用它,你應該把他規劃到您的電源管理設定裡,例如設定到你的 acpid scripts (這些功能的按鍵能觸發休眠)。如果你有使用 powersave 當中的 distribution,請閱讀 Powersave_s2ram 的頁面內容。

這些問題在 kernel 2.6.20 之後都已經修正過,所以這些修正方式應該不再需要了。

不要放棄!

有些時間,要讓休眠儲存在RAM的功能不像我們想像的那麼簡單。如果你想看看其他人經驗過的問題,可以看看 the following report from Bugzilla。 Winfried 是我的英雄 :-) 同時,需要知道很重要的,如果你的機器從休眠儲存到RAM之後喚醒回來,剩顯示器沒畫面或整個完全當機的話,參考這篇 ACPI_Suspend_debugging 的指示來找出答案吧。