[ TOP | Recently ]

1999-06-23 serial


「consinit() は kern/init_main.c の main() の中で出てくるのに、
それ以前に panic() とか printf() した場合どうやって文字が出てんの?」
と聞いたら、
「consinit() は二回以上呼ばれてもおっけーなように作って、
machdep.c の中とかで呼べばいい」と msaitoh 師匠がおっしゃられた。
あっそ。そゆこと。

というわけでシリアル周りをしらべる。

console に文字を出すのは、APBUS SYSTEM MONITOR ROM
routine を使うとすごく簡単(/usr/include/apbus/ap*.h 参照)である、
とうことは先日書いた通りなのだが、まぁ、NEWS5000 の serial (esccf) も、
文字出すだけならたぶんタイミングとって port にキャラクタ書くだけ
だろうから、sccfputc とか作っても簡単なはずだ。(きっと)

ということで後者でゆく。なんとなく I/O 叩きたい年頃だし。

いやしかし、apcall できる仕組をつくっとくのも重要なのだな。
なんてったってドライバ書かずに ether しゃべれるし、:-)
よく見ると、すげーおいしそうな ioctl

#define 	APIOC_SYS	(APIOC_CIO+200)
#define 		APSIOCGNLEDS	(APIOC_SYS+0)
#define 		APSIOCLEDON	(APIOC_SYS+1)
#define 		APSIOCLEDOFF	(APIOC_SYS+2)
#define 		APSIOCGLEDSTAT	(APIOC_SYS+3)
#define 		APSIOCSHUTDOWN	(APIOC_SYS+4)
#define 		APSIOCEXIT	(APIOC_SYS+5)
#define 			APEXIT_REBOOT	0x00000000
#define 			APEXIT_HALT	0x00000008
#define 			APEXIT_POWOFF	0x00000080

がたくさんあるし...

それにはメモリの最後 1M を残しとかなきゃいけないのか...?


EOF