OpenBootPROM的获得和使用!

原创 2010年05月27日 11:20:00

OpenBootPROM和简称是OBP,可以理解为普通pc的BIOS的增强版,它是控制sun服务器的引导过程、初始化配置某些硬件和提供了某些诊断的工具。其配置保存在主板的prom固件中,配置的方式是通过在OBP命令行下进行配置。

我们可以通过它来:
调整启动设备和启动参数,如从光盘引导。
检测硬件故障
完成某些必须在操作系统启动之前完成的配置,如某些硬件设备的配置。
等等功能。

显然x86系统不会有OBP 。

-----------------------------------

simics是超级模拟器,可模拟多种CPU,比如可模拟Sun Blade 1500、Sun Fire 3800-6800、Sun Enterprise 3500-6500等等,可模拟出多个CPU,硬盘,网卡...。可以使用它来模拟OBP。

下面列一下步骤:

1.下载Virtutech.Simics.v3.0.29并使用 Virtutech.Simics.v3.0.29注册文件

Virtutech_Simics_3.0.29-keygen.zip (48.88 KB)

注意:有些环境下使用注册文件需要关闭杀毒软件。


2. 在workspace目录中target/sunfire/中创建一个文件,名为sol-10-u2-ga-sparc-v1.iso,我们只需要OBP,所以随便给个空文件都可以。

3. 选择workspace目录中target/sunfire/peanut-sol10-cd-install1.simics

OBP就出现了。

下面是在网上找的命令,可以练习一下了:

1.Overview

用户界面

可以通过下面的方式进入OBP界面
• halt你的系统,init 1,等等
• 使用组合键 Stop-A
• 没有设定auto-boot?为ture的话每次开机自动进入
• 系统硬件检测到错误,并且不能跳过的话会进入OBP界面


设备树
跟solaris操作系统的设备的物理命名方式相同。

设备别名
设备名通常是类似下面的格式
/sbus@1f,0/esp@0,40000/sd@3,0:a
在我们的使用中很不方便,使用设备别名却是我们的操作相当的方便
devalias
显示当前的别名设置
devalias alias
显示特定设备别名对应的物理设备名
devalias alias device-path
设置别名,如果alias有重复则覆盖掉旧值

注意:这样定义的别名重启不会保存,如果想永久的修改可以考虑nvalias,nvunalias命令,稍后会说到

显示设备树
可用的命令和功能描述
Command                  Description
.properties                 显示当前所在设备节点的属性
dev device-path         选择某个设备节点
dev node-name         在当前设备节点的下级树查找某个设备节点,并且切换到第一个
dev ..                         选择当前设备节点的上一级设备
dev /                          选择设备的根节点
device-end                 离开设备树
" device-path" find-device         Choose device node, similar to dev.
ls                     显示当前设备的下级设备
pwd                 显示当前设备的物理连接路径
see wordname         Decompile the specified word.
show-devs [device-path] 显示设备树,单纯show-devs显示整个机器的设备树
words              显示当前设备的名字

example:

ok dev /zs@1,f0000000
ok .properties
address                            ffee9000
port-b-ignore-cd
port-a-ignore-cd
keyboard
device_type                      serial
slave                                 00000001
intr                                    0000000c 00000000
interrupts                         0000000c
reg                                    00000001 f0000000 00000008
name                                 zs

ok dev /sbus/ACME,widget


ok show-devs
/SUNW,UltraSPARC@0,0
/sbus@1f,0
/counter-timer@1f,3c00
/virtual-memory
/memory@0,0
.
.
.
获取在线帮助
在ok提示符下可以使用下面的命令获取帮助

help                         显示帮助的分类
help category          显示特定分类的可用命令,category使用提示的第一个单词
help command         显示特定命令的帮助

example:
ok help dump
Category: Memory access
dump ( addr length -- ) display memory at addr for length bytes
ok


警告:在操作系统已经开始使用后,STOP-A进入OBP执行命令可能会失败,并且某些命令可能会使系统不可用需要重新启动。如:probe-scsi


2.Booting and Testing Your System
• Boot your system
• Run diagnostics
• Display system information
• Reset the system

Booting Your System

可用参数
• auto-boot?
确定系统加点后是否自动启动,默认一般是true,如果为false则自动进入OBP配置
即ok状态
• boot-command
这个参数用来设置当auto-boot?为true是启动系统使用的命令,默认为boot。你可以使用其他启动命令如:boot –s等。
• diag-switch?
如果为true则使用最大化自检启动系统。默认为false
• boot-device
设定自动启动时的启动设备,一般是你的安装操作系统的硬盘作为启动盘。
• boot-file
This variable contains the default boot arguments that are used when
OpenBoot is not in diagnostic mode.
• diag-device
This variable contains the name of the default diagnostic mode boot device.
• diag-file
This variable contains the default diagnostic mode boot arguments.


这些参数的修改会在下面的Setting Configuration Variables中讲到.

对于普通用户来说
通常的如果auto-boot?参数设定为true,boot命令会自动启动操作系统,并且会自动执行boot-file参数指定的程序或设定。如果想在auto-boot?为false或者在ok模式下启动操作系统,使用boot命令。

Boot命令的使用:
格式:ok boot [device-specifier] [arguments]

Parameter                   Description
[device-specifier]         指定启动系统使用的设备,可以是物理设备名或者别名,通常使用的是别名
cdrom (CD-ROM drive)
disk (hard disk)
floppy (3-1/2” diskette drive)
net (Ethernet)
tape (SCSI tape)
单纯boot命令没有指定device-specifier,系统会使用boot-device指定的设备启动系统


[arguments]         启动时执行的命令或者参数,如果没有指定则执行boot-file参数设定的指令通常也为空

通常的用法
ok boot                   从默认设备启动
ok boot –s             从默认设备启动到单用户(可以指定其他运行等级)
ok boot cdrom         从光盘引导安装
ok boot cdrom –s   从光盘启动一个可运行的系统


Running Diagnostics
OBP中提供了一些诊断工具可以让我们来测试系统中安装的硬件例如:scsi控制器等。
可以使用
ok help diag命令查看可用的test命令,下面列出的命令并不是全部。
Command                 Description
probe-scsi                 Identify devices attached to a SCSI bus.
test device-specifier Execute the specified device’s selftest method. For example:
test net                    test the network connection
watch-clock              Test a clock function.
watch-net                 Monitor a network connection.

几个简单的例子
ok probe-scsi
Target 1
Unit 0 Disk SEAGATE ST1480 SUN04246266 Copyright (C) 1991 Seagate All rights reserved
Target 3
Unit 0 Disk SEAGATE ST1480 SUN04245826 Copyright (C) 1991 Seagate All rights reserved
ok
ok test net
Internal Loopback test - (result)
External Loopback test - (result)
ok
ok watch-net
Internal Loopback test - succeeded
External Loopback test - succeeded
Looking for Ethernet packets.
’.’ is a good packet. ’X’ is a bad packet.
Type any key to stop
....................X.....X...............
ok


Displaying System Information
OBP中提供了几个命令来现实系统的信息,通过这些命令就可以大体的了解系统的配置信息
Command           Description
banner                Display power-on banner.
show-sbus          Display list of installed and probed SBus devices.
.enet-addr          Display current Ethernet address.
.idprom                isplay ID PROM contents, formatted.
.traps                  Display a list of processor-dependent trap types.
.version               Display version and date of the boot PROM.
.speed                 Display processor and bus speeds.

Resetting the System
ok reset-all
  
3.Setting Configuration Variables

介绍怎样访问和修改NVRAM中的参数配置

显示和改变参数配置
Command                 Description
printenv                   显示参数的当前值和默认值
setenv variable value 
设定参数variable的值为value,永久修改,但是通常需要重启才会发挥作用
set-default variable   某个参数设为出厂值
set-defaults              所有参数设定为出厂值
password                 设置密码(小心你的密码,如果设置需要密码并且忘记了就的找SUN换件了)


设置安全参数

可用的参数
• security-mode
• security-password
• security-#badlogins

security-mode参数可选择的值:
full                    除了go命令,其他所有的命令都需要密码
command          除了boot(不带参数)和go命令,其他的命令都需要密码
none                 不需要密码 (default)

example:
ok password
ok New password (only first 8 chars are used):
ok Retype new password:
ok setenv security-mode full

ok go                        (no password required)
ok boot                     (password required)
Password:                 (password is not echoed as it is typed)
ok boot filename         (password required)
Password:                 (password is not echoed as it is typed)
ok reset-all                 (password required)
Password:                 (password is not echoed as it is typed)

Changing the Power-on Banner
设定机器刚刚加电时的banner信息,感觉出了最基本的,其他用处不大。


可用的设置banner的参数:
• oem-banner
• oem-banner?
• oem-logo
• oem-logo?

ok setenv oem-banner Hello World
ok setenv oem-banner? true
ok banner
Hello World

输入输出控制
可用的定义控制台的参数:
• input-device
• output-device
• screen-#columns
• screen-#rows
下次重启才会生效

默认情况下
input-device是keyboard,output-device是screen.

要讲默认的输入设备改为ttya:
ok setenv input-device ttya

假如输入设备是keyboard,输出设备为screen,而设备并没有连接的话系统在下次启动的时候会使用ttya做为输入输出设备.

example设定ttya做为默认的输入设备:
ok setenv input-device ttya


• screen-#columns         设定屏幕列
• screen-#rows              设定行

 

setenv的使用范例:
设定默认启动设备
ok setenv boot-device net
设置最大化自检
ok setenv diag-switch? True
取消最大化自检
ok setenv diag-switch? false


使用 nvramrc
在nvram中编辑一个脚本在系统启动时执行,这个报存在NVRAM中

通常是为了某些设备驱动定义某些参数使用,或者为某些可能必须在系统加载之前需要执行的操作所准备。
定义的脚本在什么时候执行呢?
下面是OBP启动的顺序:
• 加电自检 (POST)
• 执行系统初始化
• 执行nvramrc定义的脚本 (if use-nvramrc? is true)
• 执行 probe-all (evaluate FCode)
• Execute install-console
• 显示banner
• Execute secondary diagnostics
• 启动操作系统 (if auto-boot? is true)

需要注意的某些命令可能需要在执行了 probe-all之后才能够运行,也就是说我们要充分考虑我们执行的命令本身运行所需要的环境。

It is sometimes desirable to modify the sequence probe-all installconsole
banner. For example, commands that modify the characteristics of
plug-in display devices may need to be executed after the plug-in devices have been probed, but before the console device has been selected. Such commands
would need to be executed between probe-all and install-console.
Commands that display output on the console would need to be placed after
install-console or banner.
This is accomplished by creating a custom script which contains either banner
or suppress-banner since the sequence probe-all install-console
banner is not executed if either banner or suppress-banner is executed
from the script. This allows the use of probe-all, install-console and
banner inside the script, possibly interspersed with other commands, without
having those commands re-executed after the script finishes.


在脚本中可以使用大部分的OBP的命令,但是也有例外
下面的命令不能在脚本中使用:
• boot
• go
• nvedit
• password
• reset-all
• setenv security-mode

常用的nvramrc命令
nvedit                进入脚本编辑模式,如果存在以前保存的脚本,则打开并编辑
nvquit                不保存退出
nvrun                 执行当前编辑的脚本,不会保存
nvstore              保存当前的脚本


下面来看看怎么编辑一个script
1. 在ok提示符下键入nvedit,进入script的编辑。
2. Control-C 退出编辑模式重新回到ok提示符。
假如没有使用nvstore命令保存你的编辑,你可以使用nvrun临时执行你写的脚本。
3. 使用nvstore进行保存。
4. 为了能够执行脚本,需要设定下面的参数
setenv use-nvramrc? true
5. 重新启动机器或者使用下面的命令来执行脚本
nvramrc evaluate
或许你已经注意到了,这里没有涉及到给脚本命名或者执行某个脚本的问题需要考虑

下面是在编辑模式可用的编辑操作,因为太多所以只捡了最常用的几个。
Keystroke Description

Control-B         向后移动一个字符
Control-F         先前移动一个字符
Control-N         移动到下一行
Control-P         移动到前一行
Return
(Enter)             在光标位置插入一行
Control-C         退出编辑模式,编辑的内容在机器重启前会保留,但是不会写入NVRAM,这时可以使用nvstore命令保存编辑的内容。
Backspace        向前删除一个字符

 


下面是一个参考中提供的例子,其实在平时的使用中我们用得最多的可能是在脚本中保存我们想让系统刚启动的时候要执行的命令或者设定参数的操作。
下面是忘了在哪位老大的solaris双机的配置中的一段,作用就是改系统的scsi ID

ok nvedit 
0: probe-all 
1: cd /pci@1f,4000/pci@4/SUNW,isptwo@4 
2: 6 " scsi-initiator-id" integer-property 
3: device-end  (上面可以使用setenv scsi-initiator-id 6来完成)
4: install-console 
5: banner 
<Control C>; 退出 

----------------------------------
也可以这样
ok nvedit
0: setenv scsi-initiator-id 6
<Control C>;
ok nvstore

或者干脆
ok setenv scsi-initiator-id 6
----------------------------------


然后保存该设置 
ok nvstore 
ok setenv use-nvramrc? True 
ok reset-all 重启或者可以使用,nvrun命令执行

校验SCSI卡id更改的正确: 
ok cd /pci@1f,4000/pci@4/SUNW,isptwo@4 
ok .properities

或者上面不使用reset-all命令,而使用nvramrc evaluate,则会直接执行。
注意:nvedit模式的提示符是0:1:等数字,表示不同的行。

Nvramrc总体感觉就像是操作系统的rc.local,只不过执行的位置和做用不同。

微信公众号使用

微信公众号使用,是一套基础课程,为后面的《PHP微信公众号开发》做铺垫。微信几乎是智能手机上必装的软件,很多的商家在微信上开通公众号,想要把公众号的价值发挥最大,必须学会公众号的使用,开发和营销。这一套课程重点教你学会公众号的使用,为后面的做好基础。欢迎反馈,QQ/微信:68183131
  • 2016年06月24日 14:48

OpenBootPROM的获得和使用!

OpenBootPROM和简称是OBP,可以理解为普通pc的BIOS的增强版,它是控制sun服务器的引导过程、初始化配置某些硬件和提供了某些诊断的工具。其配置保存在主板的prom固件中,配置的方式是通...
  • henrybai
  • henrybai
  • 2010-05-27 11:20:00
  • 923

Xcode使用中的一些获得

  • 2011年11月24日 12:57
  • 319KB
  • 下载

“因为数据库正在使用,所以无法获得对数据库的独占访问权”解决方案

问题一描述:SQL Server数据库备份还原后,在数据库名称后会出现“受限制访问”字样 问题二描述:在对SQL Server数据库进行还原时,提示:System.Data.SqlClient.Sq...
  • fanhaifang
  • fanhaifang
  • 2014-01-02 11:23:49
  • 8252

asp.net 用vb写的web应用程序 恢复备份好的数据库 提示: 因为数据库正在使用,所以未能获得对数据库的排它访问权。 RESTORE DATABASE 操作异常终止。

因为数据库正在使用,所以未能获得对数据库的排它访问权。 RESTORE DATABASE 操作异常终止。 说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及...
  • nondom88
  • nondom88
  • 2007-06-05 15:31:00
  • 1904

使用JS获得串口数据

  • 2016年10月08日 09:24
  • 186KB
  • 下载

【C#】用AnimateWindow函数使窗体获得淡入淡出效果

  • 2010年01月05日 17:22
  • 972B
  • 下载

因为数据库正在使用,所以无法获得对数据库的独占访问权。

因为数据库正在使用,所以无法获得对数据库的独占访问权 数据库 '' 已打开,并且一次只能有一个用户访问...
  • yehaifanxing
  • yehaifanxing
  • 2016-12-07 15:03:49
  • 2828

“数据库正在使用,无法获得对数据库的独占访问权”的解决方案

 在数据库还原的时候,出现如下错误,解决方案如下    解决方案: 在 master  数据库中 新建 如下 存储过程 createproc killspid (@dbnamevarchar(20))...
  • Pure0_0Water
  • Pure0_0Water
  • 2010-12-30 17:49:00
  • 438

svn:无法使用外部编辑器获得日志信息;考虑设置环境变量$SVN_EDITOR

svn:无法使用外部编辑器获得日志信息;考虑设置环境变量$SVN_EDITOR 问题如下: svn: 无法使用外部编辑器获得日志信息;考虑设置环境变量 $SVN_EDITOR,或者...
  • ycl111
  • ycl111
  • 2013-08-28 10:23:59
  • 2966
收藏助手
不良信息举报
您举报文章:OpenBootPROM的获得和使用!
举报原因:
原因补充:

(最多只允许输入30个字)