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

デバイスツリー

デバイスは、相互に接続されたバス上で SPARC ベースのシステムに接続されています。OpenBoot ファームウェアは、接続されたバスとそれらのバスに接続されたデバイスをノードのツリーという形で表します。そのようなツリーをデバイスツリーと呼びます。マシン全体を表すノードが、ツリーのルートノードになります。

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

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

物理アドレスは、一般に (デバイスがインストールされているバスアドレスまたはスロット番号などの) デバイス固有の物理的性質を表します。これにより、他のデバイスをシステムにインストールしたときに、デバイスアドレスの変更を避けることができます。

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

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

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

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

name@address:arguments

以下の表でこれらの変数を説明します。

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

変数名 

説明 

name

理想的には、なんらかのニーモニック値をもつテキスト文字列。(たとえば、sd は SCSI disk を表します。) 多くの名前、特に差し込み式モジュールの名前は、デバイスのメーカの名前または株式略称を含みます (たとえば SUNW,esp) 。

@

address 変数の前に入れます。

address

アドレスを表すテキスト文字列。通常は、 hex_number,hex_number の形式。(数値は 16 進形式で指定します。)

:

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

arguments

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

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

一般的に、ノード名の address 部分はその親のアドレス空間内の 1 つのアドレスを表します。特定のアドレスの正確な意味は、そのアドレスのデバイスが接続されているバスによって決まります。同じ例をもう一度示します。

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

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

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

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

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

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

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

デバイスの別名

デバイスの名前には次の 2 種類があります。

デバイスの別名、あるいは、単に別名 (alias) とは、デバイスのパス名を表す方法の 1 つです。別名はデバイスのパス名の構成要素ではなく、デバイスのパス名全体を表します。たとえば、disk という別名は次のようにデバイスのパス名を表します。

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

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

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

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

コマンド 

説明  

devalias

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

devalias alias

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

devalias alias device-path

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

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

デバイスツリーの表示

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

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

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

コマンド 

説明 

.attributes

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

cd device-path

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

cd node-name

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

cd ..

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

cd /

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

device-end

現在のデバイスノードを選択解除し、ノードが選択されない状態にします。 

ls

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

pwd

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

show-devs [device-path]

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

words

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

デバイスツリーを表示していて、システムをリセットする場合は、次のように入力します。


ok device-end 
ok reset 

次の例で .attributes の使用例を示します。


ok cd /zs@1,f0000000 
ok .attributes 
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 

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


ok show-devs 
/fd@1,f7200000 
/virtual-memory@0,0 
/memory@0,0 
/sbus@1,f8000000 
/auxiliary-io@1,f7400003 
/interrupt-enable@1,f5000000 
/memory-error@1,f4000000 
/counter-timer@1,f3000000 
/eeprom@1,f2000000 
/audio@1,f7201000 
/zs@1,f0000000 
/zs@1,f1000000 
/openprom 
/aliases 
/options 
/packages 
/sbus@1,f8000000/cgsix@3,0 
/sbus@1,f8000000/le@0,c00000 
/sbus@1,f8000000/esp@0,800000 
ok 

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


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