SparcのNVRAMの交換のはなし(LINK)
Photo report of SS5 NVRAM change by ynagata(LINK)
SPARCstationのnvramに電池を外付けする(LINK)

原文(English)
  1. 古いNVRAMの読出し (js)
    どのNVRAMがどの機種にあるか (js)
    idprom 構成 (js, header)
    1. devinfo
    2. idprom (adrie)
    3. into a file (js)
  2. 古い nvram 再生 (js)
    adding a new battery
  3. nvram の書き込み
    1. eprom burnerを使用する場合
    2. Sun3を使用する場合 (js)
    3. Sparcを使用する場合 (js)
    4. prom monitorを使用する場合 (adrie)
    5. SUNから新しいnvram の購入
  4. 発生する可能性のある問題
  5. SparcのNVRAMの交換のはなし(LINK)
  6. NVRAM の干上がったSUN3を手動でbootする方法(LINK)
  7. Frequently Asked Questions about Sun NVRAM/hostid(LINK)

  • 前書き
    イーサネットアドレスについて:
    アドレスは、重複しない唯一のものでなくてはならず、これは、アドレスが もつ、本来の意味でもあります。もし、自分のアドレスを知る手がかりもな くした場合、ネット上にアドレスを作らないNovell PC Bugworks上などで は、使われていないアドレスの番号を探してください。あるsystem architectから、寄せ集めの偽のアドレスをつくらなければならない場合、何 を使うべきか知るためには、alt.2600や他にイーサネットアドレスのデータ ベースがあることを教えてもらいました。製造者は、Ethernet big authority beaurouから、アドレスナンバーの最初の部分を指定されていま す。SUNでは8:0:20:x:x:xのようです。いづれにしても、イーサネットアドレ スは、通信上の指紋のようなものです。UDPは雄弁なのです。 これが理由で、ネット上の通信トラブルを避け、ローカルネットのマシンが特 定されなくなることを避けるため、SUNはユーザーにアドレスをいじってほし くないのです。それで、警告するわけです。
    hostIDについて:
    ライセンスの掲示はすでに全部読まれたでしょう。他機のソフトを走らせる ために、マシンのシリアルナンバーを変更することは著作権に反します。こ れが、かつて、Apple||が、今は PC が売れる主な理由です。同じくSUNの販 売を延ばすことになると... こうしたわけで、hostIDナンバーが必要なのです。この FAQ はSUNのハード ウエアを売るためでなく、あなたのNVRAMがダウンした場合に助けられるよう 創られたものです。

    (上に述べたような理由で、hostIDを一度変更された方は、1-800-555-pir8に 電話して報告してください)

  • オリジナル FAQ 現在、次第に多くの古いSpercStation が5年という期間を過ぎ、NVRAMの寿命 がつきるという問題がFAQによく登場します。
    今までに、質問したり、掲示されたものなどからここにまとめてみました。こ れは、下に示す、他の二人の方からの情報によるところが大きいものです。
         
         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と一緒に送って います。


    1.古いNVRAMの読み出し
    
    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を参照)
         
    このような情報は、いくつかの方法で収集する事ができます:
    
    1.1 devinfo: 「人が読める」情報からNVRAMを再構築する方法で、作業量が多く賢い方法ではない。
    1.2 prom Monitorから: .idprom -情報を書き込む必要がある。
    1.3 SunOSから:
    2k中の最後の8バイトは、クロックに使用されています。3/50のidpromサイズ はは、32バイト、(使用されているのは、最初の16バイトのみ)。48T02の最 後のアクセスできる32バイトは、3/50と互換するために使用されています。そ れで、id-dataは 2k-32バイト-8バイト になります。
    また、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で
    は、この情報はなくなっていてますが、どちらにしても有効な方法です。
    

    2. 古いNVRAMの再生
    NVRAMの内容は、3Vのリチウム電池で電源が供給されています。電池は水晶発
    振器と一緒に、RAMの上に背負われた形で、乗っている上蓋の中にあります。
    電池は凹みのある1番ピンの反対側の12番ピンの隣にあります。
         
         
                             _発信器
                            /
                           / _電池
                          / /
                       -------
                       | O O | <-- ここを切る
                       -------
                      /
                 1番ピン
         
    マークを上にすると、上蓋から出っ張りが樹脂筺体に下向きにのびています。
    注意深く凹みを埋めているプラスチックを切り離します。この作業には、小さ
    い切削ツールをつけた、ミニドリルのようなものが最適です。プラスチックに
    埋まった二つの小さな金属製のコネクタが見つかるでしょう。回線をショート
    させないように注意しないと、NVRAMの情報を失ってしまいます。(もし、ま
    だ残っていればですが)このために、前もって、saveしなければならないわけ
    です。
    12番ピンに近いコネクタが - グランドで、もう一つ(反対側)が + 3V 入
    力です。このコネクタに、新しい3Vリチウム電池をハンダ付け結線します。
    この操作中に、ramを消去してしまったら、次の方法の一つで再書き込みをし
    てみてください。
    
    3 新品のNVRAMか、消去された NVRAM に書き込む場合
    3.2 Sun 3 システムには、eeprom用のソケットがあります。(ただし、3/60 を除く)
     -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を使って、この方法を実行していま
    す。
    
    3.3 Spercマシンでは
     -先のとおり、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回目 - ロケーション
    を書き込んで、前述の通り続けます。
    
    3.4 prom monitorから情報を再保存する
    すでに、電池が切れてしまい、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
    
    3.5 新品のNVRAMをSunから購入する場合
    全ての可能性がない場合、たとえば、NVRAMが既に寿命がつき、イーサネット アドレスも、シリアルナンバーもhostIDもわからないような場合は、Sunに NVRAMを送るしかありません。NVRAM上のバーコードから、idpromを識別し、2 カ月以内に新しいものを返送してくれます。ドイツのSunでは、200ドイツマル クかかります。アメリカでは$100弱ではないかと思います。
    4 可能性のある問題点
         
    クロックが作動するには何かのきっかけが必要です。(新品の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のトラブル
    を失敗なく克服されることを祈っています。
         
    気楽にやってみましょう。