主要特點
Open Boot PROM簡稱OBP,可以理解為普通pc的BIOS的增強版,它是控制sun伺服器的引導過程、初始化配置某些硬體和提供了某些診斷的工具。其配置保存在主機板的prom固件中,配置的方式是通過在OBP命令行下進行配置我們可以通過它來調整啟動設備和啟動參數,如從光碟引導,檢測硬體故障完成某些必須在作業系統啟動之前完成的配置,如某些硬體設備的配置等等功能。
Sparc平台上的Solaris作業系統啟動時要經歷BootPROM、引導程式、核心初始化、初始化進程init等階段。BootPROM階段進入了一個作業系統預引導狀態,也就是通常所說的ok狀態。有了這個預引導狀態使得系統可以從硬碟、光碟機、網路等地方載入作業系統,無盤工作站就是利用這個原理實現的。了解Sparc主機的BootPROM(也就是OpenBootPROM)的組成、作用和命令行工作對系統的故障排錯是非常有幫助的。
軟體構成
每個Sun的計算機上都有一塊可程式唯讀存儲器(BootPROM),又稱OpenBootPROM,其中固化了提供基本的硬體診斷、初始化,載入第三方板卡的驅動程式,以及提供一個互動式的命令行環境的軟體。BootPROM通常固化在系統的主機板上。新的系統如Ultra工作站上的BootPROM是用軟體就可以升級的,稱為flashPROM(FPROM)。升級FPROM時需要去掉防寫(通常是設定防寫跳線)。迄今為止,Sun的BootPROM有以下系列版本:
1.x--封閉的接口,不支持第三方設備
2.x--開放式接口,支持第三方設備
3.x--支持軟體可擦寫,固件(firmware)可升級
4.x--支持的設備
5.x--支持硬體域(domain),主要在高端機器(如6800,15K)上套用
查看系統當前的BootPROM版本號如果在作業系統狀態可以用prtdiag-v或則prtconf-v命令,如果在ok狀態則可以用banner命令。
BootPROM中包含以下內容:
1.上電自檢程式(POST)
2.基本的設備驅動程式
3.ok狀態命令行程式
4.省缺的配置參數
其它的系統配置信息如網卡的MAC地址、hostID、用戶可配置參數(又稱NVRAM參數或EEPROM參數)被放在了NVRAM晶片、SEEPROM或系統配置卡SCC上,其目的是為了方便系統遷移。
NVRAM晶片是主機板上可插拔的一塊晶片,有自己的鋰電池用來保證所保存的信息不丟失,同時也提供了系統的時間。將NVRAM晶片設計成可插拔是為了便於一些依賴於hostid的軟體遷移到別的主機。
實現過程
上電自檢過程有以下步驟:
1.低級別硬體自檢
2.測試記憶體和CPU
3.測試匯流排上的設備,構建設備樹
4.安裝控制台,即系統的串口A和串口B
在POST過程中系統還會檢測鍵盤上是否有Stop和其它鍵(A,D或N)同時按下:
如果stop-D同時按下,固件將進入診斷模式,進行更廣泛的硬體自檢,並把結果輸出到控制台A,把NVRAM變數diag-switch?設成true:
如果stop-N同時按下,系統將使用省缺參數,忽略NVRAM中的設定;
如果stop-A同時按下,系統將進入ok狀態,而不自動引導作業系統,即使auto-boot?變數為true。
stop-D和stop-N鍵僅在系統啟動時有效,而stop-A不僅在系統啟動時有效,而且在作業系統狀下也有效。為了避免誤按stop-A鍵引起的系統不可用,可以修改/etc/default/kbd檔案的的參數KEYBOARD_ABORT=disable並運行kbd-i命令在作業系統狀態下禁用stop-A。
通常在自檢過程中如果系統沒有檢測到鍵盤則會向串口列印自檢過程產生的輸出。為了獲得串口上的輸出可以使用Windows中的超級終端軟體。
操作命令
在ok狀態下可以運行OpenBoot命令,這些命令用來檢測設備、設定參數、引導作業系統、獲得系統信息及幫助信息等。
引導作業系統
boot[device_name]-option
boot-s用默認設備引導作業系統進入單用戶模式
bootcdrom-s用cdrom引導作業系統進入單用戶模式
boot-a互動式啟動作業系統
boot-r引導作業系統,並將檢測到的新硬體加入到作業系統
boot-v詳細模式
獲得命令的幫助
ok狀態下可以使用help命令得到常用命令的幫助,help可以指定一個類別或者某個具體命令。具體分類用不帶參數的help命令可以得到。
例如:helpboot將輸出:
#TODO:justinaddhelpbootoutput
NVRAM參數
printenv,setenv,set-default,set-defaults這些命令用於顯示、設定NVRAM參數
printenv不帶參數時輸出所有NVRAM參數的名稱、當前值、默認值
例如:printenv
VariableNameValueDefaultValue
tpe-link-test?truetrue
scsi-initator-id77
ttyb-mode9600,8,n,1,-9600,8,n,1,-
boot-devicedisknetdisknet
auto-boot?truetrue
local-mac-address?falsefalse
use-nvramrc?falsefalse
nvramrcdevaliaspgx24/pcilf,0...
diag-switch?falsefalse
如果要輸出某個參數的值,可以用printenv命令跟上該參數的名稱,例如要知道當前OpenBootPROM是否自動引導作業系統可以用
printenvauto-boot?
NVRAM參數的命名有一定的規律,凡是布爾值參數名以問號結尾,像auto-boot?,tpe-link-test?,diag-switch?,local-mac-address?,use-nvramrc?等。
改變NVRAM參數用setenv命令,用法setenv參數名參數值,例如:
setenvauto-boot?true
要使修改的參數生效需要運行reset-all命令。
使用setenv修改參數可能引入錯誤,所以OpenBootPROM引入set-default和set-defaults兩個命令用來將NVRAM參數恢復為出廠設定。
set-default用於恢復單個NVRAM參數,set-default用於恢復所有NVRAM參數。
檢測系統匯流排上的設備
OpenBootPROM中的probe族命令用來檢測系統匯流排上的設備。
siftingprobe命令列出這些命令。
probe命令主要是用來檢測scsi或ide設備是否正常,相應的命令是probe-scsi,probe-scsi-all和probe-ide。對於OpenBootPROM版本3.x或以上的系統運行probe族命令時,要確保作業系統未被引到過,否則容易導致系統掛起,從而引起可能的數據丟失。所以謹慎的做法是將auto-boot?設為false,然後重啟系統進入ok狀態。具體的操作辦法是:如果當前處於作業系統狀態,運行eepromauto-boot?=false和init0命令;如果當前處於ok狀態,運行setenvauto-boot?false和reset-all。
如果不想執行上述謹慎的操作步驟,可以在ok狀態通過.registers命令查看所有暫存器的值來確定運行probe族命令是否安全。只有當所有暫存器的值都為0時才是安全的。
probe-scsi命令將檢測主機板上的scsi控制器上接的設備,probe-scsi-all命令除了檢測主機板上的scsi控制器上接的設備外,還將檢測scsi卡上接的設備。probe-ide命令將檢測主機板ide控制器上接的設備。
設備名及設備別名
OpenBootPROM在自檢完成後把設備按照它們在匯流排、控制器中的位置組織成一棵設備樹。show-devs命令用來查看自檢到的設備樹。
#TODO:justinaddshow-devsoutputsample
此外,show-ttys,show-displays,show-nets,show-disks,show-tapes分別用來查看相應類型的設備。
由於使用設備物理名稱表示設備比較複雜,OBP中使用設備別名簡化對設備的表示,devalias命令列出設備別名和設備物理名稱的對應關係。
#TODO:justinadddevaliasoutputsample
除了預定義的設備別名外,OpenBootPROM允許自定義設備別名。要使自定義別名生效,應當將use-nvramrc?設為true。
定義設備別名用nvalias命令,用法nvaliasaliasnamedevice_path
刪除設備別名用nvunalias命令,用法nvunaliasaliasname
在作業系統狀態查看修改NVRAM參數
在Solaris作業系統運行時通過/usr/sbin/eeprom命令可以參看或修改NVRAM參數
不帶參數的eeprom列出所有NVRAM參數,列出單個NVRAM參數在eeprom命令後加上該參數名,設定參數eeprom命令後加上參數名的賦值表達式。例如:
eeprom--顯示所有NVRAM參數
eepromboot-device--顯示默認的引導設備
eepromboot-device=disk2--將別名為disk2的設備設定成默認的引導設備
eepromauto-boot?=true--將OBP設定為自動引導作業系統
要注意的是在某些shell帶有問號的參數需要用單用號引用,如Cshell。