0

OS/161 コードに新しいシステム コールを追加しようとしていますが、プロトタイプを追加する場所がわかりません。カーネル空間とユーザー空間に追加することになっていると思いますが、プロトタイプをどのファイルに配置すればよいか正確にはわかりません.OS/161でサンプルシステムコールを追加する方法を説明するガイドはどこかにありますか. ?

printone()テストとして、ユーザーがそのプログラムを実行すると、「1」が出力されるという関数を追加しようとしています。

4

1 に答える 1

1

別のシステム コール番号を追加します。たとえばSYS_print1callno.hこれらの定数が好きSYS_forkSYS_read定義されている場所に、またはどこにでも追加します。

呼び出す関数を選択するために使用されている場所を見つけてくださいmips_syscall()。ただし、このバージョンのソース コードでSYS_rebootsys_reboot(). このソース コード リファレンスはおそらく不完全です。コメントは次のことを示唆しています。

00049 mips_syscall(struct trapframe *tf)
00050 {
...
00070         switch (callno) {
00071             case SYS_reboot:
00072                 err = sys_reboot(tf->tf_a0);
00073                 break;
00074 
00075             /* Add stuff here */
00076  
00077             default:
00078                 kprintf("Unknown syscall %d\n", callno);
00079                 err = ENOSYS;
00080                 break;
00081         }
...
00108 }

case SYS_print1:同様に、あなたの機能を専用の関数に追加して実装しますsys_print1()

カーネル側はこれで終わりです。

のユーザー モード プロトタイプは、with などと一緒print1()に宣言できます。unistd.hread()

のユーザーモード実装がread()アセンブリ ファイルにあるようです。最終的には、C では直接利用できないMIPSsyscall命令を実行する必要があるため、これは合理的です。print1()同様の方法で実装する必要があります (SYS_print1適切なレジスタにロードして実行しますsyscall)。

于 2013-03-18T02:28:42.500 に答える