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