宿題のために Minix でシステム コールを作成する必要があります。ほとんどのセットアップが完了しましたが、何らかの理由で、システム コールが実際に呼び出している関数が正しく検出されません。(不適切な言葉遣いの選択を許してください。これを説明するのに最適な言葉はわかりません)。
次のコードmylib.h
で/usr/include
(および)を作成しました。/usr/src/include
#include <lib.h>
#include <unistd.h>
#include <stdio.h>
int mycall(){
message m;
return (_syscall(PM_PROC_NR, MYCALL, &m));
}
mylib.h
私も適切に追加しましたMakefile
。
で定義MYCALL
し、の対応するスロットに/usr/src/include/minix/callnr.h
追加しました。do_mycall
/usr/src/servers/pm/table.h
に追加int do_mycall(void);
し/usr/src/servers/pm/proto.h
、 に簡単な関数宣言を追加しましたmisc.c
。
int do_mycall(void){
printf("I've been called");
return 0;
}
また、そのディレクトリ.c
に追加した独自のファイルに配置しようとしました。Makefile
、 、、に出演make
しました。/usr/src/servers/pm/
/usr/src/include
make includes
/usr/src/releasetools
ただし、 を呼び出しmycall()
て戻り値をキャッチすると、-1 になります。
私はいくつかのプリントを追加しました. の関数が呼び出されていることがわかります. mylib.h
MYCALL は のインデックスとして正しく定義されていtable.h
ますtable.h
.do_mycall
実行時にそこにあります)。したがって、私が言えることは、 in がその_syscall
関数do_mycall
に正しくマッピングされていないということだけです。
photo.h
のプロトタイプをのコードだけに置き換えようとしましたがmisc.c
(そのため、プロトタイプは失われます)、何もmake
変わらず、文句も言いませんでした。
これを引き起こしている原因を特定するのを手伝ってくれる人はいますか?
がどこで定義されているかを誰かが知っていれば_syscall
、それが役立つかもしれません。