FreeBSD(98) ハンドブック : FreeBSD(98)にモデムをつなぐ : kernel再構築
Previous: /etc/ttysの設定
Next: modemの設定

2.3. kernel再構築

kernel再構築のやり方は 98doc/Install.98 の 「8. カーネルソースのみのインストール」、 カーネルの再構築 を熟読の上行って下さい。

バージョンによっては以下のようなパッチが必要な場合があります。

着信を可能とするためのpatch(FreeBSD(98)2.0.5の場合のみ必要です)

以下の部分を切り取って /usr/src/sys/pc98/pc98/sio.c にpatchを当てます。

<hr>

*** sio.c.orig    Sun Oct 15 19:53:32 1995
--- sio.c    Thu Jun 20 09:17:12 1996
***************
*** 1416,1421 ****
--- 1416,1422 ----
      tp = com->tp;
      s = spltty();
      (*linesw[tp->t_line].l_close)(tp, flag);
+     com->modem_checking = 0;
      disc_optim(tp, &(tp->t_termios), com);
      siostop(tp, FREAD | FWRITE);
      comhardclose(com);
***************
*** 3291,3297 ****
--- 3292,3301 ----
      com->pc98_prev_modem_status = msr;
      delta = ( com->pc98_modem_delta |= delta );
      splx(s);
+ #if 0
      if ( tp->t_state & (TS_ISOPEN) ) {
+ #endif
+     if ( com->modem_checking || (tp->t_state & (TS_ISOPEN)) ) {
          if ( delta ) {
              commint(dev);
          }
<hr>

CPUアクセラレータを使用時、受信データが重複して表示されるのを 回避するためのpatch (FreeBSD(98)2.0.5の場合のみ必要です)

以下の部分を切り取って /usr/src/sys/pc98/pc98/sio.c にpatchを当てます。

<hr>

*** sio.c.orig    Sun Oct 15 19:53:32 1995
--- sio.c    Fri Dec  8 12:16:15 1995
***************
*** 1667,1672 ****
--- 1668,1674 ----
  #if defined(PC98)
              if(IS_8251(com->pc98_if_type)){
                  recv_data = inb(com->data_port);
+                 outb(0x5f, 0);
                  if(tmp & 0x78){
                      pc98_i8251_or_cmd(com,CMD8251_ER);
                      recv_data = 0;
<hr>

FreeBSDからのデータ送信が遅くなるのを回避するためのpatch (FreeBSD(98)2.1.0の場合のみ必要です)

以下の部分を切り取って /usr/src/sys/pc98/pc98/sio.c にpatchを当てます。

<hr>

--- sio.c.orig	Sun Nov 26 23:12:14 1995
+++ sio.c	Mon Jun 24 19:33:51 1996
@@ -1830,11 +1830,6 @@
 			if (ioptr >= com->obufq.l_tail) {
 				struct lbq	*qp;
 
-#if defined(PC98)
-				if(IS_8251(com->pc98_if_type))
-					if ( pc98_check_i8251_interrupt(com) & IEN_TxFLAG )
-						com_int_Tx_disable(com);
-#endif
 				qp = com->obufq.l_next;
 				qp->l_queued = FALSE;
 				qp = qp->l_next;
@@ -1845,6 +1840,11 @@
 				} else {
 					/* output just completed */
 					com->state &= ~CS_BUSY;
+#if defined(PC98)
+					if(IS_8251(com->pc98_if_type))
+						if ( pc98_check_i8251_interrupt(com) & IEN_TxFLAG )
+							com_int_Tx_disable(com);
+#endif
 				}
 				if (!(com->state & CS_ODONE)) {
 					com_events += LOTS_OF_EVENTS;
<hr>


FreeBSD(98) ハンドブック : FreeBSD(98)にモデムをつなぐ : kernel再構築
Previous: /etc/ttysの設定
Next: modemの設定