[i386/1.6I] そういや i386 がマルチプロセッサに対応したらしい。 って今までしてなかったてことか?
[x68k/1.6I] なんかコンフィギュレーション周りががんがん 変更されてるんですけど、未だに x68k が起動できない...。 てことで、カーネルが起動して copyright が表示されるまで (のうち、関係してると思われるところ)。
sys/kern/init_main.c: 168 main(void) 169 { : /* 9/24前後で変化なし */ 196 consinit(); 197 printf("%s", copyright); sys/arch/x68k/x68k/machdep.c: 179 consinit() 180 { : /* 9/24前後で変化なし */ 184 config_console(); : 189 cninit(); : 214 } sys/arch/x68k/x68k/autoconf.c: 147 config_console() 148 { 149 struct cfdata *cf; 150 /* 9/30 1.31 で追加 */ 151 config_init(); sys/kern/subr_autoconf.c: /* 9/30 1.74 で configure() から分離 */ 188 config_init() 189 { : 224 } sys/arch/x68k/x68k/autoconf.c に戻る: 147 config_console() 148 { : 156 cf = config_rootsearch(NULL, "mainbus", "mainbus");
[x68k/1.6I] と思ってたら、いつの間にか起動できるように なってた。コンソールには何も表示されないけどちゃんとマルチユーザで 起動できるぞ。むう。しかも dmesg 見たら cpu が 68030/14MHz とかに なってた。まだまだ怪しげ。
[x68k/1.6I] どうもカーネルコンフィグファイルのどれかが 影響したっぽい。けどまだコンソールに何も表示されないので、先にそっちを なんとかしないとまともに調べることもできない。
[x68k/consinit] なんかコンソールの初期化にかなりトリッキーな ことをしてるせいで、自動コンフィギュレーション周りをいじったら 動かなくなってしまったとかいうオチのように見えてきた。かなりややこしげ。 以下 -D'2002-09-23 00:00:00 GMT' のソースを元に解析。
sys/kern/init_main.c::main() consinit(); printf("%s", copyright); となっているためコンソールを初期化して consinit() から戻ってくればよい。 sys/arch/x68k/x68k/machdep.c::consinit() すぐに config_console() を呼ぶ。 sys/arch/x68k/x68k/autoconf.c::config_console() 150: cf = config_rootsearch(NULL, "mainbus", "mainbus"); root 直下のデバイスのうち "mainbus" に対する cfdata を返す。 これを &cfdata["mainbus"] と勝手に表記。 153: x68k_config_found(cf, NULL, "intio", NULL); sys/arch/x68k/x68k/autoconf.c:: (112行〜) x68k_config_found(cfdata *pcfp, device *pdp, void *aux, cfprint_t pfn) 大域変数 x68k_realconfig は 0 なので、 temp->dv_cfdata == &cfdata["mainbus"] で config_search(NULL, &temp, "intio"); を呼ぶ。 sys/kern/subr_autoconf.c:: (224行〜) config_search(cfmatch_t fn, device *parent, void *aux) デバイスを全部なめて親が自分(parent)であるようなデバイスについて match() を全部実行してみて優先度の高いものの cfdata を返す。 parent はダミーで mainbus を示しているので mainbus の子デバイス (intio, grfbus, xcom, xcom) について検査することになる。 intio_match() の中で、x68k_realconfig == 0 なら cfdata_intiobus に &cfdata["intio"] を入れておくというハックがある。 grfbusmatch() 中にも似たのがある。 intio, grfbus, xcom はどれも 1 を返すので、最初に見つかったやつの cfdata を返すことになる。 手元の ioconf.c だと grfbus になる。ほんとか?? sys/arch/x68k/x68k/autoconf.c::続き cf に &cfdata[grfbus] が返ってきたので cf->cf_attach->ca_attach を呼ぶ。つまり grfbusattach(&temp, NULL, "intio"); を呼ぶ。 sys/arch/x68k/dev/grf_machdep.c:: grfbusattach(device *pdp /*parent*/, device *dp /* self */, void *aux) dp == NULL なので i = 0; x68k_config_found(&cfdata[grfbus], NULL, (void*)&i, grfbusprint); を呼ぶ。
[x68k/1.6I] なんか今週はカーネルがぴくりとも起動せずに リブートかかるようになったんすけど...。(T_T;
[x68k/1.6I] printf() が使えない環境でデバッグするにはどうすべか と思ってたらキーボードの LED を光らせるのが一番簡単っぽい。 てか、これって常識?
[x68k/1.6I] 2002-10-12 夜 (JST) 頃のカーネルで cut & try。 もっと科学的な方法もありそうなもんだが。
config_console() から呼ばれる x68k_config_found() あたりが やっぱり怪しげ。sys/kern/init_main.c::main() consinit() を呼ぶ。 sys/arch/x68k/x68k/machdep.c::consinit() config_console を呼ぶ。 sys/arch/x68k/x68k/autoconf.c::config_console() config_rootsearch("mainbus"); x68k_config_found("intio"); までは成功するが x68k_config_found("grfbus"); の後 (config_console の最後) においた LED が光らない。
[x68k/1.6I] ちょっと ad hoc かもしれないけど一応復旧させた。 thorpej 氏からおっけーが出たら commit しよう。
[x68k/etc] えらくスタックが伸びてしまって alloca() してると 死にそうな感じだが (そうか会社にいる仕事出来ない人は頭の中で alloca() 使ってるのか!)、FD が使えないのを調べてて、DMA あたりを疑ってみてて、 intio_dmac.c あたりに無駄なデバッグコードを見つけてこれ消してもいいのかしら とか思ってたら autoconfig が突っ込まれて死亡したって訳で、3週間ぶりに スタックが1つ pop されてももう忘れてるよなあ..。
[x68k/etc] てことで、3週間ぶりに x68k が生き返ったので、 インストールしないのにコンパイルするだけの full build をしてみる。 そしたら sysinst.fs が容量超過でこけた。むう、そろそろ2麻衣組に しないと駄目かな。そういや2麻衣組にするには fd のバグ直さなきゃ。 あうあう。先は長い。
[x68k/TODO] なんかやるとこ多すぎなので TODO リスト。
[x68k/sysinst] 動かないのはともかくも、コンパイルが通らない というのは最後の flist のチェックに辿り着かないということなので まずいかも、と思って、なんとなく見てみる。けどいつの間にどこが太った のか知らないけどどう減らしても 1.2MB には収まらない。 そこで従来から気になってた /usr/sbin/installboot の他の アーキテクチャ用のコードをコンパイルしないようにしてみたところ 見事収まった。まあどうせ他が太ったらすぐあふれるんだろうけど これは効果ありと見て頑張ったほうがいいのかしらん。 てか最初からそうなってないのは何故?
[x68k/commit] 昨日から今日にかけて arch/x68k/dev の 使われてない dmavar.h と sdb.h を削除、先月末から autoconf 絡みで カーネルが起動しなくなってるやつの修正、x68k/dev/fd.c の デバッグメッセージがちょい変なのを修正。
[x68k/sysinst] 先週末 installboot を各アーキテクチャ専用に するのを考えてたら、今週のうちに lukem さんが ftp をコンパクトにする 方法で全部の port の sysinst まわりをきれいにしたらしい。 ま、餅は餅屋、、、じゃなくて素人は下手なこと考えるなってことで(汗。
[x68k/sysinst] インストールフロッピーを作る時の ユーザランドイメージは distrib/x68k/floppies/ramdisk で作るのは知ってて、カーネルは INSTALL だというのも 知ってたけど、それがどう繋がるのかは分かってなかったけど、 mdsetimage(8) ってコマンドがそのディスクイメージを INSTALL カーネル の md(4) の中に埋め込むのねん。
[x68k/sysinst] distrib/x68k/floppies/ramdisk/Makefile の IMAGESIZE はどうも単に増やせばいいというものでもないらしい。 1200k で足りないと言われてたので 1250k にしてもまだ足りないと言われる、 と思って困ってたのだが 1240k 付近だと大丈夫だった。 ディスクフォーマットを知らないのであれだがなんとなく感覚は分かる。 てことで再度フルビルド中。これで無事通れば commit してしまいましょう。 久しぶりに x68k も bootable かつ buildable な健全な状態に戻れるかも。
[x68k/etc] てことで sysinst.fs 問題のカタがついたので、 ようやく distrib/x68k/stand とか GENERIC_SMALL とかに取り掛かれそう。 って fd どうしよう。どうも UVM のローンとやらで ping -s 4096 で カーネルがお亡くなりになるらしいけど、x68k のフロッピーが 4096 バイト 以上で化けるのは同じ原因だと嬉しいんだけどなあ。 もしこれも UVM 問題だとしたら私には所詮手に負えないから UVM が 解決するまでちょっとほったらかしておくことにしよう。 ほかにやること山積みだし。
[x68k/stand] てことで distrib/x68k/stand の パッチとかを tech-install あたりに投げてみた。まあ例によって 私の英語なぞ誰も読めんだろうから来週あたりにさくっと commit して しまうことになるでしょう。
[x68k/sram] 久々に sram0 を物理デバイス化するのをやりなおしてみた。 しかし sysport どうするかねえ。この辺見だすと pow も汚いし mfp も 直したくなるし、って言ってると intio まで直すことになってでかすぎて 破綻するのよねん。とりあえず sram0 だけ改善するのでもいいのかしら。
[x68k/stand] と思ってたら、lukem さんからおっけーが出たっぽい。 今週末に早速 commit しよう。