Solaris 操作系统中PROM命令集的使用

关键词

Solaris、使用、维护、学习

前言

Solaris操作系统是目前业界使用比较广泛的一种操作系统。它具有稳定性好、运行效率高等特点。如何更好的使用和维护Solaris操作系统使它能发挥更好的作用,是本文讨论的重点。本文还将总结我在学习Solaris操作系统使用中的一点心得(以Solaris 9操作系统为准)。

Solaris操作系统简介:

SolarisSun公司开发和发布的操作系统,是UNIX系统的一个重要分支。它首先从BSD Unix移植而来,随后逐渐转移到了System V标准。Solaris操作系统自诞生到现在已经由Solaris 1发展到Solaris 9,目前又推出了最新版本的Solaris 10。它被广泛的应用于Sun SPARC体系、AMD64CPUX86体系的计算机系统上。Solaris操作系统相对于其他类型的操作系统而言有性能稳定、安全性强、运行效率高等一系列优点。因此被广泛的应用于银行、电信、国防、工业控制等领域。可以说是UNIX家族中比较著名的一款操作系统。

Solaris操作系统现状:

支持平台:目前,Solaris除可以运行在SPARC CPU上外,还可以运行在X86 (IA32)CPU上。最近又被移植到了最新的AMD64CPU Opteron上。

市场地位:在服务器市场上,Sun的硬件平台具有高可用性和高可靠性,Solaris是当今市场上处于支配地位的Unix类操作系统。

版本Solaris 10正处于开发状态中,将于2004年初正式发布。目前较常见的版本为98

下载:这些版本都可以从Sun的官方网站下载,也可以从国内外其他一些站点免费下载。对于难以接触到Sun SPARC架构计算机的用户可以通过使用Solaris x86体验世界知名大厂的商业Unix的风采。当然Solaris x86也可以用于实际生产应用的服务器。在遵守Sun的有关许可条款的情况下,Solaris x86可以免费用于学习研究或商业应用。

Solaris OS PROM简介

PROMprogrammable read-only memory)命令是Sun SPARC体系计算机特有的一套命令体系,所有Sun体系的计算机都保存有用于执行PROM命令的固件。它使得系统管理员可以对硬件设备进行基本的监测、对系统初始化全过程进行配置、单步执行。PROM命令有以下几个作用:

检测与初始化硬件

定义系统硬件配置

Boot操作系统

为配置硬件提供交互界面

使得用户可以定义使用第三方硬件

目前,Sun boot PROM命令集合到目前为止已经发展了5代,其中比较常用的是3.0版本。系统管理员如果想察看本机PROM版本,可以在cmd条件下键入如下命令:

#uname -m

# /usr/platform/‘uname -m‘/sbin/prtdiag –v

这样就可以看到目前本机PROM命令集合的版本了。

NVRAM简介

另外一个Sun体系计算机中十分重要的部件是NVRAM。它是一块位于主系统板上的可插拔的芯片,包含着所有关于系统的重要信息,由两部分构成:

不可编辑信息:以太网地址和host ID。这部分信息是系统设定好的,对每台机器都是唯一的,用户不可以更改。

可编辑信息:时钟值(TOD)、定义数据系统参数(the configuration data describing system operating parameters)、诊断模式参数,用于控制系统是否需要自检(A diagnostic mode switch that enables or disables power-on self-test)、外部设备名和设备路径(在Solaris系统中,所有外部设备都以一个文件路径名的形式存在,虽外设数据的输入输出都是以对文件的写入读出的形式进行的)、还有其他在boot过程中需要用到的用户程序入口位置。

下图就展示了PROMNVRAM之间关系:

系统自检(POST)

当机器开机时,系统会自动进行一次低级别的系统自检。这次系统自检的代码保存在BOOT PROM当中,其用途就是检测系统最基本的功能是否正常,其步骤如下:

测试内存和CPU是否正常

测试BUS DEVICE、其他外设是否正常,能否和CPU进行互连。在确定所有外设运行正常之后创建设备树(DEVICE TREE,实际上是一个关于所有外设的树型表)。

装入控制台信息

下图显示了Sun blade100型机在开机自检时显示的内容:

Partial Post Output Listing

@(#) 4.0 Version 29 created 2000/07/12 16:46

Clearing TLBs Done

Reset: 0000.0000.0000.0010 SPOR

Loading Configuration

Membase: 0000.0000.0000.0000

MemSize: 0000.0000.2000.0000

Init CPU arrays Done

Init E$ tags Done

Setup TLB Done

MMUs ON

Block Scrubbing Done

Copy Done

PC = 0000.07ff.f000.3138

Decompressing Done

Size = 0000.0000.0006.e3b0

ttya initialized

Start Reason: Soft Reset

System Reset: (SPOR)

Probing gptwo at 0,0 SUNW,UltraSPARC-III (750 MHz @ 5:1, 8 MB)

memory-controller

Probing gptwo at 1,0 Nothing there

Probing gptwo at 8,0 pci pci upa ppm

Loading Support Packages: kbd-translator

Loading onboard drivers: ebus flashprom bbc ppm i2c dimm-fru dimm-fru

dimm-fru dimm-fru dimm-fru dimm-fru dimm-fru dimm-fru nvram idprom

i2c cpu-fru temperature fan-control card-reader motherboard-fru

Memory Configuration:

Segment @ Base: 0 Size: 512 MB (2-Way)

Probing /upa@8,480000 Device 0,0 Nothing there

Probing /upa@8,480000 Device 1,0 Nothing there

Probing /pci@8,600000 Device 4 SUNW,qlc fp disk

Probing /pci@8,600000 Device 1 Nothing there

Probing /pci@8,700000 Device 5 network firewire usb

dev-descrip

next-add

node made

Probing /pci@8,700000 Device 6 scsi disk tape scsi disk tape

Probing /pci@8,700000 Device 1 Nothing there

Probing /pci@8,700000 Device 2 Nothing there

(UltraSPARC-III) , Keyboard Present

OpenBoot 4.0, 512 MB memory installed, Serial #12134217.

Ethernet address 8:0:20:b9:27:49, Host ID: 80b92749.

 

PROM基本的命令集合

PROM命令集合如下表:

下面就对PROM命令使用的条件和具体方法逐一进行介绍:

PROM命令使用的条件:

PROM命令必须在OK指令符下使用。它实际上是系统在开机自检时被中止后生成的一种指令界面。系统管理员可以在这个指令界面下面诊断系统状况,修改系统配置,甚至单步执行系统启动时的自检过程。

如何进入OK界面:

点击STOP-A(其中STOP键是SUN体系计算机键盘上特有的按键)组合键就可以进入PROM界面。有时计算机在已经初始化完成后,进入SOLARIS图形界面的情况下也可以通过STOP-A的方法进入OK状态。但是通常不提倡这样用,容易引起文件系统不一致等情况出现。

Banner命令

Banner命令是用来了解系统信息的重要命令,例如PROM的模块名称、PROM版本号、内存容量、以太网地址和HOST ID等内容。

其具体使用方法如下:

ok banner

Sun Ultra 5/10 UPA/PCI (UltraSPARC-IIi 360MHz), Keyboard Present

OpenBoot 3.31, 128 MB (50 ns) memory installed, Serial #11888271.

Ethernet address 8:0:20:b5:66:8f, Host ID: 80b5668f.

 

BOOT命令

Boot命令用来从OK界面来boot进入SOLARIS系统。它的格式如下:

ok boot device_name - options

可以在boot命令后键入一个或多个参数。这些参数传递改操作系统内核,将影响整个启动过程。

参数:

交互式启动系统。提示输入根设备和交换设备以及一些重要的系统文件。

ok boot -a

Enter filename [kernel/sparcv9/unix]:

Enter default directory for modules [/platform/SUNW,Ultra-5_10/kernel

/platform/sun4u/kernel /kernel /usr/kernel]:

Name of system file [etc/system]:

root file system type [ufs]:

Enter physical name of root device:

启动时系统将重新查找所有的设备,在/devices/dev目录下重新生成文 件,更新/etc/path_to_inst文件。

系统启动后停留在S运行级别。可以用来系统错误排除。

详细地显示出系统的启动信息。有时可以用来系统的错误排除。

例如:

ok boot -r

ok boot -v

ok boot -rv

ok boot –sv

help命令

help命令用来得到关于某个具体命令的帮助信息。例如:

ok help boot

ok help nvramrc

ok help diag

ok help misc

printenv 命令

printenv命令显示NVRAM的参数以及参数的缺省值。例如:

也可以显示某个特定参数的值:

ok printenv boot-device

boot-device = disk net

 

setenv命令

该命令用来改变NVRAM中参数的设置。因此这个命令很重要,使用时要特别小心,避免不必要的误操作导致机器瘫痪。一般来讲,系统管理员是通过printenv命令和setenv命令组合起来对NVRAM进行操作的。

ok printenv auto-boot?

auto-boot?true true

ok

ok setenv auto-boot? False

auto-boot? = false

ok reset-all(这条命令是PROM中的另一条命令,他用来重新启动机器,是新的设置生效)

重置缺省值

使用set-defaults 命令将所有的参数重新设置为缺省的值。

ok set-defaults

也可以对一个具体参数进行重置:

ok set-default diag-level

set-default命令对于系统管理员很有用处。经常拿它来修正那些不小心改错的参数。

Probe命令

这个命令也是PROM命令集中的一个重要命令子集。它用来了解当前有多少外设连接到了主机上,包括硬盘、磁带机、CD-ROM等等。

想知道当前probe命令子集包括哪些子命令可以用以下的方法:

其中,sifting命令是用来检索PROM命令集中包含特定单词的命令子集。其功能类似于windows操作系统中的查找文件命令。

以上所有probe命令中,

Probe-all用来显示所有外设信息;probe-ide用来显示ide接口外设的信息;probe-scsi用来显示某个具体scsi接口外设信息;probe-scsi-all用来显示所有scsi接口外设信息;probe-pciprobe-pci-slot用来显示pci接口外设的信息。最常用的是probe-ideprobe-scsiprobe-scsi-all命令。

如果系统还包含着光纤接入的设备,那还可以使用probe-fcal-all命令来获取信息。

例如:

Devalias命令

这个命令很重要,用于察看外设别名和物理地址之间对应关系。在介绍这个命令之前,先要介绍一下Sun系统计算机中硬件设备在操作系统中是如何组织和构建的。

sun体系是使用设备树的概念来组织那些连接到主机上的外设的:

这个设备树的根节点就是root device node。接着是Solaris操作系统的文件系统中的各级子节点,最后那些淡蓝色的叶子节点就是对应于所有外设的设备文件。

所有叶子节点都有自己的绝对路径,通过绝对路径名称就可以判断外部设备的类型:

从上面两张图可以看出当外设类型为IDE时,device type栏就显示dad字样;如果外设类型为scsi时,device type就显示为sd字样。

同时为了方便管理起见,每个外设都有自己的一个别名,例如光驱的别名是cdrom,显示器的别名是screen。根据这两个之间的对应关系我们就可以方便的管理外设的活动。而devalias命令就是用来察看设备别名的物理地址的。例如:

ok devalias

screen /SUNW,ffb@1e,0 

mydisk /pci@1f,0/pci@1,1/ide@3/disk@0,0

net /pci@1f,0/pci@1,1/network@1,1

cdrom /pci@1f,0/pci@1,1/ide@3/cdrom@2,0:f

disk /pci@1f,0/pci@1,1/ide@3/disk@0,0

disk3 /pci@1f,0/pci@1,1/ide@3/disk@3,0

disk2 /pci@1f,0/pci@1,1/ide@3/disk@2,0

disk1 /pci@1f,0/pci@1,1/ide@3/disk@1,0

disk0 /pci@1f,0/pci@1,1/ide@3/disk@0,0

ide /pci@1f,0/pci@1,1/ide@3

floppy /pci@1f,0/pci@1,1/ebus@1/fdthree

ttyb /pci@1f,0/pci@1,1/ebus@1/se:a

ttya /pci@1f,0/pci@1,1/ebus@1/se:b

keyboard! /pci@1f,0/pci@1,1/ebus@1/su@14,3083f8

keyboard /pci@1f,0/pci@1,1/ebus@1/su@14,3083f8

mouse /pci@1f,0/pci@1,1/ebus@1/su@14,3062f8

设备别名在左列。设备物理地址在右列。

这条命令非常有用,通常系统管理员在为计算机新增了外设之后,都会在重启机器之后进入ok状态下使用这个命令察看新增的外设是否顺利加入设备树中。

Show-devs命令

这条命令和上面的命令一样都是用来显示整个设备树的,只是这条命令不会显示设备别名,因此使用起来不是太方便,所以不像上面的命令那样适用广泛:

ok show-devs

/SUNW,UltraSPARC-IIi@0,0

/pci@1f,0

/virtual-memory

/memory@0,10000000

/pci@1f,0/pci@1

/pci@1f,0/pci@1,1

/pci@1f,0/pci@1,1/ide@3

/pci@1f,0/pci@1,1/SUNW,m64B@2

/pci@1f,0/pci@1,1/network@1,1

/pci@1f,0/pci@1,1/ebus@1

/pci@1f,0/pci@1,1/ide@3/cdrom

/pci@1f,0/pci@1,1/ide@3/disk

/pci@1f,0/pci@1,1/ebus@1/SUNW,CS4231@14,200000

/pci@1f,0/pci@1,1/ebus@1/flashprom@10,0

/pci@1f,0/pci@1,1/ebus@1/eeprom@14,0

/pci@1f,0/pci@1/pci@1

/pci@1f,0/pci@1/pci@1/SUNW,isptwo@4

(output truncated)

Ok

同时,这个命令也是一个子集,衍生出很多子命令:show-ttysshow-displaysshow-netsshow-disksshow-types。他们的用法和show-devs基本相同,区别在于他们只显示特定类型的外设信息。

创建和修改设备别名

创建和修改设备别名是PROM命令操作中十分重要的一项内容,同时这个操作也带有一定的危险性,因为如果修改不得当就会造成系统boot时找不到正确的入口,导致系统瘫痪数据丢失。因此这个操作务必要熟练掌握,万无一失后才能使用,而且一般情况下,这个操作也是尽可能少用。

创建一个新的设备别名可以使用nvalias命令,具体格式如下:

nvalias aliasname device_path

下面就举个例子来演示如何增加一个名为mydisk的外设:

首先使用show-disks来显示所有外部存储设备信息:

ok show-disks

a) /pci@1f,0/pci@1/scsi@1,1/disk

b) /pci@1f,0/pci@1/scsi@1/disk

c) /pci@1f,0/pci@1,1/ide@3/cdrom

d) /pci@1f,0/pci@1,1/ide@3/disk

e) /pci@1f,0/pci@1,1/ebus@1/fdthree@14,3023f0

q) NO SELECTION

然后选择要被加入设备树的外设选项(此次选d):

Enter Selection, q to quit: d

/pci@1f,0/pci@1,1/ide@3/disk has been selected.

使用^Y功能把该外设的物理地址名复制下来:

Type ^Y (Control-Y) to insert it in the command line.

e.g. ok nvalias mydev ^Y

for creating devalias mydev for

/pci@1f,0/pci@1,1/ide@3/disk

最后,把复制的物理地址拷贝到nvalias命令行的后面,执行该命令:

ok nvalias mydisk ^y

当然你也可以直接键入命令:

ok nvalias mydisk /pci@1f,0/pci@1,1/ide@3/disk@0,0

在执行完命令之后,要执行如下两个操作:

使用setenv来判断mydisk是否成功加入设备树:

ok setenv boot-device mydisk

boot-device = mydisk

重新boot计算机,是配置生效:

ok boot

这时候一个新的外设就成功地加入设备树了。

 

删除设备树中的一个外设:

可以用如下命令删除设备树中的一个外设:

ok nvunalias aliasname

例如:

ok nvunalias mydisk

ok setenv boot-device disk

boot-device = disk

ok reset-all

Resetting ...

这个操作有一定危险性,因为如果不小心的话就可能把boot用的外设删除掉,造成系统不能正常启动。因此奉劝使用的人务必要小心,避免不必要的损失。

 

Solaris操作系统中的cmd条件下能不能执行PROM命令呢?回答是肯定的,但只能说是部分功能:

显示所有PROM参数可以使用如下命令:

# eeprom

显示某个特定参数:

# eeprom boot-device

boot-device=disk

修改系统默认得boot路径,可以执行如下操作(这个操作有相当的危险性,最好避免使用):

# eeprom boot-device=disk2

#

修改部分参数:

# eeprom auto-boot?=true

#

最后介绍PROM中最后一条命令,sync命令。它用来在系统瘫痪死寂的情况下手动关闭计算机,用法如下:

ok sync

这个操作对于文件系统有一定的伤害,有时会造成文件系统的不一致贺硬件的损伤,所以使用起来也要特别注意。

 

最后谈谈Solaris操作系统学习中的心得体会:

Solaris 操作系统以它的性能稳定、功能强大和安全性能好而著称,但同时这套系统的使用难度也很大,不要说非计算机专业人士,就是计算机专业人员需要花很长的时间才能初步掌握它的用法(仅仅是初步!),笔者就是其中之一,花了足足近一年的时间才刚刚达到 Sun 认证一级系统管理员的资格,至于二级还有网络管理员就更别提了。至于熟练精通,那只有特别有恒心毅力,并且有足够外部条件得人才能办到这一点,老实说我个人认为每个 2-3 年时间是不大可能的。本文中涉及的仅仅是 Solaris 操作系统中一个很小的方面,而比他深奥复杂的地方就更多了(例如,打印机配置,开关机,访问角色控制,网络配置等等),所以说希望有志于此的同道能做好一定的思想准备。当然如果你能做到这些的话,你不但对 Solaris 操作系统,就是对整个 UNIX 系列的操作系统都能有深入了解了,因为不管是 Solaris 还是 HP-UX 都是同出一门的,对于操作系统的理解也会上一个层次。所以我希望我今天在这里写的东西对于其他同道都能有所帮助和启发。另外随着开源运动的推广, Sun 也已经公开了 Solaris 操作系统的源代码,在他的网站上也有最新版的 Solaris 10 Express X86 )共免费下载使用研究,应该说客观条件已经具备,希望有志于此的同道能利用这些有利因素,能比我更深入的研究下去。

版权声明:本文为silencsrv原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。