OpenBoot 3.x コマンド・リファレンスマニュアル

デバイスツリー

デバイスは、相互に接続されたバスを介してホストコンピュータに接続されています。OpenBoot は、接続されたバスとそれらのバスに接続されたデバイスをノードのツリーという形で表します。そのようなツリーを「デバイスツリー」と呼びます。ホストコンピュータの物理的なアドレスバスを表すノードが、ツリーのルートノードになります。

各デバイスノードには次のものがあります。

子があるノードは、通常、複数のバスと、それらにつながれているコントローラを表します。そのようなノードはそれぞれ、それらに接続されているデバイス相互間を区別する物理的なアドレス空間を定義します。そのノードの子には、親のアドレス空間内の物理アドレスがそれぞれ割り当てられます。

物理アドレスは、一般に (デバイスが取り付けられているバスアドレスまたはスロット番号などの) デバイス固有の物理的性質を表します。デバイスの識別に物理アドレスを使用すると、他のデバイスをシステムに取り付けたり、システムから削除したときに、デバイスアドレスの変更を避けることができます。

子ノードのないノードのことをリーフノードといい、一般にはデバイスを表します。システム提供のファームウェアサービスを表す場合もあります。

デバイスのパス名、アドレス、引数

OpenBoot ファームウェアはシステム内のハードウェアデバイスを直接取り扱います。各デバイスには、デバイスの種類、システムアドレス構造内のそのデバイスの位置を表す固有の名前があります。次の例でデバイスのフルパス名を示します。


/sbus@1f,0/SUNW,fas@e,8800000/sd@3,0:a

デバイスのフルパス名は、スラッシュ (/) で区切られた一連のノード名です。ツリーのルートは明示的には示されない、先頭のスラッシュ (/) で示されるマシンノードです。各ノード名は次の書式になっています。

driver-name@unit-address:device-arguments

表 1-1でこれらの変数を説明します。

表 1-1 デバイスパス名の変数

変数名 

説明 

driver-name

1〜31 文字の英字、数字、および記号「, . _ + - 」からなる可読文字で、なんらかのニーモニック値をもつ文字列。大文字と小文字の区別があります。場合によっては、この名前にはデバイスのメーカの名前とデバイスの型名がコンマで区切って入っていることがあります。一般には、メーカの名前としては株式略称 (たとえば SUNW,sd) が英文大文字で使用されます。組み込みデバイスの場合は、メーカの名前は通常省略されます (たとえば sbus)。

@

address 変数の前に入れます。 

unit-address

その親のアドレス空間内のデバイスの物理アドレスを表すテキスト文字列。テキストの書式はバスによって異なります。 

:

arguments 変数の前に入れなければなりません。 

device-arguments

形式が特定のデバイスによって決まるテキスト文字列。これを使用してデバイスのソフトウェアに追加情報を渡すことができます。 

フルデバイスパス名は、システムが使用するハードウェアアドレス指定をまねて、異なるデバイスを区別します。したがって、特定のデバイスをあいまいさなしに指定できます。

一般的に、ノード名の unit-address 部分はその親の物理アドレス空間内の 1 つのアドレスを表します。特定のアドレスの正確な意味は、そのアドレスのデバイスが接続されているバスによって決まります。次の例を見てください。


/sbus@1f,0/esp@0,40000/sd@3,0:a

パス名を指定するときは、ノード名の @unit-address または driver-name 部分は省略できます。省略すると、ファームウェアは指定した名前に最もよく一致するデバイスを選択しようとします。一致するノードが複数存在すると、ファームウェアはその中から 1 つ選択します (ユーザーが希望するものと異なるかも知れません)。

たとえば、/sbus/esp@0,40000/sd@3,0 の例では、そのシステムにはメインシステムバス上の SBus が 1 つあるものとし、sbussbus@1f,0 と表すのと同じように明確にします。しかし同じシステムでも、/sbus/esp/sd@3,0 と表すと、あいまいな場合と、そうでない場合があります。SBus には差し込み式カードが装着できるので、同じ SBus 上に esp デバイスが複数存在する可能性もあります。システム上に複数あると、esp だけを使用したのではどの esp デバイスかを指定できず、ファームウェアはユーザーが意図する esp デバイスを選択しないかも知れません。

もう 1 つの例として、/sbus/@2,1/sd@3,0 は通常指定できるのに対して、/sbus/scsi@2,1/@3,0 は通常では指定できません。それは、SCSI ディスクデバイスドライバと SCSI テープデバイスドライバの両方に SCSI のターゲット、論理ユニットアドレス 3,0 を使用できるためです。

ノード名の :device-arguments 部分も省略できます。同じ例を示します。


/sbus@1f,0/scsi@2,1/sd@3,0:a

ディスクデバイスの引数は文字列 a です。このデバイスのソフトウェアドライバはその引数をディスクパーティションとして解釈するため、デバイスパス名はそのディスク上のパーティション a を参照します。

実装によっては、パス名構成要素の省略が可能です。あいまいさが生じなければ省略しても、その実装では目的とするデバイスが選択されます。たとえば、上の例のシステムに sd デバイスが 1 つしかなかった場合は、/sd:a これにより、前述した省略しない場合と同じデバイスが識別されます。

デバイスの別名

デバイスの別名、または単に別名とは、「デバイスパス」の短縮表現のことをいいます。

たとえば、disk という別名で完全なデバイスパス名を表すことができます。


/sbus@1f,0/esp@0,40000/sd@3,0:a

システムは、よく使用されるデバイスのほとんどに対して、デバイスの別名をあらかじめ定義しているので、デバイスパス名を全部入力することはまれにしかありません。

表 1-2で、別名の確認、作成、変更を行う devalias コマンドを説明します。

表 1-2 デバイス別名の確認と作成

コマンド 

説明 

devalias

現在のすべてのデバイス別名を表示します。 

devalias alias

alias に対応するデバイスパス名を表示します。

devalias aliasdevice-path

device-path を表す別名を定義します。同じ名前の別名がすでに存在すると、新しい名前に更新します。

ユーザーが定義する別名は、システムのリセット後、または電源の再投入後に失われます。永久的な別名を作成するには、devalias コマンドを nvramrc と呼ばれる不揮発性 RAM (NVRAM) の一部に手作業で格納するか、nvalias および nvunalias コマンドを使用します。(詳細は、第 3 章「システム変数の設定」を参照してください。)

デバイスツリーの表示

デバイスツリーを表示して、個々のデバイスツリーノードを調べ、変更することができます。デバイスツリーの表示用コマンドは、Solaris TM ディレクトリツリーで現在のディレクトリを変更、表示する Solaris コマンドと同じです。デバイスノードを選択すると、それが現在のノードになります。

デバイスツリーは表 1-3に示すコマンドを使用して調べます。

表 1-3 デバイスツリー表示コマンド

コマンド 

説明 

.properties

現在のノードの特性の名前と値を表示します。 

dev device-path

指定されたデバイスノードを選択し、それを現在のノードにします。 

dev node-name

指定されたノード名を現在のノードの下のサブツリーで検索し、最初に見つかったノードを選択します。 

dev ..

現在のノードの親にあたるデバイスノードを選択します。 

dev /

ルートマシンノードを選択します。 

device-end

デバイスツリーが選択されない状態にします。 

" device-path" find-device

デバイスノードを選択します。 dev ノードと似ています。

ls

現在のノードの子の名前を表示します。 

pwd

現在のノードを示すデバイスパス名を表示します。 

see wordname

指定するワードを逆コンパイルします。 

show-devs [device-path]

デバイス階層内の指定されたレベルのすぐ下の、システムに認識されているすべてのデバイスを表示します。show-devs だけを使用すると、デバイスツリー全体を表示します。

words

現在のノードの方式名を表示します。 

" device-path" select-dev

指定されたデバイスノードを選択し、それを有効なノードにします。 

.properties は現在のノードのすべての特性の名前と値を表示します。


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 は、指定されたノードの内容を表示できるように、現在のノードをそのノードに設定します。たとえば、ACME 社の「ACME,widget」という名前の SBus デバイスを現在のノードにするには、次のように入力します。


ok dev /sbus/ACME,widget

find-device は基本的には dev と同じです。異なるのは入力パス名の受け渡し方法だけです。


ok " /sbus/ACME,widget" find-device


注 -

dev または find-device でデバイスノードを選択した後には、そのノードの方法は実行できません。それは、dev が現在のインスタンスを設定しないためです。この問題についての詳細は、『Writing FCode 3.x Programs』を参照してください。


show-devs は次の例で示すように、OpenBoot デバイスツリー上のすべてのデバイスのリストを表示します。


ok show-devs 
/SUNW,UltraSPARC@0,0
/sbus@1f,0
/counter-timer@1f,3c00
/virtual-memory
/memory@0,0
/aliases
/options
/openprom
/chosen
/packages
/sbus@1f,0/cgsix@1,0
/sbus@1f,0/lebuffer@0,40000
/sbus@1f,0/dma@0,81000
/sbus@1f,0/SUNW,bpp@e,c800000
/sbus@1f,0/SUNW,hme@e,8c00000
/sbus@1f,0/SUNW,fas@e,8800000
/sbus@1f,0/sc@f,1300000
/sbus@1f,0/zs@f,1000000
/sbus@1f,0/zs@f,1100000
/sbus@1f,0/eeprom@f,1200000
/sbus@1f,0/SUNW,fdtwo@f,1400000
/sbus@1f,0/flashprom@f,0
/sbus@1f,0/auxio@f,1900000    
/sbus@1f,0/SUNW,CS4231@d,c000000
/sbus@1f,0/SUNW,fas@e,8800000/st
/sbus@1f,0/SUNW,fas@e,8800000/sd
/openprom/client-services
/packages/disk-label
/packages/obp-tftp
/packages/deblocker
/packages/terminal-emulator
ok

次に words の使用例を示します。


ok dev /zs 
ok words 
ring-bell  	    read           remove-abort? 	install-abort   
close      	    open           abort?        	restore 
clear          reset          initkbdmouse	   keyboard-addr mouse 
1200baud       setbaud        initport       port-addr