(上に述べたような理由で、hostIDを一度変更された方は、1-800-555-pir8に 電話して報告してください)
     
     Adrie Koolen (adrie@ica.philips.nl)  (2 postings quoted) J"org 
     Schilling (js@cs.tu-berlin.de) (almost everything else)
     
お二人の知識を提供していただけることに感謝いたします。
写しをmueller@cs.unc.edu (Carl Mueller)にも、作ったFAQと一緒に送って
います。
Mostek MK48T02 2k NVRAM は、SUN 3/80、SUN4、SUN4cシステムに使用され
ています。SUN4mシステムでは 8kのバージョンが使用されています、が、ま
だ寿命ではありません。
SUNでは MK40T02を$70で販売されています。
ドイツでは一個45ドイツマルク、大量仕入れの場合は20ドイツマルクです。ア
メリカでは$10から$25ぐらいでしょう。
     
IDPROM 構成は、/usr/include/mon/idprom.h:
01  format identifier
    51, machine type -here a 4/60
      08 00 20 07 40 c7 ethernet address. (08:00:20:07:40:c7)
といったところです(idprom:hを参照)
     
このような情報は、いくつかの方法で収集する事ができます:
また、2kのNVRAMは
                     open /dev/kmem, lseek to ffff8000, read 2k
SUN4mの全機種 (8k nvram)は
                     open /dev/kmem, lseek to feffe000, read 8k
機能の低いddは、このミニプログラムの書き込みを省略するlseekができませ
ん。(申し訳ありませんが、これに対し何も準備できていません。-Joergはこ
の機能に対応したddを使用しています。)
     
SunOS4では、このアドレスは、ヘッダーファイルにあります。Solaris 2.xで
は、この情報はなくなっていてますが、どちらにしても有効な方法です。
     
NVRAMの内容は、3Vのリチウム電池で電源が供給されています。電池は水晶発
振器と一緒に、RAMの上に背負われた形で、乗っている上蓋の中にあります。
電池は凹みのある1番ピンの反対側の12番ピンの隣にあります。
     
     
                         _発信器
                        /
                       / _電池
                      / /
                   -------
                   | O O | <-- ここを切る
                   -------
                  /
             1番ピン
     
マークを上にすると、上蓋から出っ張りが樹脂筺体に下向きにのびています。
注意深く凹みを埋めているプラスチックを切り離します。この作業には、小さ
い切削ツールをつけた、ミニドリルのようなものが最適です。プラスチックに
埋まった二つの小さな金属製のコネクタが見つかるでしょう。回線をショート
させないように注意しないと、NVRAMの情報を失ってしまいます。(もし、ま
だ残っていればですが)このために、前もって、saveしなければならないわけ
です。
12番ピンに近いコネクタが - グランドで、もう一つ(反対側)が + 3V 入
力です。このコネクタに、新しい3Vリチウム電池をハンダ付け結線します。
この操作中に、ramを消去してしまったら、次の方法の一つで再書き込みをし
てみてください。
     
 -eeprom を外す
 -NVRAMを代わりに挿入する
 -Sun 3 システムを diagモードか何かにセットします。(通常、NVRAMが新品
でなく、チェックサムがOKの場合以外は起動しません。この場合には、有効な
NVRAMデータに何か偽情報をいれています。)
 -起動します
 -ddを用いて、save fileから/dev/eepromに最初の2040バイトを書き込みま
す。
     
Sun 3/80 では、古いNVRAMを新品のNVRAMと入れ替えるだけで、/dev/eepromを
書き換えることができます。
NVRAM有効で、過敏でないものかどうか、まだテストはしていません。他の 
Sun 3 の機種と異なり、3/80はdiagモードにセットするスイッチがなく、代わ
りにNVRAM内でセットするようになっています。
     
     
J"org は、textoolソケットのある3/50を使って、この方法を実行していま
す。
     
 -先のとおり、NVRAMを読み出します。
 -ネットに接続しないで、再起動できるかどうか確認してください。
   (rename /etc/defaultdomain, turn automounter off, などを使います)
 -マシンのスイッチを切ります。
 -古いidpromを新品と交換します。
 -ネットには接続しないこと。空のNVRAMはイ−サネットアドレスとして、よ
くある ff.ff.ff.ffを認識します。
 -ローカルディスクから起動します。idpromが無効であることが警告されます
が、とりあえず起動します。
 -resettodrをパッチして、NVRAMのページを書き込み可能にします。
(SunOS 4.1.3ででテストしたところ、異なるリリースでは、ロケーションが
異なる可能性があります。)
kadb内には、プロンプトはありませんが、出力されたものと区別するために、
前もって偽のプロンプト">"の、タイプ入力が必要です。
     
root@hostname> adb -w -k /vmunix /dev/mem > resettodr+3ac /i
              resettodr+3ac:    call  _mmu_setpte #他に何かあった場合
先に進んではいけません破損する危険があります。
     
            > /W1000000                            #  /vmunix on disk
をパッチしたくなければ、/を入れて下さい。
     
     
            > /i                                     
              resettodr+3ac:    nop                  # ここで、nop に
なっていなければなりません。
            > $q                                       # adb 
root@hostname を終了します。
     
> date 9404212300      # dateをセットします
     
・ここで、dateのセット後、NVRAMは、前述の通りアドレス書き込みが可能に
なっています。
・/dev/kmem r/W を開き、アドレスを探します。
・save file から2040バイトを書き込みます。(クロックをオーバーライトし
ないように)
・/dev/kmem を閉じます。
・再起動します。(このページを書き込み可にしたくないでしょう)
     
全て、このとおりでなくてはいけません。
     
Joerg は、resettodrを分解し、こういった情報を集めたのです。/vmunix の
ヴァージョンを使っている場合には、また異なります。(resettodr+3acのと
ころで、 call _mmu_setpte は、無しです。)次の、手順で、最後のcall 
_mmu_setpte(2回callされます)のロケーションを探して下さい。2回目の
方、つまり最後のの方がパッチする方です。
     
            > resettodr /i
            > [return]                           # returnでhitするまで
とばして下さい。
     
            > [return]
              resettodr+?:    call  _mmu_setpte   # 1回目
            > [return]
               .
               .
            > [return]
              resettodr+?:    call  _mmu_setpte # 2回目 - ロケーション
を書き込んで、前述の通り続けます。
     
     
すでに、電池が切れてしまい、idpromの内容がバックアップされていない場 合、Sunに代金を払うか、または、イーサネットアドレス、シリアルナン バー、hostIDなど重要な情報がわかっていれば、idpromを再生することができ ます。イーサネットアドレスは、/etc/ethers か アドレスを前もって、入力 しておけばyp map ethersで見つかります。hostIDは 十六進法のシリアルナ ンバーなので、その一つがあれば十分です。hostIDはライセンスファイルにあ るかもしれません。 Bills も必要な情報を提供してくれています。 From: adrie@ica.philips.nl (Adrie Koolen) Subject: Re: SS1+: Incorrect configuration checksum Date: Tue, 22 Mar 1994 13:53:41 GMT idpromは、32バイトの不揮発メモリの一部です。後半の16バイトは、リザーブ されています(つまり 0)。idprom forth commandと "/usr/etc/devinfo -vp | grep idprom" SunOS 4.x のコマンドで、この32バイトがわかります。 idpromにデータを入力する原始的な方法は、forth(boot prom)monitorを入 力します。(例えば、L1-a、"n"を入力) ok f7002000 ffd04700 pgmap! ok 01 ffd047d8 c! ok 51 ffd047d9 c! ... ok 00 ffd047f6 c! ok 00 ffd047f7 c! ok reset この32バイトは、idprom commad か devinfo commandからの連続した32バイト です。l! command で32バイトの保存できます。この方法は、キー入力を省略 できます。51 は、Spercstation 1 にのみ有効で、他の機種は異なる数字のな ります。 この方法は、正しく行わないと、Spercstationマシンを使用不能にすることま す。Sunでは、一切サポートしません。IDPRONMの内容を再保存する際には十分 注意して下さい。 From: adrie@ica.philips.nl (Adrie Koolen) Subject: Re: dead NVRAM Message-ID: <1994Feb10.092712.1253@ica.philips.nl> Organization: Philips Consumer Electronics, Eindhoven, The Netherlands Date: Thu, 10 Feb 1994 09:27:12 GMT 「...引用文、一部省略...」 Sunよりの回答。Sunでは、ユーザーにhostIDや、イーサネットアドレスつつき 回してほしくないと考えていることは想像できますが、もちろん、ご自身で設 定して結構です。既にGlennが回答したとおり、まず、新しい、Mostek MK48T02チップを入手して、あなたのSpercstationの壊れたものと交換して下 さい。 そして、マシンのスイッチを入れ、NVRAMが空であることを確認して下さい。 romは出荷時のdefaultになっていますが、idpromの内容はそのまま残っていま す。idpromは2kのスタティックメモリ内に offset 0x7D8で格納されていま す。 NVRAM上に書き込まれるのを防ぐため、NVRAMのページは読込専用になっていま す。 ***ここからの作業は 使用不能になる危険を伴います*** hostIDの変更には、マシンを起動し、monitorモードにします。(ok プロンプ トが出ます) そして、NVRANMのページを書き込み可能にします。 ok F7002000 FFD047E5 pgmap! hostid を 51123456 にセットします。 ok 51 FFD047D9 c! ok 12 FFD047E4 c! ok 34 FFD047E5 c! ok 56 FFD047E6 c! format、イーサネット、チェックサムもセットします。現在の内容とバ イトの順を見るために、 ok .idprom command を使用します。 チェックサムはidpromの全部か最初の15バイトのも のです。 ***ここまでで危険な作業を終わります*** idpromの内容変更には、必ず何らかの予防措置をとって下さい。何か、間違い を起こしたとき、マシンが使用不能になってしまう可能性があります。何かを 変更する前にはいつでも、まず、idprom commandを使って、現在の内容を書き 込んでおいて下さい。 我々のところには、少数のSpercstationしかありませんが、すでに、古い Spercstation 1の何台かは、NVRAMが空になって、起動しなくなりました。 (私の考えでは)Sunでは、Mostek MK48T02を使用したマシンに設計ミスがあ り、5年たっても寿命がこないものが何台かあるようです。 Adrie Koolen (adrie@ica.philips.nl) Philips Consumer Electronics, Eindhoven, the Netherlands
     
クロックが作動するには何かのきっかけが必要です。(新品のNVRAMでは、電
池を節約するため、スリープ状態になっています)Clock driverでこれを操作
する必要があります。
  /usr/include/machine/clock.h (solaris2の場合 /usr/include/sys/
clock.h)
から、この操作結果がわかります。
あなたのclock driverでこの操作ができない場合、大きな障害になります。そ
んな場合には、Jeorgまで、お問い合わせ下さい。(mail to js@cs.tu-
berlin.de).
--
Tatjana Heuser      | pierrot@cs.tu-berlin.de
Ettaler Str.2        |
D-10777 Berlin      | +49 30 / 214 27 58
     
     
 **************************************************************
                               IDPROM テンプレート
 *************************************************************
The idprom.h のあるファイルは、あなたがしたように、アクセスできる Sun
 Os 4.1.x  サーバーから引き出すことのできる、著作権を持つ書類です。
     
ここで、ちょっと、idpromを偽のhostIDとdateを使ってSun Sparcstation IPC
のようにしてみます。イーサネットアドレスについて、FAQの中で使った手で
す。あなたのパラメータを代わりに使用して行って下さい。
     
HOSTID:  十六進法の最初のCPU ID バイトのシリアルナンバーです。51 と 12
 34 56, であれば HOSTID = 51123456 になります。
     
偽の、しかし、使用可能なマシンの profile
Sparc IPC, sun4c 4/40
Serial #1193046
Ethernet: 8:0:20:7:40:c7
HOSTID: 51123456
date: 0 1 2 3
Checksum: 87
     
(全数値とも十六進法表示 !!!)
     
     
BYTE    Address         Value           Description 
 1      ffd047d8        01              いつでも 01...  prom numberを示す.
 2      ffd047d9        51              sun4c, SPARC 1+用 CPU ID, 51  
 3      ffd047da        08              イーサネットアドレスの最初の数値
 4	ffd047db	00		Second	""   ""    ""       ""
 5      ffd047dc	20		Third   ""   ""    ""       ""
 6      ffd047dd	07		4th	""   ""    ""       ""
 7      ffd057de	40		5th	""   ""    ""       ""
 8	ffd057df	c7		6th number of ethernet address
 9      ffd057e0        00              DATE の最初の数字
10      ffd057e1        01              DATE の2番目の数字
11      ffd057e2        02              DATE の3番目の数字
12      ffd057e3        03              DATE の4番目の数字
13      ffd057e4        12              Serial Number (part 1 of 3) 
14      ffd057e5        34              Serial Number (part 2 of 3)
15      ffd057e6        56              Serial Number.gif (part 3 of 3 :)
16      ffd057e7        87              Checksum byte.
     
17      ffd057e8        00              UNUSED
..      ........        ..              ......
32      ddf057f7        00              UNUSED
     
これについて、チェックサムのXORバイトは、1〜15バイトのxorではありませ
ん。いろいろやってみましたが、file eaterにCがありません。この値の原理
を見つけた方はE-mailを送って下さい。編集した言語が奇妙に組み合わせてあ
ります。次回にはこの情報も載せたいと思います。
     
このコメントにお付き合いいただきありがとうございます。NVRAMのトラブル
を失敗なく克服されることを祈っています。
     
気楽にやってみましょう。