宿題のために 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/includemake includes/usr/src/releasetools
ただし、 を呼び出しmycall()て戻り値をキャッチすると、-1 になります。
私はいくつかのプリントを追加しました. の関数が呼び出されていることがわかります. mylib.hMYCALL は のインデックスとして正しく定義されていtable.hますtable.h .do_mycall実行時にそこにあります)。したがって、私が言えることは、 in がその_syscall関数do_mycallに正しくマッピングされていないということだけです。
photo.hのプロトタイプをのコードだけに置き換えようとしましたがmisc.c(そのため、プロトタイプは失われます)、何もmake変わらず、文句も言いませんでした。
これを引き起こしている原因を特定するのを手伝ってくれる人はいますか?
がどこで定義されているかを誰かが知っていれば_syscall、それが役立つかもしれません。