cpu 構造体に追加された数値をインクリメントするシステム コールを作成しようとしています。ただし、システムコールは無効でなければならないと考えているので、たとえば呼び出すときに値を渡すにはどうすればよいですか。
増分番号 (3);
cpu 構造体に追加された数値をインクリメントするシステム コールを作成しようとしています。ただし、システムコールは無効でなければならないと考えているので、たとえば呼び出すときに値を渡すにはどうすればよいですか。
増分番号 (3);
sysproc.c で、void 引数を持つ関数を宣言します。内部の引数を取得します。残りについては、@Sravani の回答に従ってください。
int
sys_incrementNum(void)
{
int num;
argint(0,&num); //retrieving first argument
cprintf("%d - Inside system call!",num);
return num + 1;
}
Xv6 には、ユーザー空間からカーネル空間に引数を渡すための独自の関数 (システム コール) があります。argint() を使用してシステム コールで整数引数を取得し、argstr() を使用して文字列引数を取得できます。
引数の受け渡しは従来の方法で行うことができますが、引数を取得するには、これらのメソッドを使用する必要があります。あなたの場合:
syscall.c で:
extern int incrementNum(int);
static int (*syscalls[])(void) = {
...
[SYS_incrementNum] sys_incrementNum,
};
syscall.h 内
#define SYS_incrementNum 22
user.h 内
int incrementNum(int);
Usys.Sで
SYSCALL(incrementNum);
sysproc.c (引数を取得する場所)
int
sys_incrementNum(int num)
{
argint(0,&num); //retrieving first argument
cprintf("%d - Inside system call!",num);
}
システムコールの呼び出しは、次の方法で実行できるようになりました:
incrementNum(3);