(上に述べたような理由で、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のトラブル を失敗なく克服されることを祈っています。 気楽にやってみましょう。