コンピュータ

BCM5722

テキトーにBCM5755なbrgphyと同じように認識するようにmiidevsとbrgphy.cを直してみた。それらしく起動したが症状は改善せず。
テキトーすぎたのでFreeBSD, OpenBSD, Linux のソースをあたってみる。
FreeBSDとOpenBSDは,BCM5722の識別だけして,特に処理はなし。
Linux (net/tg3.c) は,BCM5722 (とBCM5756) を識別した条件分岐があるが,他の ASIC BCM5755 その他系の TG3_FLG2_PHY_JITTER_BUG フラグを立てる部分を回避してるだけ。
TG3_FLG2_PHY_JITTER_BUG がある場合の処理は,NetBSD の brgphy.c でいうところの bcm5755_load_dspcode そのもので,これを回避しているということは,結局特別な処理は何もいらないっぽい。
うーん,調子が悪いのは別の原因か。

HP ProLiant ML110 G5 で NetBSD (その2)

ネットワークまわりがどうもひっかかる感じ。

$ dmesg | grep bge
bge0 at pci4 dev 0 function 0: Broadcom BCM5722 Gigabit Ethernet
bge0: interrupting at ioapic0 pin 17
bge0: ASIC BCM5755 C0 (0xa200), Ethernet address (略)
bge0: setting short Tx thresholds
ukphy0 at bge0 phy 1: Generic IEEE 802.3u media interface

こんなNIC。
適当なPCのターミナルからsshして cat で長いファイルを流すと,最初は順調だがフロー制御が入ったあたり(?)からガタガタに(間欠的に)なる。そしてたまに,

bge0: watchdog timeout -- resetting
bge0: block failed to stop: reg 0x1400, bit 0x00000002

こんなエラーを吐く。
よくみたらukphyじゃん…。これが悪い?
ちなみに,問題の起きていないML110G4 (NetBSD 4.0_STABLE) は,こんなかんじ。

$ dmesg | grep bge
bge0 at pci3 dev 0 function 0: Broadcom BCM5721 Gigabit Ethernet
bge0: interrupting at ioapic0 pin 17 (irq 12)
bge0: ASIC unknown BCM575x family (0x4201), Ethernet address (略)
bge0: setting short Tx thresholds
brgphy0 at bge0 phy 1: BCM5750 1000BASE-T media interface, rev. 0

vst作成メモ

サンプルのAGainを参考にして,

void EstMS::processReplacing(float** inputs, float** outputs, VstInt32 sampleFrames)
{
  float* in1  =  inputs[0];
  float* in2  =  inputs[1];
  float* out1 = outputs[0];
  float* out2 = outputs[1];

てな感じで,バッファのアドレスを取り出して,

  *out1 = (*in1 + *in2) * fGain;
  *out2 = (*in1 - *in2) * fGain;

という処理を,(各ポインタを加算しながらsampleFrames回)繰り返せばいいかと思ったが,うまくいかなかった。何故か2回通すとモノラルっぽくなる。けど,完全にモノラルでもない。

いろいろ試行錯誤した結果,どうやら入力と出力のバッファのアドレスが同じだったらしい。上の行で*out1に書き込んだ時点で*in1が上書きされていると。

わかってしまえば,「なあんだ」って話なんですがね…。

HP ProLiant ML110 G5 で NetBSD

NetBSD 3.x は,キーボード周りで止まる。

G4 のときは BIOS で 8042 Emulation Support を切ると起動したが,G5 はその設定が見当たらない。
NetBSD 4.x は,G5 だと起動しない。

http://mail-index.netbsd.org/port-i386/2008/11/22/msg000932.html
NetBSD 5.0_BETA は,今のところ問題なし。

current は,これから。

でまあ,G4 も G5 もなんかやたらと HDD が遅いのだが,

# dkctl wd0 setcache rw

で,普通の速さに。今は rc.local で無理やり全部のディスクを設定している。
あってるかどうかわからないけど,G4で1年間動かしたが特に問題なし。

ipfilter の keep state がうまく働かない

ipfilter で、外部からの接続をすべて拒否しつつ、内部からは何でもアリな以下のような感じの ipf.conf の設定(本当はもっといろいろ書いてあるけど)をしたとき,普通うまくいくんだけど,うまくいかないサーバが一台だけあった(NetBSD/amd64 4.0)。

block in on bge0 all
pass out quick on bge0 proto tcp from any to any 
flags S/SAFR keep state

まだちゃんと追ってないので原因はよくわからないけど、これでなおった。

ifconfig bge0 -tcp4csum

(/etc/ifconfig.bge0 で tcp4csum 指定してたので削除した)
wm とか re は tcp4csum 付きでも大丈夫っぽいんだけど、bge固有の問題?

Cubase 4.5.1 (VST Sound Collection vol.1)

tips
ダウンロードは,USのサーバが圧倒的に速かった。(日本語サイトからはリンクされてないけど)
http://www.steinbergmediacenter.com/
VST Sound Collection 入れても音色が選べない場合:
1. カテゴリを表示(●をクリック)。
2. 場所を表示(●をクリック)。
3. それっぽい名前の場所にチェックが入ってなければ入れる。
3′. チェックが入っているのにその場所の音色が一個もでない場合には,チェックを一旦外して(ダイアログがでたら「変更なし」)再度チェックを入れる。
同じハマりの人も多そうなのでメモ。
気付かなくて2回も修復インストール(計3回インストール)しちゃったよ・・・。
バグフィックスに関しては,直ってるバグと直ってないバグが半々かな。

Windows XP x64 Edition で Visio のデータベースモデル図を作成しようとするとハングする件

日本語で検索しても全然情報が出てこないが、visio database hang 等で(日本語のページに限定せずに)検索するといくつか情報が出てくる。
どうやらプリンタドライバに問題がある場合にハングする(応答なしになる)とのこと。とりあえず、適当に違うプリンタ(Microsoft XPS Document Writer)を指定してからデータベースモデル図を新規作成したらうまくいった。
Visio 2003でも2007でも同じ症状。OS が Vista x64 でも同じらしい。

たかがビルドでハマりにハマる

何台かでソースからビルドした NetBSD の /usr/bin/ld のうち一台だけ動かない。

$ ld
ld:built in linker script:1: ignoring invalid character `20' in expression
ld:built in linker script:1: ignoring invalid character `37777777646' in expression
ld:built in linker script:1: parse error

それぞれバージョン違いで,動かないのは netbsd-4 のツリーをビルドしたもの。netbsd-4 のバグかと思い,別のマシンにもたまたま netbsd-4 のソースが展開してあったのでビルドするとうまく動く。
あれこれやって,生成された eelf_x86_64.c がおかしいところまでは突き止めたが,何故おかしくなるかわからないので,ビルドログを比較してみると,エラーが出ているのを発見。

 #    create  ld/eelf_x86_64.c
unset MACHINE || true;  LIB_PATH=/usr/lib
/bin/sh /usr/src/gnu/usr.bin/binutils/ld/../../../dist/binutils/ld/genscripts.sh /usr/src/gnu/usr.bin/binutils/ld/../../../dist/binutils/ld /usr/lib "/usr"  x86_64--netbsd x86_64--netbsd x86_64--netbsd  elf_x86_64 /usr/lib no elf_x86_64 "x86_64--netbsd"
+sed: stringify.sed: No such file or directory
+sed: stringify.sed: No such file or directory
+sed: stringify.sed: No such file or directory
+sed: stringify.sed: No such file or directory
+sed: stringify.sed: No such file or directory
+sed: stringify.sed: No such file or directory
+sed: stringify.sed: No such file or directory
+sed: stringify.sed: No such file or directory
+sed: stringify.sed: No such file or directory
+sed: stringify.sed: No such file or directory
+sed: stringify.sed: No such file or directory
+sed: stringify.sed: No such file or directory
+sed: stringify.sed: No such file or directory

その手前で stringify.sed が作られていない模様。

-#    create  ld/stringify.sed
-rm -f stringify.sed
-ln -s /usr/src/gnu/usr.bin/binutils/ld/../../../dist/binutils/ld/emultempl/astring.sed stringify.sed

で,結局あれこれいじっていると,/usr/src/gnu/usr.bin/binutils/ld/stringify.sed (シンボリックリンク)があるのを発見。既に存在するので作られないが,実行時に使われる /usr/obj/gnu/usr.bin/binutils/ld/stringify.sed がないというオチ。
結論としてはこんなかんじ。

  1. 何かの拍子に(過去に)ソースツリー内にシンボリックリンクを作ってしまった。(多分自分のミス)
  2. オブジェクトのディレクトリがソースのディレクトリとは別(NetBSD本体のビルドでは常にそうなる)であってもソース側にターゲットが存在してしまっているとオブジェクト側に作られない。(makeの仕様)
  3. ビルド中に使っている binutils/ld/genscripts.sh の中でエラーを起こしてもビルドが止まらない。(?)
  4. 結果として出来上がった eelf_x86_64.c が壊れているにも関わらず,コンパイルが通ってしまう。具体的には char * で内蔵 ldscript を返す関数が,stringify.sed がないせいで何も作られず,return; となってしまっているのにエラーにならない。(?)
  5. 存在しない戻り値(メモリのどこか)を ldscript だと思って読み込むが,当然ぐちゃぐちゃなのでエラー。

まあ発端は自分が悪いんだけど,バグで同じようなことが起きる可能性も考えると,ツール類も -Wall … -Werror つきでコンパイルできると本当はいいんだろうねえ。

おしえてMSのえらいひと

Office2003と2007の共存がしたい。
どっちかがあれば,もう一方のファイルも互換モードで開くのだが,2003と2007で交互に編集したりすると,いろいろおかしくなるのはお約束。PowerPointが特に顕著。
そこで,Office2007のインストール時に2003は消すのがデフォルトになっているのだが,残すようにしてみた。それで,例えば *.doc は Word2003 で,*.docx は Word2007 で開くのかと思ったらそうでもなくて,常に 2007 が動く。関連付けを変えようとしてもうまくいかない。
とか書くと,親切な人が「『ツール』→『フォルダオプション』で『ファイルの種類』を…」云々と教えてくれるのだが,それ自体がうまくいかないという話。2003 の方の WINWORD.EXE を明示して関連付けても Microsoft Office Word というアプリケーションとの関連付けと勝手に解釈して(?)新しい方が起動してしまうらしい。
しょうがないんで,

START "" "C:Program FilesMicrosoft OfficeOFFICE11WINWORD.EXE" %*

みたいなバッチファイルを作って,そのバッチに *.doc 等を関連付けすることでなんとか一応目的の共存はできるようになった。
ただ,これでわかったことは,2003使った後に2007使ったり,その逆をやると毎回インストーラが起動して「構成しています」とか何やら設定をはじめる。2007使った後の2003のインストーラはそれほど時間がかからずに終了するが,2003使った後の2007のインストーラは結構待たされる(1分以上?)。
なんとかなりませんかね,これ。

IBM System x3105 で NetBSD 4.0 が起動しない件

NetBSD 3.1 は動いてた。
4.0 にしようとしたら,

viaide2: couldn't map sata regs

といわれてwd0, wd1 が見つからずに死亡。
PR #38011 がそれっぽい。
http://www.netbsd.org/cgi-bin/query-pr-single.pl?number=38011
手で viaide.c にパッチ当ててみると wd0, wd1 は見つかったものの,正しく動いてないのか起動時の init が呼ばれるあたりで固まる。
ちなみにチップセットは NVIDIA nForce Professional 2000 MCP らしいんだが,nForce4 でいいんだよねこれ?(少なくともSATA周りは)
とりあえず 3.1 に戻す。
続く (?)