1

cpu 構造体に追加された数値をインクリメントするシステム コールを作成しようとしています。ただし、システムコールは無効でなければならないと考えているので、たとえば呼び出すときに値を渡すにはどうすればよいですか。

増分番号 (3);

4

2 に答える 2

0

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;
}
于 2021-12-29T20:07:41.220 に答える
0

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);
于 2017-11-18T07:52:14.757 に答える