NetBSD お遊び日記 (2002年10月)。
$Id: diary-200210.html,v 1.19 2002/11/03 02:48:04 isaki Exp $
≪ 2002年9月 | 2002年11月 ≫

2002/10/05

[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");


2002/10/06

[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); を呼ぶ。



2002/10/13

[x68k/1.6I] なんか今週はカーネルがぴくりとも起動せずに リブートかかるようになったんすけど...。(T_T;

[x68k/1.6I] printf() が使えない環境でデバッグするにはどうすべか と思ってたらキーボードの LED を光らせるのが一番簡単っぽい。 てか、これって常識?

[x68k/1.6I] 2002-10-12 夜 (JST) 頃のカーネルで cut & try。 もっと科学的な方法もありそうなもんだが。

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 が光らない。
config_console() から呼ばれる x68k_config_found() あたりが やっぱり怪しげ。

[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 のバグ直さなきゃ。 あうあう。先は長い。


2002/10/14

[x68k/TODO] なんかやるとこ多すぎなので TODO リスト。

[x68k/sysinst] 動かないのはともかくも、コンパイルが通らない というのは最後の flist のチェックに辿り着かないということなので まずいかも、と思って、なんとなく見てみる。けどいつの間にどこが太った のか知らないけどどう減らしても 1.2MB には収まらない。 そこで従来から気になってた /usr/sbin/installboot の他の アーキテクチャ用のコードをコンパイルしないようにしてみたところ 見事収まった。まあどうせ他が太ったらすぐあふれるんだろうけど これは効果ありと見て頑張ったほうがいいのかしらん。 てか最初からそうなってないのは何故?


2002/10/20

[x68k/commit] 昨日から今日にかけて arch/x68k/dev の 使われてない dmavar.h と sdb.h を削除、先月末から autoconf 絡みで カーネルが起動しなくなってるやつの修正、x68k/dev/fd.c の デバッグメッセージがちょい変なのを修正。

[x68k/sysinst] 先週末 installboot を各アーキテクチャ専用に するのを考えてたら、今週のうちに lukem さんが ftp をコンパクトにする 方法で全部の port の sysinst まわりをきれいにしたらしい。 ま、餅は餅屋、、、じゃなくて素人は下手なこと考えるなってことで(汗。


2002/10/26

[x68k/sysinst] インストールフロッピーを作る時の ユーザランドイメージは distrib/x68k/floppies/ramdisk で作るのは知ってて、カーネルは INSTALL だというのも 知ってたけど、それがどう繋がるのかは分かってなかったけど、 mdsetimage(8) ってコマンドがそのディスクイメージを INSTALL カーネル の md(4) の中に埋め込むのねん。


2002/10/27

[x68k/sysinst] distrib/x68k/floppies/ramdisk/MakefileIMAGESIZE はどうも単に増やせばいいというものでもないらしい。 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 だけ改善するのでもいいのかしら。


2002/10/28

[x68k/stand] と思ってたら、lukem さんからおっけーが出たっぽい。 今週末に早速 commit しよう。


≪ 2002年9月 | 2002年11月 ≫
井崎のホームページへ戻る
isaki@NetBSD.org / isaki@x68k.net