[X/WindowManager] もう3年間も使い続けている qvwm を ぼちぼち近代的なウィンドウマネージャに乗り換えようと思う。 しかし、ウィンドウマネージャを設定するには X を上げ下げしなければ ならず、うちの X は 4.0.3 の nv ドライバなので X を2回上げると コンソール画面が真っ暗になってしまう。 てーことは、ウィンドウマネージャ入れ換える前に X を入れ換えないと いけないってことなのね。面倒くせー。
[x68k/hdc] 相変わらず割り込みが分からないので 全部ポーリングモードで実装してみることにする。 つーか hdc って割り込み使ってるんかなあ。 セレクションフェーズには成功してるっぽいんだけど、そっから先の 実装がいまいち分からなくてまだ作っていないのでタイムアウトする。 ちゃんとタイムアウトの機構は働いているようだ。 あ、adapter resource shortage とか言われてる。acb 解放するところ 作ってないから当たり前か...。
SPC のコードをほぼ丸写ししながら acb を解放してあげる。 その途中で気づいたけど、セレクションフェーズでバスに出す ID を ターゲットの ID しか出してなかった。SASI だとターゲット ID だけを 出すんだけど SCSI は自分 (イニシエータ) の ID とターゲットの ID の 両方を出さないといけないんだよね。 SASI では2つの bit が ON になることはないから、ちゃんとした レジスタなら書き込めなくてもおかしくないかも知れないが hdc の select on のレジスタはたぶん幼稚な(もとい簡易な)設計になってて 書き込まれたデータをそのままバスに出してるだけだろうと踏んで 2つの bit を OR したものを書き込んでみる。ちゃんと書き込めた。 しかも、以前はここでステータスレジスタが意味不明になってたんだけど、 ステータスレジスタもちゃんと規定通りにデータフェーズに移行してる。 以前 TEST DRIVE READY コマンドがうまく動かなかったのは自分の ID を 出力してなかったのが原因かなあ。こっちが SASI コントローラでも バスの向うにいるのは SCSI HDD (SCSI コントローラ) だからね。
[x68k/etc] とか思いながらいんちきコマンドフェーズも 書いてみて、いざテストしようと思って実験台の PRO-II を再起動したら 自動起動するはずの ppp.x がこけた。 何故だ? もう一度再起動してみよう。うーむ、変わらない。 あら、FLOAT4.X の登録に失敗している。もう一度再起動。 ん? Xellent30 の起動画面と音が出ないぞ。 これはおかしい。ちょっと電源抜いて休ませてみよう。
1時間後電源再投入。あら、一緒だ。つーか SRAM が飛んでるし。 ああ、内蔵電池が切れちゃったのね。 ほぼ常時通電させてたから電池の消費は抑え気味だったにしても 高専3年の冬に買って以来今日まで6年半かあ。 在庫不良の新品だったんだから、私が手にするまでに多分 かなりの時間があったはず。あんな小さいボタン電池でよく持つね。 ちょっと感慨にフケる。
しかし、感慨にフケってる場合じゃなく、電池買ってきて取り替えなきゃ...。 ああ Xellent30 の起動ディスクとかあったっけかなあ。 SxSI の起動ディスクもないしなあ。隣に X68030 があってよかったよ。 せっかく hdc 計画再始動したばかりだったのにまた中断。 復旧に時間かかるな、これは...。
[MI/audio] 以前 FreeBSD で録音の仕方が分からなかったので 当時のサーバ(FreeBSD 4.2)での録音を断念したが、 先月あたりに導入した新サーバは NetBSD なので、今度から ラジオの録音をサーバに任せることにする。というかそうしないと 毎夜毎夜、PC 2台も起動しっぱなしなのは暑いしうるさいからね。
前回は sox で .au ファイルを .wav に変換する方法が分からず FreeBSD で ports になっている AFsp を手でコンパイルしてみたのだが、 今回もコンパイルするのは面倒なので、pkgsrc になっている sox を 使う方法をとることにする。結論からいうとこんな感じ。
これで今日から静かな夜を迎えられる。 ただキャプチャとかするために音声入力ケーブルをクライアント PC に差し替えたりした場合に、元のサーバに戻すのを忘れなければいいけど。sox input.au -r32000 -s -w output.wav
[x68k/Nereid] X68k 用 USB/Ethernet/メモリ複合ボードの Nereid がいよいよ本予約を 開始するというお知らせが届いていた。 ので、また無謀にも NetBSD のドライバでも書いてみようと思った。 いや思うの自体は Nereid が発表された時から思ってるんだけどね。 コンタクトをとってみると、あっさり人柱を送って下さるという。 うーむ、どこまでも自分の無謀さ加減を知らないやつだ > 私 (ぉ。
そのメールの中にちょいとした初期化方法まで書いてあった。
う゛、USB の勉強から始めにゃならんのだ。 とりあえず BSD Magazine の前川さんの記事でも読むべか。 また電車の中で飽きない日が続くな。 って明日からお盆休みじゃん。とりあえずブツが届くまでは hdc の コードでも書くか。つーかその前に内蔵電池直さなきゃ。 そうそう、半田持ったついでに SCSI コネクタも作らなきゃ。 ああ仕事してるよりも遥かに忙しい(笑)。: 接続されている機器をチェック :
[x68k/Nereid] もう一つ気づいたけど、うちに USB 機器って一つも ないじゃん(笑)。まあ私の目的は Ethernet だからいいっちゃあいいんだけど。
[x68k/etc] hdc 実験機 X68000 PRO-II の内蔵電池を交換した。
交換といっても
ソケットに電池はめるだけの最近のひ弱な電池とは訳が違う。
基板から直に出てる電極をもぎとって、付け根に新しい電極を
つけかえて、無事復旧。ちゃんと通電してるし。
写真は交換前、交換後。交換前は前面パネルと FDD を外した前面から撮影。
電池はスピーカの下あたりの縁がオレンジの丸いの。
交換後のは電池を絶縁テープでくるんで基板に配線。
うちの X68000 PRO は Xellent30 (68030 アクセラレータボード) を 載せてて、更に SASI ポートで SCSI ハードディスクを使うための SxSI も 起動時から必要なため、この両方がセットになったブートローダを SRAM にインストールする必要がある。FD の山を漁っていたら みごとインストーラとインストールするイメージを準備してある FD を 発見したので、あとは switch.x でメモリ量を増やしたり SASI HD を 0 にしたりして、割とトラブルなく復旧完了。
[x68k/hdc] 内蔵電池を交換してから、カーネルが起動途中で panic するようになった。intio0 あたりで panic するんだけど、 即リセットするから panic メッセージが読めない。もう5回くらい panic してるんだけどまだ読めない。つーかカーネル起動するには、 一旦 FD で Human68k を起動してシリアル 38400bps の ftp で netbsd.gz を転送してきてから展開して、やっとカーネル起動なんですが、 5分以上かかる...。むう。
[x68k/etc] 正月休みにジャンクの HD を購入してから ケースと電源が足りずに基板むきだしだった HDD を整理して、 やっとすべての HD をケースに入れることに成功した。 これで地震がいつきても HD の基板のチップの端が欠けるような こともないでせう。
[x68k/Nereid] Nereid の試作基板の写真を見て思った。
これが設計できるんだから、すごいよねえ...。私も本来はそっちの人でそっちに進みたかったはずなのに 何を間違えたかネットワークやってるし...。 74LS04 くらいまでなら分かるんだけどなあ。
[x68k/hdc] 電池交換後、カーネルが intio0 の認識あたりで 固まっていたのだが、今日試してみるとちゃんと動いた。うーむ訳分からん。 ということで、hdc 計画再開。 これまで SCSI ターゲットに Human68k の入った大事な HD を 暫定的に使っていたのだが、当然恐いので、 ジャンクの 1GB HD を使うことにする。 しかしこの HD だと selection が fail するなあ。 と思ったら Human68k からも SCSI 機器として見えてない。むう。
仕方なくパリティ発生器がないと使えない 128MB の SCSI-1 CCS な HD を用意する。こないだまでこいつが X68030 の /home をやってたんだけどね。 しかし私の最初期の工作品であるパリティ発生器もよくもってるなあと思う。 いかにもはんだがちぎれそうなのになかなかちぎれない。
[i386/cbb] とかいう文中に写真があると体裁がいいんだけど、まだスマートメディアを NetBSD から読めないのよねえ。 [元ネタ1] [元ネタ2] [元ネタ3] [元ネタ4] [続き6]
[x68k/hdc] しかし、やれば出来るもので、 セレクションフェーズ、コマンドフェーズ、ステータスフェーズ、 メッセージインフェーズと辿ってバスフリーフェーズに戻るところまで 出来たので、TEST DRIVE READY コマンドが成功するようになった。 データインフェーズとかをまだ作ってないので、 次に発行されてる INQUIRY コマンドは固まるけどね。
[x68k/hdc] sd0 のアタッチに成功したらしい。 で root デバイスが見つからないよ、で無事固まる(?)ところまできた。 ずらずら出てくるデバッグメッセージを表示させなくすると 固まってしまいアタッチに成功しないあたりが いつものタイミング問題って感じ。
root デバイスが見つからないのは、sd0 がルートじゃないのもさることながら、 シリアルで転送するカーネルの転送サイズを減らすために、 カーネルコンフィギュレーションファイルで file-system の指定を NULLFS だけにしてるから(笑)。 ほんとは一つもなくしたかったんだけど、config(8) に少なくとも1つは 指定しやがれって怒られたから。とりあえずウェイトをめっちゃ入れることでタイミング問題は解決。 今度は ID=1 のデバイスを触りに行こうとして死亡。 セレクションが失敗した時の処理がないからか。さすがにわかドライバ(笑)。
[x68k/hdc] ID=1 を触りに行って死ぬ問題も解決。 原因はわけも分からずほかのドライバを丸写ししたコードにあった。 さすがは、にわかドライバだ。ということで念願の dmesg です (青い字のあたりね)。 x68k port 持ってる人なら分かると思うけど極限までデバイスが少ないです (もともと少ないんですが (^^;)。 だって netbsd.gz を 3.4KB/s でシリアル転送なんだもん(笑)。
NetBSD 1.5X (MARI-CURRENT) #122: Tue Aug 14 11:36:47 JST 2001 isaki@erika.local:/var/obj/current/x68k/sys/arch/x68k/compile/MARI-CURRENT X68000/ACE/PRO/EXPERT/SUPER (m68030 CPU/MMU, m68882 FPU, 25MHz clock) total memory = 10240 KB avail memory = 8056 KB using 153 buffers containing 612 KB of memory mainbus0 (root) intio0 at mainbus0 mapped at 0x800000 xel0 at intio0 addr 0xecc000: Xellent30 MPU Accelerator. mfp0 at intio0 addr 0xe88000 intr 0x40 kbd0 at mfp0 clock0 at mfp0: MFP timer C rtc0 at intio0 addr 0xe8a000: RP5C15 dmac0 at intio0 addr 0xe84000: HD63450 DMAC dmac0: 4 channels available. hdc0 at intio0 addr 0xe96000 intr 0x62 using DMA ch1 intr 0x66 and 0x67 hdc0: SASI compatible Hard Disk Controller as SCSI Host Adapter scsibus0 at hdc0: 8 targets, 8 luns per target grfbus0 at mainbus0 grf0 at grfbus0: 768 x 512 16 colors builtin display ite0 at grf0: rows 32 cols 96 scsibus0: waiting 2 seconds for devices to settle... sd0 at scsibus0 target 0 lun 0: <CONNER, CP30100-121mb, 4040> SCS1 0/direct fixed sd0: 116MB, 1524 cyl, 4 head, 38 sec, 512 bytes/sect x 237705 sectors boot device: <unknown> root device:
ちなみにまだ DATA OUT フェーズの処理を作ってないから、 読み込み専用デバイスドライバかしら(笑)。 あ、そろそろ FFS 入りのカーネルにしたほうがいいのね。 ああ、また転送時間が伸びる...。 それよりも前に DMA のコードを書いたほうが得策か。 まずは okiadpcm ドライバの時みたく直接 DMAC を叩く方法をとって そっから vs ドライバのコードでも見ながら bus_dma(9) 使う方法に していこうと考える。
[x68k/hdc] と思ったんだけど、SxSI の sasiiocs.sys (の逆アセンブルソース) 読むと、DMA 転送しといて、転送が終るまで ループしながら待ってた。 なんじゃそりゃ。CPU 転送と速度的には変わらんよーな気がする。 本家 SxSI がそんな感じならこっちはポーリングのままで話を 進めることにしよう。
ポーリングのままでよいとなれば、次にやるのは 実際に sd0 をマウントしてみること。 しかし現状で root にマウントできる HD が余ってないため、 隣の NetBSD な X68030 にテスト用 2GB の SCSI HD つないで 1.5.1_BETA2 の CD-R からインストール開始。 手動で newfs ができなかった自分の無力さを感じる今日この頃。 120MB ってスワップ作って最小インストールして足りるんだろうかとか 思いながら、先日もらった PC に入っていた 2GB の SCSI HD を使う。 いやあ、それにしてもいいもの貰ったもんだ。
[x68k/hdc] ん〜、なんかげろげろに遅い。 8192バイトの読み込み要求が (scsipi から) 来た時なんか 1分くらい待たされる。 CPU でごりごり転送するよりも DMA 転送の方が圧倒的に速いってことか。 言われてみたらちょっと分かる気もするな...。 やっぱり DMA 転送使わないとだめかあ。誰か dmac(4) とか書いてよう。
[x68k/hdc] データインフェーズで DMA 転送使ってみる。 DMA 転送が終るのは DMAC の CSR をポーリングしながら待つ。 けど2回目の転送が開始できない。どっかまだ初期化せなあかんレジスタ あるんかいな。okiadpcm.c 見てもほぼ同じなんだけどなあ。
志向を変えて DMA 転送終了割り込みを受けとって次のフェーズへ移行するように してみた。DMA 転送終了割り込みは上がってるのに wakeup が ltsleep を 起こしてくれない。なぜー。 もはや hdc 云々より完全にただのカーネルのお勉強。 やっぱ悪魔本買わないといけないなあ。 学生時代に大学図書館にあった英語のやつを頑張って読んだことは あるけど、一度や二度読んだだけで頭に入るようなもんじゃないしなあ。 日本語の改訂版て出たんだっけか。
[x68k/hdc] wakeup が使へなかったので、いんちきコードで 誤魔化した。これで DMA 転送を使ったデータインフェーズが1回だけ 動くようになった。まだ2回目の DMA 転送が開始できないみたい。 それにしても恥ずかしくて見せれないようなコードに仕上がってる感じ。 いやだなあ。これでも Linux と FreeBSD で同じデバイスのドライバを シェアして書いたことが1回、NetBSD でドライバ書いたことが1回あるので 今回は述べ4回目なのにまさか tsleep 〜 wakeup が 使えないなんて。ぐすん。
[MI/Eterm] 最近壁紙を(謎)にしてるので、kterm よりも Eterm を 愛用している。でも NetBSD の Eterm は日本語が表示できない。 入力できないのはまだしも表示ができないと sys/arch/x68k/dev/mha.c が読めない(笑)。つーかソースの中に漢字入れるなよ。 -DKANJI つきで手動でコンパイルしてもオブジェクトファイルには 漢字サポートが入っていたのに実行ファイルになると漢字サポートがなくなっていた。 どこで何が行なわれてるんだ?
[x68k/hdc] GONTA さんからの助言のおかげで DMA 転送が 回るようになった。原因は全部転送しきらない間に向うが勝手に フェーズを変えることだった。だから最初からどうやって転送サイズを 両デバイスが把握してるのか不思議だったんだが、そういうことか。 で、なんでデバッグ用の printf 全部外すと sd0 のハードディスクの 名前とかが表示されなくなる訳?
sd0 at scsibus0 target 0 lun 0: <, , > SCS1 0/direct fixed sd0: 2069MB, 6536 cyl, 4 head, 162 sec, 512 bytes/secct x 4238282 sectors
[x68k/hdc] この問題は割り込みとウェイトのタイミングを 変えることで無事回避。 あとなんで boot device を見つけてくれないんだろうと思ってたら カーネルコンフィグファイルに
って書かないといけないのね。config netbsd root on sd0 type ffs
ffs のマウント途中で inode が変みたいなことを言われて panic する。 まあ inode が変というよりも scsipi に渡してるデータが変なんだろうけど。
[x68k/Nereid] とかやってたら、 Nereid 先行機が届いたので コンテキストスイッチ発生(ぉ。
[Human68k/Nereid] NetBSD/x68k で neptune ドライバを ちょっといじったくらいでは Nereid が動作しなかったので さすがにまずは Human68k でやってみることにする。 立花さんの SI 3.61 をダウンロードしてきて実行するが Nereid 認識されなかった。というか SxSI も認識されなかった。 ソースがついてたので調べてみようと思ったがコンパイルが通らない。 ドキュメント読むと素人一切お断りという口調で書いてあるので 質問もできないし。
[i386/cbb] [元ネタ1] [元ネタ2] [元ネタ3] [元ネタ4] [元ネタ5] 会社で最近スマートメディアなデジカメ (つーかうちと同機種) を 買った FreeBSD 人に NetBSD-current の cardbus0 が逝ってしまってるので使えんのだよーという話を したら「じゃ 1.5.1 は?」と素直な返事が返って来た。 そういや、今まで試したことなかったな。なんでだなんでだろう〜♪。 早速 1.5.1 カーネルに cbb を組み込んで再起動する。 おお、見えるじゃん。以下 dmesg から関係分抜粋。
でも前もここまでは見えたけどマウントできなかったのよねえ。 mount -t msdos /dev/wd2a /mnt てやると怒られるし、 /dev/wd2d も /dev/wd2c もだめだし。 a でも d でも c でもないってどんなんやねん、とか思いつつ 最近 x68k で HD 増設の時に覚えた(いや前からしってるけど) disklabel なんぞを使ってみる。cbb0 at pci2 dev 1 function 0: Ricoh 5C475 PCI-CardBus bridge (rev. 0x80) cbb0: interrupting at irq 11 cbb0: cacheline 0x0 lattimer 0x20 cbb0: bhlc 0x22000 lscp 0x20000000 cardslot0 at cbb0 slot 0 flags 0 cardbus0 at cardslot0: bus 0 device 0 cacheline 0x0, lattimer 0x20 pcmcia0 at cardslot0 wdc0 at pcmcia0 function 0 wd2 at wdc0 channel 0 drive 0: <> wd2: drive supports 1-sector pio transfers, lba addressing wd2: 8000 KB, 250 cyl, 4 head, 16 sec, 512 bytes/sect x 16000 sectors
e かいっ!!(青いところね)、分からんわ、そんなの。 つーわけでめでたく使えるようになりました。erika:~# disklabel wd2 # /dev/rwd2d: type: ESDI disk: label: fictitious flags: bytes/sector: 512 sectors/track: 16 tracks/cylinder: 4 sectors/cylinder: 64 cylinders: 250 total sectors: 16000 rpm: 3600 interleave: 1 trackskew: 0 cylinderskew: 0 headswitch: 0 # microseconds track-to-track seek: 0 # microseconds drivedata: 0 8 partitions: # size offset fstype [fsize bsize cpg] d: 16000 0 unused 0 0 # (Cyl. 0 - 249) e: 15975 25 MSDOS # (Cyl. 0*- 249) disklabel: boot block size 0 disklabel: super block size 0
これでやっと NetBSD で写真を取り込むことができる。 でも NetBSD でやりたかった理由って再起動しなくていいから、なんだけど 普段 xmovie 見るために -current (今1.5Xあたり)で暮らしてる私にとって 1.5.1 で出来たっていうのもなんだか中途半端(;_;。erika:~# mount -t msdos /dev/wd2e /mnt erika:~# df Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/wd1a 14342107 9235875 4389126 67% / kernfs 1 1 0 100% /kern rina:/export 28414450 16874027 9267267 64% /export procfs 4 4 0 100% /proc /dev/wd2e 7976 4216 3760 52% /mnt erika:~# ls /mnt/dcim/100olymp/ p6230001.jpg* p8050014.jpg* p8050027.jpg* p8110040.jpg* p8120053.jpg* p6230002.jpg* p8050015.jpg* p8050028.jpg* p8110041.jpg* p8120054.jpg* p6230003.jpg* p8050016.jpg* p8050029.jpg* p8110042.jpg* p8180055.jpg* p6230004.jpg* p8050017.jpg* p8050030.jpg* p8110043.jpg* p8180056.jpg* p6300005.jpg* p8050018.jpg* p8050031.jpg* p8120044.jpg* p8180057.jpg* p7080006.jpg* p8050019.jpg* p8050032.jpg* p8120045.jpg* p8180058.jpg* p7200007.jpg* p8050020.jpg* p8110033.jpg* p8120046.jpg* p8180059.jpg* p7200008.jpg* p8050021.jpg* p8110034.jpg* p8120047.jpg* p8180060.jpg* p7200009.jpg* p8050022.jpg* p8110035.jpg* p8120048.jpg* p8180061.jpg* p7200010.jpg* p8050023.jpg* p8110036.jpg* p8120049.jpg* p8180062.jpg* p7200011.jpg* p8050024.jpg* p8110037.jpg* p8120050.jpg* p8180063.jpg* p7210012.jpg* p8050025.jpg* p8110038.jpg* p8120051.jpg* p8180064.jpg* p7210013.jpg* p8050026.jpg* p8110039.jpg* p8120052.jpg* p8180065.jpg*
[Human68k/Nereid] X68030 に Nereid をさして ether_ne.sys を組み込んでみた。ちゃんと見えるね。 次に X68000 PRO-II + Xellent30PRO に Nereid を さしてみたが、 ドライバを組み込もうとした時点で白帯が出てしまう。 しばらく困っていたが、原因は初期設定のままの Xellent30 と ポートがぶつかっていることだった。 Xellent30 が初期設定では $ecc000〜$ecffff なのに対し、 Nereid(Neptune-X) は $ece300 を使ってる。 Xellent30 のポートを $ec8000 以降に変更して無事認識した。 けど、まだ ethernet まわりの設定の方法が分からず ifconfig は できるんだけど ping すると白帯が出て死亡する。むう。 まあ NetBSD で使えたらいいか。ではなくて Human68k で使えたら hdc の開発がはかどるんだけどなあ。 誰か教えて(爆)。
[x68k/Nereid] NetBSD/x68k で Nereid の Ethernet 部分を 使うためにソースを読んでみた。 なんかアドレス変換やってるのを逆算すると、カーネルコンフィグの 中の neptune ドライバの addr を 0xece100 にすればよさげな感じがした。 コンパイルしてみた。できた。万歳。 元から Neptune-X 互換とうたってるものだからこれくらいあっさりできても いいよね。 ということで Nereid を NetBSD/x68k で使うには 以下をカーネルコンフィグに追加してカーネルを作りなおせばよいです。
で、(やたら最近多い ^^;) dmesg です。青いところね。 Neptune-X て表示されるのはご愛敬ということで。 まあそのうち Nereid に直すでしょう。 [直しました]neptune2 at intio0 addr 0xece100 intr 249 ne0 at neptune? addr 0x300
NetBSD 1.5X (YUKA-CURRENT) #25: Sun Aug 19 17:35:55 JST 2001 isaki@erika.local:/var/obj/current/x68k-nereid/sys/arch/x68k/compile/YUKA-CURRENT X68030 (m68030 CPU/MMU, m68882 FPU, 30MHz clock) total memory = 12288 KB avail memory = 9732 KB using 179 buffers containing 716 KB of memory mainbus0 (root) intio0 at mainbus0 mapped at 0x800000 mfp0 at intio0 addr 0xe88000 intr 0x40 kbd0 at mfp0 (no connected keyboard) clock0 at mfp0: MFP timer C rtc0 at intio0 addr 0xe8a000: RP5C15 dmac0 at intio0 addr 0xe84000: HD63450 DMAC dmac0: 4 channels available. zsc0 at intio0 addr 0xe98000 intr 0x70 zstty0 at zsc0 channel 0 zsc0: channel 1 not configured neptune0 at intio0 addr 0xece000 intr 0xf9: no device found. neptune1 at intio0 addr 0xece400 intr 0xf9: no device found. neptune2 at intio0 addr 0xece100 intr 0xf9: Neptune-X ISA bridge ne0 at neptune2 addr 0x000300 ne0: NE2000 (RTL8019) Ethernet ne0: Ethernet address 00:50:c2:10:60:02 ne0: 10base2, 10baseT, 10baseT-FDX, auto, default [0x00 0x10] auto opm0 at intio0 addr 0xe90000 scsirom0 at intio0 addr 0xfc0000: On-board at 0xe96020 spc0 at scsirom0 scsibus0 at spc0: 8 targets, 8 luns per target grfbus0 at mainbus0 grf0 at grfbus0: 768 x 512 16 colors builtin display ite0 at grf0: rows 32 cols 96 scsibus0: waiting 2 seconds for devices to settle... sd0 at scsibus0 target 0 lun 0: <TOSHIBA, MK2428FB, C10B> SCSI2 0/direct fixed sd0: 500 MB, 4002 cyl, 8 head, 32 sec, 512 bytes/sect x 1024512 sectors sd1 at scsibus0 target 1 lun 0: <SEAGATE, ST52160N, 0285> SCSI2 0/direct fixed sd1: 2069 MB, 6536 cyl, 4 head, 162 sec, 512 bytes/sect x 4238282 sectors boot device: sd0 root on sd0a dumps on sd0b root file system type: ffs
[x68k/nereid-usb] Nereid に載ってる USB コントローラって NetBSD でサポートしてないのね。一から書かにゃならんてことか。 これは3カ月コースだな。 ということでチップの仕様書取り寄せてお勉強中。 プリンタ買って電車の中で読みたいところ。 というか画面で PDF 読むほどつらいことはないなあ。
[x68k/nereid-usb] NetBSD/x68k から Nereid の USB ポートを 叩けることだけ確認。
[x68k/nereid-usb] つーか平日からこんなことしてるから寝坊するんだが。(ぉ
[x68k/nereid-usb] 問題は例によって私が USB を知らないこと (パケットとかデバイスアドレスとかって今回チップの仕様書読んでて 初めて知った)と、 NetBSD の MI USB ドライバとのリンク方法が分からないこと。 今回は BSD Magagine の前川さんの連載記事があるから、これまでの audio ドライバや scsipi ドライバとのリンクよりは少しはましかな。
[x68k/nereid-usb] usbdi 層とのリンク方法がさっぱり分からない。 というかサンプルが UHCI と OHCI だけだからなあ。 まあ、その前に USB 自体も分かってないんだけど(泣)。
[x68k/nereid-usb] usbdi 層とのリンク方法がちょっと分かった。 いんちきコードでとりあえず usb0 がアタッチされてすぐに panic する ところまでは書いた。 だからそこまでは誰でもできるんだって(3回目)。 週末は Nereid 実機はメモリの耐久テストにお預けしといて コード書き書きかなあ。
[x68k/Nereid] 遅くなりましたが、先週末に届いた Nereid β版の写真 を公開しました。
[Human68k] 内蔵電池を交換したころから TCP/IP ドライバがうまく動作しなくなっていた。 最初の (TCP の?) 数パケットが飛んだあと逝ってしまう。 せっかく Nereid があるのになあ、と思って原因究明してみることにする。 そういや NetBSD カーネル読み込むために FD 起動したときは RTA50i に ppp して NetBSD/i386 に ftp できるから、 HDD の起動中の設定に原因があるってことか。 何も変更した記憶なんかないんだけどなあ。 やっぱ config.sys とかも CVS (or RCS) した方がいいかなあ。
Nereid のメモリ耐久試験のために純正電源を積んだ PRO (+Xellent30、無改造) を持ち出してきた。お部屋に X68k が3台(しかも全部 030)、AT 互換機が2台、 人から FreeBSD のインストールを頼まれてるノート PC もあわせると お部屋に PC が6台。もとい PC 3台とパーソナルワークステーション3台、 うーん。いやそうじゃなくて いつもの PRO-II じゃなく、今回持ち出してきた PRO に HD をつないで 起動してみても TCP/IP ドライバが固まることが分かった。 ということは完全に設定の問題だな。何変更したんだ > 自分
ふと思いついて 68000 モードで起動してみた。使えた。 うーん、Nereid の LAN がやっと使えた。でも 68000 モードなので 快適度半減。 でもこれが常時 PRO-II にささるようになれば、netbsd.gz を 毎回1分半かけてシリアル転送しなくてもよくなるわけだ。 これはすごい。早く製品版になってほしいぞ。 ってことはさっさと USB ドライバ書けってことだな(笑)。 しかし、68030 モードで HD 起動のときだけ TCP/IP ドライバが こけるようになった理由が分からない。以前は使えてたのに...。
[x68k?/nereid-usb?] USB コントローラの PDF な仕様書が画面で(gvで)読みづらいので、 当初から買う予定にはあったプリンタを急きょ買ってきた(ぉ。 しかも EPSON PM-780CS。縁なし印刷できるらしい。ま、しないけどね。 a2ps が出せればいいって程度。こういうトリガーでもないと買わないからね。 でも Nereid のメモリと LAN まわりに手をとられててまだ箱のまま。
[Human68k] ようやく原因が分かった。原因は何故か dcache2.x だった。 何故だ? dcache2 とはもう何年ものつき合いになるし、TCP/IP ドライバを 入れてからももう3年になるのになぜ今になって急に?。 分からんけど、まあディスクキャッシュがなくなるだけでネットワークが 使えるなら痛くはないな。lndrv とかが原因だったら痛いが。
[Human68k/Nereid] 今日は Nereid のメモリとイーサネット部分の 動作確認。何のトラブルもないと自分の確認の仕方を疑ってしまうなあ。
[x68k/Nereid] NetBSD/x68k でも確認。 つーか私の担当は NetBSD での確認なんだが(笑)。 だって NetBSD じゃ何もおきそうにないんだもん。 実際何も問題にならなかったし。
[x68k/Nereid] neptune0 at intio0 addr 0xece100 というけったいな アドレスでアタッチされるのも如何なものか というもっともなご意見を Nereid 本部 (なんかこう書くと Nerv みたいだ < ぉ) から頂いたので、 Nereid のイーサネット用ドライバを書きはじめる。 当初 neptune0 に似た nereid0 という何らかの 中間デバイスぽいものを導入しようとしていたが、どうもしっくりこず、 よくよく考えてみるといきなり intio0 にアタッチするのが 正しい姿に思えてきた。 ので、早速書いてみた。 ドライバといってもバスアタッチの部分だけ書けばいい。 sys/arch/x68k/dev/neptune.c と sys/arch/x68k/dev/if_ne_neptune.c を参考に 見よう見まねで書いて4時間くらいで完成した。
NetBSD 1.5X (NEREID) #30: Sun Aug 26 18:25:02 JST 2001 isaki@erika.local:/var/obj/current/x68k-nereid/sys/arch/x68k/compile/NEREID X68000/ACE/PRO/EXPERT/SUPER (m68030 CPU/MMU, m68882 FPU, 25MHz clock) total memory = 10240 KB avail memory = 8064 KB using 153 buffers containing 612 KB of memory mainbus0 (root) intio0 at mainbus0 mapped at 0x800000 ne0 at intio0 addr 0xece300 intr 0xf9: Nereid Ethernet ne0: NE2000 (RTL8019) Ethernet ne0: Ethernet address 00:50:c2:10:60:02 ne0: 10base2, 10baseT, 10baseT-FDX, auto, default [0x00 0x10] auto xel0 at intio0 addr 0xec8000: Xellent30 MPU Accelerator. :
[x68k/nereid-usb] 続いて早速 USB 部分のドライバに取りかかる。 bus_space(9) がやっと理解でき始めたので、 こないだ途中まで書きかけてたのは捨てて 最初から bus_space(9) を使って書き始める。
[x68k/nereid-usb] sys/arch の下あたりで grep を 駆使してて気づいたけど、NetBSD-current の 44port 中、 USB をサポートしてる port って6つしかないのね。 7番のりだぜ、すごいぞ x68k-port (ただし予定)。 おまけに冗談抜きで USB コントローラの実装も UHCI と OHCI の2つしか ないらしい。EHCI てのはあるけどまだ中身ないし。 3番のりだぜ、すごいぞ Nereid (ただし予定)。
[x68k/nereid-usb] bus_space(9) 使って コントローラからリビジョン情報を取り出すことに成功した。 いんちき usb アタッチルーチンを書いて即パニックする。
[x68k/Nereid] Nereid の ページの掲示板で、Nereid プロジェクトの進捗として 「NetBSD68k ドライバ開発中(イーサネット部分は開発完了)」 とあった。アタッチルーチン書いただけなのに開発完了とか書かれてて ちょっとこっぱずかしい (^^;。 でもよく考えると Human68k ではドライバ書かずとも使えるんだから (いや NetBSD/x68k でも書かなくても使えるけど)、まあいいか。
それより NetBSD68k じゃなくて NetBSD/x68k なんだけどな(ぼそ)。
もし SL811HS/T のコードがすでに NetBSD に入っていたとしたら これも4時間でドライバ開発終了してたんだよね。残念だなあ。 それにしても MI/MD 分離が出来てる NetBSD ってすごいよねえと改めて思う。